acprotect专业1.3c主程序脱壳(2)(图)

审查:4。倾倒

根据我们的经验unpackme,垃圾不在虚假OEP,和许多在BSS段的数据已经在这时间初始化。最好是在第一句转储(push ebp)。但是push ebp远离虚假OEP,L.



封隔器的初始化环境:













首先查看发送第一个调用的shell代码:






4。倾倒

根据我们的经验unpackme,垃圾不在虚假OEP,和许多在BSS段的数据已经在这时间初始化。最好是在第一句转储(push ebp)。但是push ebp远离虚假OEP,L.



封隔器的初始化环境:













首先查看发送第一个调用的shell代码:





可以看出,呼叫进入原程序空间前,最后一个例外是div 0。使用当前OllyDbg脚本(与737b63),停止修改异常拦截选项后:





尝试拦截异常并找到合适的倾倒位置,ollyscript脚本停止当前的环境:







堆栈是pushad结果。













审查:4。倾倒

根据我们的经验unpackme,垃圾不在虚假OEP,和许多在BSS段的数据已经在这时间初始化。最好是在第一句转储(push ebp)。但是push ebp远离虚假OEP,L.



封隔器的初始化环境:













首先查看发送第一个调用的shell代码:






当第七div 0异常时:









注意,EBP的值已经放进栈。由于pushad,相应的登记价值:

意思是12ffc0(原来12ffc4)

EBP = 12ffc0 = ESP(原来12fff0)

请看BSS部分:









这都是0,这里是转储。如果你需要小心地跟踪被盗代码,你也可以从这里开始(你可以从脚本停止的第六div 0异常处理开始)。



首先,使用4d9de4为OEP。







看看LoadPE的表:





首先,代码的vsize和rsize增加避免空间不足时偷来的代码修复。







回到虚假OEP(4d9e37)重建输入表。







在添加新的部分时,首先会出现一个问题(正如文章中提到的)。

编译dumped_是好的。exe IDA。

现在有被盗的代码,并且替换了代码。

5。修复被盗代码



如果你不想仔细地跟踪它,你就得猜一猜,对于第一次调用被盗代码的猜测应该是安全的。接下来的4个调用需要仔细查看。



1)电话406edc



看dumped_结果。exe IDA:





执行脚本时首先和DIV 0例外只有停车后检查。直到73a9af密码后:





调用前的寄存器:





堆栈:





电话过后,以下是pushad界限标识被盗代码结束。所以偷来的代码是(不确定,你可以在封隔器的EP,修改登记检查值在这里):

电话接通后,在pushad环境:





















审查:4。倾倒

根据我们的经验unpackme,垃圾不在虚假OEP,和许多在BSS段的数据已经在这时间初始化。最好是在第一句转储(push ebp)。但是push ebp远离虚假OEP,L.



封隔器的初始化环境:













首先查看发送第一个调用的shell代码:








2)电话46261c











被盗密码:在这里

从这里,它无法保存。全被盗代码必须追了出去,它必须符合环境当最后pushad和下POPAD保证,并且代码不会丢失。飞行员直接截取div 0例外,注意后面是否有个POPAD。如果两倍的环境不一致,你必须采取一步与L.



此外,对被盗代码的追求一次也没有完成,因此一些图表中的寄存器和堆栈数据不可用,不需要管理。



3)0073bc47





4)0073c558





5)第一次拨打462634





这个函数有2个参数L。







这是div 0例外的存在在POPAD最后一次看到如何回到原来的程序。

在73d872,所有的异常都是不容忽视的,和内存访问断点在代码段的访问。在Kernel32中存在一个内存访问异常。







最后一次是在73dbe1 div EBX一步到这里:





73de38破坏以前的代码。







在这一点上,把所有偷来的代码,并结合假OEP 2电话前6部分。