-
-
求助,这个自效验怎么绕过?
-
发表于:
2012-9-3 18:43
5826
-
大家好,我是一名小菜鸟,今天有一个困扰了好久的问题想向大家请教,还望各位不吝赐教。
本人最近在研究某脚本语言,类似按键精灵,他不但可以执行脚本,还可以生成单独的可执行文件,但如果这种可执行文件有附加文件的话,会释放文件到磁盘,所以我使用了Enigma Virtual Box(
http://enigmaprotector.com/en/aboutvb.html)进行绿色封装。
比方说,我把TEST.EXE、README.TXT、TEST.JPG封装成一个PACK.EXE,然后运行这个PACK.EXE,就等于运行了TEST.EXE,并且TEST.JPG和README.TXT均可以被读取调用,而不释放任何文件至磁盘。
问题来了,该脚本语言生成的可执行文件(假定为DEST.EXE),只要一经封装再执行的时候就会报错,弹出一个消息框"EXE Corrupted",确定之后程序自动退出。
经查,确定不是Enigma Virtual Box的问题,而是DEST.EXE本身的自效验捣的鬼,我尝试修改了DEST.EXE的版本号,甚至在无关紧要的位置修改一个字节的数据,都会导致"EXE Corrupted"。
既然确定为自效验,那就开工吧,从"EXE Corrupted"这个信息下手:
用WinHex修改一下DEST.EXE的版本号,在文件偏移0006696C处修改34为35,另存为DEST_MOD.EXE。
OD载入DEST_MOD.EXE,搜索关键词"EXE Corrupted",有两处
00448273 |. 68 34E34500 push DEST_MOD.0045E334 ; EXE corrupted
以及
00423F2B |. 68 34E34500 push DEST_MOD.0045E334 ; EXE corrupted
而真正能弹出"EXE Corrupted"消息的是00448273处的指令。
往上翻,发现条件跳转指令
00448265 |. /74 16 je XDEST_MOD.0044827D
我想把此处的je改为jne应该就行了,结果搞完了再运行时却提示另一个错误,无论怎么改始终都无法正确运行。
然后我在其上一条指令00448263 |. 85C0 test eax,eax处下断,F9跑起,发现eax=00000003
而未作修改的DEST.EXE跑到这个地方的时候eax=00000000
我凌乱了,不知道两个EAX在哪就分道扬镳了。
本人水平又菜,只会点最基本的操作,实在找不着关键之处,所以发上来恳请大家指点。多谢!
(相关文件在附件当中)
[课程]Android-CTF解题方法汇总!