Encyrptpe 2003.5.18主程序Unpacking tut

类别:编程语言 点击:0 评论:0 推荐:
EnCryPtPE 2003.5.18主程序的脱壳【目    标】:EnCryPtPE 2003.5.18主程序
【工    具】:Olydbg1.1(diy版)、LORDPE、ImportREC1.6F
【任    务】:脱马甲
【操作平台】:Windows Xp sp1
【作    者】:loveboom[DFCG][FCG][US]
【简要说明】:不打算发布出去,只是当做自己以后参考用而已
【详细过程】:
设置:
忽略全部异常,其它选上加上0EEDFADE和C0000008(INVALID HANDLE)两个异常地址并隐身先.第一步:找程序的OEP准备好后,我们先找到OEP对后面有用的.004B7000 >  60              PUSHAD                     ;壳的入口004B7001    9C              PUSHFD载入后并设置好然后按f9运行,出现那个很长时间的异常后.取消int3异常,这里要等很久的,可以先去做一点别的事.N久之后,在INT3处异常中断了.7119CF58    90              NOP                     ;第一次断在这里7119CF59    64:8F05 0000000>POP DWORD PTR FS:[0]下按一次shift+f9进入第二次int3异常中断:7119CF58    90              NOP                     ;第二次也是断在这里7119CF59    64:8F05 0000000>POP DWORD PTR FS:[0]7119CF60    C3              RETN现在打开内存页面,在程序所在段处下F2断点:然后再按一次程序就断在程序的oep处了:现在再找一下输入表的位置,随便选一处就行了:00406AA0    90              NOP                    ;我找的是这里00406AA1  - E9 7EB3AB00     JMP 00EC1E24第一步也就算完成了,这一步要记下程序的OEP: 499780,和00406aa0那个地址,看一下就知道壳改了东西,让IAT跳到壳里去了,后面还有很长一段,直接修复吗?当然不是了,重来准备修复程序的代码了. 第二步:修复程序代码 再次载入后同样在那个很长时间的时候,在00406AA0处下内存访问中断.711A451A    8B07     MOV EAX,DWORD PTR DS:[EDI]           ;第一次断下711A451C    8B55 F0         MOV EDX,DWORD PTR SS:[EBP-10]711A451F    83F2 FF         XOR EDX,FFFFFFFF……711A4569    66:8B03         MOV AX,WORD PTR DS:[EBX]                 ; 第二处中断处好了,现在我们要记下711A4569这个地址,再来一次,在711a4569处下一下硬件执行断点,因程序一开始没有711a4569这个地址,所以我们要让程序运行一会儿,然后就可以下断了.711A456C    66:3D FF25      CMP AX,25FF711A4570    74 0B           JE SHORT 711A457D711A4572    66:3D FF15      CMP AX,15FF711A4576    74 05           JE SHORT 711A457D711A4578    E8 EF7BF8FF     CALL 7112C16C711A457D    8B7D FC         MOV EDI,DWORD PTR SS:[EBP-4]             ; EncryptP.0049D250711A4580    8B37            MOV ESI,DWORD PTR DS:[EDI];这里要改我们的东西了,所以这时改成mov esi,edi711A4582    81FE 00000080   CMP ESI,80000000711A4588    72 05           JB SHORT 711A458F711A458A    E8 DD7BF8FF     CALL 7112C16C711A458F    66:813B FF25    CMP WORD PTR DS:[EBX],25FF;这里判断是不是跳去api的了,如果是就改代码。711A4594    75 07           JNZ SHORT 711A459D;所以我们这里就要改成 jmp 711a459d711A4596    66:C703 90E9    MOV WORD PTR DS:[EBX],0E990;这里把正常的东西填成jmp xxxx nop的方式了711A459B    EB 05           JMP SHORT 711A45A2711A459D    66:C703 90E8    MOV WORD PTR DS:[EBX],0E890;这里也要改,否则变成了call xxxx,nop的方式,所以这里要nop掉711A45A2    8B5D E8         MOV EBX,DWORD PTR SS:[EBP-18]711A45A5    83C3 06         ADD EBX,6711A45A8    8B45 E0         MOV EAX,DWORD PTR SS:[EBP-20]711A45AB    03C0            ADD EAX,EAX711A45AD    03D8            ADD EBX,EAX711A45AF    8B45 E8         MOV EAX,DWORD PTR SS:[EBP-18]711A45B2    8B38            MOV EDI,DWORD PTR DS:[EAX]711A45B4    0FB703          MOVZX EAX,WORD PTR DS:[EBX]711A45B7    2D 00300000     SUB EAX,3000711A45BC    03F8            ADD EDI,EAX711A45BE    037D DC         ADD EDI,DWORD PTR SS:[EBP-24] 711A45C1    2BF7            SUB ESI,EDI    ;********711A45C3    83EE 04         SUB ESI,4                   ;********;这里两行又是进行破坏操作,nop掉去711A45C6    8937            MOV DWORD PTR DS:[EDI],ESI711A45C8    33C0            XOR EAX,EAX改好后的图如下:修改完成后,取消刚才的硬件断点.再和第一步一样到oep处,现在我们看看发生了什么变化:00406AA0  - FF25 50D24900   JMP DWORD PTR DS:[49D250]               ;怎么样,已经改好了代码吧00406AA6    8BC0            MOV EAX,EAX00406AA8  - FF25 4CD24900   JMP DWORD PTR DS:[49D24C]现在把程序给dump下来.进入第三步. 第三步:修复程序的输入表 现在就差输入表没有处理了.现在我们再次载入程序,然后在我们前面记下的OEP的那个地址处下内存访问断点然后运行之,结果在这里断下了:71122943    F3:A5           REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>71122945    89C1            MOV ECX,EAX 断下后,取消内存访问断点,下MR GetProcAddress,的内存访问断点。再次运行,断下了:在7119D30C处断下后,按ctrl+B找334DFC89088955F8,找到这里:711A3385    334D FC         XOR ECX,DWORD PTR SS:[EBP-4] ;这里改成mov ecx,ss:[ebp-4]711A3388    8908            MOV DWORD PTR DS:[EAX],ECX711A338A    8955 F8         MOV DWORD PTR SS:[EBP-8],EDX;这里又是进行破坏,NOP掉这里711A338D    85FF            TEST EDI,EDI 改好后的情况:改好后,去掉所有的内存断点,并下断HE 711a4569,并运行之,再次中断后,我们可以得到完全的输入表了.现在看看iat的位置和大小,大小可以不算,写一个可以得到全部IAT的大概值就OK的.我是偷懒我选择的是iat开始地址: 9d160(RVA),大小为1000,然后把无效的给cut掉J.这好了,现在填上oep然后fixdump就行了.现在程序就可以正常运行了.后面的就不再写了.改进一下我自己上次的脱壳方法,直接在EPE0段下F2断点,断下后下断mr getprocaddress,再然如果不是中断在GetProcaddress入口处的话,找:711A3385    334D FC         XOR ECX,DWORD PTR SS:[EBP-4] ;这里改成mov ecx,ss:[ebp-4]711A3388    8908            MOV DWORD PTR DS:[EAX],ECX711A338A    8955 F8         MOV DWORD PTR SS:[EBP-8],EDX   Greetz: Fly.Jingulong,yock,tDasm.David.ahao.UFO(brother).alan(sister).all of my friends and you! By loveboom[DFCG][FCG]Email:[email protected]   

本文地址:http://com.8s8s.com/it/it22394.htm