我已成功使用OllyDbg解压缩文件并使用ImportRec修复了转储,但我仍然无法找到OEP。
当我使用OllyDbg加载文件时,我首先看到这些说明(参见屏幕截图" EP" ):
CALL unpackme.00401931
MOV EAX,8C603
POP EBX
ADD EAX,EBX
JMP EAX
DB CA
DB 96
这些是我已经尝试过的算法: 1.插件 - > OllyDump - >通过Section Hop查找OEP(Trace into和over)。我最终得到以下代码(参见截图" OllyDump" ):
0048DF34 CALL unpackme.0048DF39
0048DF39 POP EAX
0048DF3A PUSH EBP
0048DF3B MOV EDI, EAX...
0048DF47 ...JMP SHORT unpackme.0048DF4E
在此处转储并不会创建解压缩的文件。 2.放置" hr esp-4"。我最终得到了以下代码(通过按F9运行几次,查看屏幕截图" HR1" 和" HR2" - 在EAX跟随转储后) :
00490B50 POP ESI
00490B51 POP EBP
00490B52 JMP EDI (here the program was paused)
在EAX转储(此时存储值00400000)后,我看到一个MZ标题。但是当我在ImportRec中打开文件并将OEP定义为90B52时,它表示它无法在此OEP中找到任何内容。但是,它列出了所有导入(advapi,comctl,gdi,kernel,oleaut,rpcrt,shell32,shlwapi,user32,wininet,ws2_32,ole32)。当我使用OllyDBg加载这个解压缩的文件时,它说"模块'解压缩'在代码之外有入口点(在PE头中指定)。也许这个文件是自解压的......",当我按下" OK"时,我会停在
00490B50 POP ESI
00490B51 POP EBP
00490B52 JMP EDI (here the program was paused)
编辑:我将ImportRec中的OEP字段中的OEP更改为0003A586(绝对 - 0043A586,JMP指令跳转到的地址),然后使用Olly打开解压缩文件并查看:截图HR3 。这是不是意味着,0003A586是OEP?
3.在" VirtualAlloc"设置断点。只是没有工作,它从未被击中。
4.在" ZwAllocateVirtualMemory"设置断点。部分工作,bp被击中几次(当加载不同的dll时)。我在不同的地方停了下来,但是OEP从来都不好(不过文件已解压)。例如,当我从comxl_1(地址7CA27320)的EAX转储进程时,文件被解压缩,在ImportRec中我看到4个dll,但OEP仍然不正确。它显然不是用户代码,而是一些(可能是恶意的)库。见截图" AllocVirtMem"
5.搜索POPAD,随后无条件的JMP没有工作。 (见截图" POPAD1 ")。首先,不久之后就没有JMP了,第二,当bp设置在这里时,代码会在底部显示一条消息"在读取" (见截图POPAD2 )。
6. GetProcAddress bp也没有工作。
我的问题是:我可以应用此文件的其他技巧是什么?我已经尝试过什么天堂?我在互联网上搜索过,无法找到任何东西。非常感谢您的帮助!
答案 0 :(得分:0)
从屏幕快照中,正确的OEP位于地址0043A586(从该地址四处查看,您会看到API调用GetVersionExA),您可以在此处设置硬件断点,即F9 / Shift + F9,直到命中该断点为止,然后您正在解压缩的OEP中。