PECompact的OEP的简易查找方法
该方法试用于PECompactV1.71,V1.76,V1.82 <BR><BR>具体看下面的示例 <BR><BR> <BR><BR>============================================== <BR><BR>这是98的Calc.exe使用PECompact1.82压缩过的结果 <BR><BR> <BR><BR>010153A0 >EB 06 JMP SHORT CALC.010153A8<==第一条指令 <BR><BR>010153A2 68 E0190100 PUSH 119E0<======这就是程序的原始OEP的RVA地址 <BR><BR>010153A7 C3 RETN <BR><BR>010153A8 9C PUSHFD <BR><BR>010153A9 60 PUSHAD <BR><BR>010153AA E8 02000000 CALL CALC.010153B1 <BR><BR>============================================== <BR><BR> <BR><BR>============================================== <BR><BR>这是98的Notepad.exe使用PECompact1.82压缩过的结果 <BR><BR>0040AB20 >EB 06 JMP SHORT NOTEPAD.0040AB28<==第一条指令 <BR><BR>0040AB22 68 CC100000 PUSH 10CC<======这就是程序的原始OEP的RVA地址 <BR><BR>0040AB27 C3 RETN <BR><BR>0040AB28 9C PUSHFD <BR><BR>0040AB29 60 PUSHAD <BR><BR>0040AB2A E8 02000000 CALL NOTEPAD.0040AB31 <BR><BR>============================================== <BR><BR> <BR><BR>============================================== <BR><BR>这是使用PECompact1.82压缩过LordPE.exe [rts]的结果 <BR><BR>004239A0 >EB 06 JMP SHORT X.004239A8<==第一条指令 <BR><BR>004239A2 68 103E0000 PUSH 3E10<======这就是程序的原始OEP的RVA地址 <BR><BR>004239A7 C3 RETN <BR><BR>004239A8 9C PUSHFD <BR><BR>004239A9 60 PUSHAD <BR><BR>004239AA E8 02000000 CALL X.004239B1 <BR><BR>004239AF 33C0 XOR EAX,EAX <BR><BR>============================================== <BR><BR> <BR><BR>============================================== <BR><BR>这是PECompact1.82自身的结果 <BR><BR> <BR><BR>0043E760 >EB 06 JMP SHORT PECOMPAC.0043E768<==第一条指令 <BR><BR>0043E762 68 00E00300 PUSH 3E000<======这就是程序的原始OEP的RVA地址 <BR><BR>0043E767 C3 RETN <BR><BR>0043E768 9C PUSHFD <BR><BR>0043E769 60 PUSHAD <BR><BR>0043E76A E8 02000000 CALL PECOMPAC.0043E771 <BR><BR>0043E76F 33C0 XOR EAX,EAX <BR><BR>============================================== <BR><BR> <BR><BR>============================================== <BR><BR>这是ODBG1.06的结果 <BR><BR> <BR><BR>004F8200 >EB 06 JMP SHORT X.004F8208<==第一条指令 <BR><BR>004F8202 68 00100000 PUSH 1000<======这就是程序的原始OEP的RVA地址 <BR><BR>004F8207 C3 RETN <BR><BR>004F8208 9C PUSHFD <BR><BR>004F8209 60 PUSHAD <BR><BR>004F820A E8 02000000 CALL X.004F8211 <BR><BR>004F820F 33C0 XOR EAX,EAX <BR><BR>004F8211 8BC4 MOV EAX,ESP <BR><BR>============================================== <BR><BR> <BR><BR>很明显,原始程序入口为 <BR><BR>VA=ImageBase+RVA <BR><BR>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; <BR><BR>下面是使用TRW2000手动脱PECompact的壳 <BR><BR> <BR><BR> <BR><BR>(标准TRW2000 V1.22,我想修改版也应该可以吧) <BR><BR> <BR><BR>Load PECompact V1.82 <BR><BR><F8> <BR><BR>看上面的指令,0043E762 68 00E00300 PUSH 3E000 <BR><BR>由于ImageBas=400000,所以OEP=43E000 <BR><BR>所以 <BR><BR>bp if(EIP==43E000) <BR><BR>g <BR><BR>pedump c:\xx.exe <BR><BR>g <BR><BR> <BR><BR>好了,看看C:\xx.exe是不是正常了 <BR> 汇编的东西,有点头晕............:@7#页:
[1]