用PEiDv0.94查壳,结果是:
ASProtect 2.1x SKE -> Alexey Solodovnikov
于是打算尝试使用脚本 Aspr2.XX_IATfixer_v1.02.osc 来脱壳。
(这个脚本真是太适合我这样的初学者使用了。在此我向该脚本的作者表示感谢!)
遗憾的是,最终还是没有顺利脱壳,
我实在是没有思路了,高手们请给些意见吧……
以下是我尝试脱壳的整个过程。
首先运行脚本,出现
There are stolen code after API and the address of the call xxxxxxxx are saved in the file named SCafAPI.bin
继续运行脚本,出现
Import table is fixed, you can dump the file now or later. check the address and size of IAT in log window
继续运行脚本,出现
Stolen codes start, press OK button to add comments
选择OK,出现
Commands are added
记下伪OEP的地址,IAT的地址和大小
用LoadPE full-dump。
使用ImportREC,取IAT,发现有一个函数未找到。
在未找到的函数上右键, Disassmble/Hex View,显示
00BA7290 push ebp
00BA7291 mov ebp,esp
00BA7293 mov edx,[ebp+C]
00BA7296 mov eax,[ebp+8]
00BA7299 cmp eax,[BB9458] // DWORD value: FFFFFFFF
00BA729F jnz short 00BA72AA
00BA72A1 mov eax,[edx*4+BB9458] // DWORD value: FFFFFFFF
00BA72A8 jmp short 00BA72B1
00BA72AA push edx
00BA72AB push eax
00BA72AC call 00B9577C // = kernel32.dll/0198/GetProcAddress
00BA72B1 pop ebp
00BA72B2 retn 8
于是我双击这个函数,直接选择了kernel32.dll的GetProcAddress (不知道这一步我做得对不对?),然后保存IAT。
在所有有可能的内存区段下断点,从伪OEP处运行程序,一开始很正常,每在一区段停下,我就记录下该区段。
但在我记录了数个区段之后,程序停止运行。OD下方的状态栏显示“调试的程序无法处理异常”。
抱着尝试一下的心理,我把刚才记录下的几个区段dump下来,加到dump.exe,RebuildPE,然后用ImportREC导入刚才保存的IAT,fixdump。
然后是改Route Check(因为参考了一些相关帖子,所以我改的是0x58而不是0x34)
运行改好程序的程序,报错。用OD调,发现和记录区段出错时停在相同的地方,也是“调试的程序无法处理异常”。
于是我开始(在我极其有限的能力范围内)考虑解决的办法。
发现:
用OD直接加载原程序可以运行。
用OD加载原程序以后,运行脚本Aspr2.XX_IATfixer_v1.02.osc,在停在
There are stolen code after API and the address of the call xxxxxxxx are saved in the file named SCafAPI.bin
这个地方以后,再按F9的话,就会出现“调试的程序无法处理异常” (等脚本停在伪OEP处再按F9也同样无法正常运行)
于是我不使用脚本Aspr2.XX_IATfixer_v1.02.osc,想办法断在脚本告诉我的伪OEP处。
程序停在伪OEP处以后,再按F9,发现是可以正常运行的。
这样一来,稍微给了我一点信心。
我就不使用脚本,自己停在伪OEP处,然后再内存区段上下断点,这次顺利取完了19个区段。
然后,同样是dump区段,增加section,RebuildPE,导入IAT(用的还是脚本帮我找到的IAT,没问题吧?),fixdump,改Route Check。
可惜,我千辛万苦改好的程序还是无法正常运行,用OD调试,OD的状态栏显示:
访问违规,正在写入[FFF....], 用shift+f7/f8/f9来忽略异常。
看来就凭我似乎是搞不定的了……
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!