这段汇编我看起来仅仅运行了这一部分,但是理论上讲这段程序必定会跳转,以下是在什么地方进行跳转的 ?
还有对一个程序压缩加壳以后,加壳后的程序执行了以后壳是否会把原始程序入口函数当做一个函数来调用,也就是整个加壳后的程序是作为同一个程序来运行的,只是原始程序成了壳程序的一部分?
.aspack:00406000 _aspack segment para public 'DATA' use32
.aspack:00406000 assume cs:_aspack
.aspack:00406000 ;org 406000h
.aspack:00406000 db 90h ; ?
.aspack:00406001
.aspack:00406001 ; =============== S U B R O U T I N E =======================================
.aspack:00406001
.aspack:00406001
.aspack:00406001 public start
.aspack:00406001 start proc near
.aspack:00406001 pusha
.aspack:00406002 call loc_40600A
.aspack:00406002 ; ---------------------------------------------------------------------------
.aspack:00406007 db 0E9h ; é
.aspack:00406008 db 0EBh ; ë
.aspack:00406009 db 4
.aspack:0040600A ; ---------------------------------------------------------------------------
.aspack:0040600A
.aspack:0040600A loc_40600A: ; CODE XREF: start+1j
.aspack:0040600A pop ebp
.aspack:0040600B inc ebp
.aspack:0040600C push ebp
.aspack:0040600D retn
.aspack:0040600D start endp ; sp-analysis failed
.aspack:0040600D
.aspack:0040600D ; ---------------------------------------------------------------------------
--------------------------------------之间N多DB 0之类的数据声明-------------------------------
.aspack:00406F5B db 0
.aspack:00406F5B _aspack ends
------解决方案--------------------------------------------------------
这一段还是比较简单的吧,也是可以跟踪的。call 到 loc_40600a 后,pop ebp 出栈的是返回地址 00406007,inc ebp 后就是 00406008 了,push ebp 和 ret 两指令就是转去了 00406008 处,这里是 EB 04 指令,即一个 short 类的 jmp 指令:jmp 0040600e
加壳了,壳就成了程序的入口;程序的原来的入口,会在壳自身运行完后,转移到那里的。