这个软件是我头几天搞的,具体经过记不太清楚了,如果大家看了以后头晕,我实在是抱歉。但是这软件加壳的方式挺特别,修复起来也很麻烦,并不是难,只是非常的麻烦,所以发上来和大家一起讨论一下,看是否有简单的修复方法。
这是个国外的软件,pediy 检测后是MPEG Layer II/III music file *,这明显是加壳的,但我猜测又像是PeStubOEP v1.x *,运用esp定理很快找到oep,dump后,用Import REConstructor修复,里面有一个指针是无效的,右键——分解/16进制查看,发现如下:
009E00FC mov eax,7C833775 // = kernel32.dll/0141/GetDateFormatW
009E0101 jmp eax
009E0103 mov eax,7C833FD3 // = kernel32.dll/01D4/GetTimeFormatW
009E0108 jmp eax
009E010A mov eax,7C80E866 // = kernel32.dll/00C3/FileTimeToLocalFileTime
009E010F jmp eax
009E0111 mov eax,7C9309ED // = ntdll.dll/032C/RtlSizeHeap
009E0116 jmp eax
009E0118 mov eax,7C802367 // = kernel32.dll/0063/CreateProcessA
009E011D jmp eax
009E011F mov eax,7C81AE17 // = kernel32.dll/0153/GetExitCodeProcess
009E0124 jmp eax
……
这个输入表指针里kernel32.dll的函数与ntdll.dll的函数混杂在一起,用修复1、2、3级别不能自动修复,只好自己修复,我想了一个笨办法,把这些ntdll.dll的函数提取出来,然后用lordpe添加一个新的输入输入表,名字就是ntdll.dll 然后把那些提取出来的函数一一添加进去,最后保存,然后od打开保存好的文件,搜索原来指向ntdll.dll那些函数的调用,比如ntdll.dll的RtlSizeHeap函数。象下面这样:
0042F023 |. FF15 9C614300 call near dword ptr [43619C]
把43619C 改成手工添加的那个ntdll.dll导入表中RtlSizeHeap的函数的地址,比如是45de0c
改成这样:0042F023 |. FF15 9C614300 call near dword ptr [45de0c]
如此统统手工替换后,全部保存,运行,ok,没有问题了。
我只是想知道,除了我这个笨办法之外还有没有好办法来避免这样的手工操作。
请诸位大牛出出主意,具体软件大家看下面的链接。
由于我第一次发帖,所以不知道能不能附上该软件的下载地址。
我想这是国外的软件,发一下链接应该不会影响到国内的软件作者吧。
先附上链接吧。如果不允许,我再删掉
DiamondCS Deep System Explorer
http://www.diamondcs.com.au/dse/purchase.php
[课程]Android-CTF解题方法汇总!