|
|
Encryptpe 2003.518 |
|
|
作者:未知 来源:月光软件站 加入时间:2005-5-13 月光软件站 |
简单脱壳EncryptPE 2003.5.18篇
【目 标】:win98's notepad 【工 具】:Olydbg1.1(diy版)、LORDPE、ImportREC1.6F 【任 务】:当然是脱马甲了 【操作平台】:WINDOWS 2000 ADV 【作 者】:loveboom[DFCG] 【相关链接】: 不记得了,自己去搜一下吧。 【简要说明】:今天有点时间,也算是打发一下,不想自己太难过了。所以就玩了一下,不知道和fly的同不同,我现在还没看fly的,不是说fly写的不好,只是我觉得如果自己能够脱了之后再看别人的文章更能学到点东西,如果没能力脱的话就先看再脱(非常感谢fly给我等菜鸟这么多好的文章)。这个壳还比较好玩的。如果可能的话,最好自己动手后再看文章。
【详细过程】: 设置: 取消int3异常,其它选上加上0EEDFADE和C0000008(INVALID HANDLE)两个异常地址。
加壳后用peid找一下它说是upx的,好晕呀 ,不过我是我自己加的所以当然知道它是“冒牌”的了。这样我的petools也就多“认识”一款壳了。
第一步找OEP:
这步不难,在第八次int 3异常之后,在内存CODE(一般是40xxxx)段下断,这样就到了入口处。
第二步修复输入表
按第二次Shift+f9之后,下Mr GetProcAddress如果发现像这样子就第二次没错:
0012FECC 004061B4 ASCII "6e" 0012FED0 785C0000 OFFSET shell32.#465 0012FED4 00000202 0012FED8 77E69AC1 kernel32.GetProcAddress 0012FEDC 711A41BE RETURN to V1200351.711A41BE from V1200351.71126CF4 0012FEE0 785C0000 OFFSET shell32.#465 0012FEE4 00CFC77C ASCII "DragFinish" 0012FEE8 0012FEF4 Pointer to next SEH record
如果是这样子的话就要第三次Shift+f9后下mr GetProcAddress了:
0012FF90 0040D29A /CALL to GetProcAddress from notepad.0040D298 0012FF94 71120000 |hModule = 71120000 (V1200351) 0012FF98 0040D170 \ProcNameOrOrdinal = "EncryptPE_Init"
下断后第一次到这里:
7119D310 8B00 MOV EAX,DWORD PTR DS:[EAX] 7119D312 3C CC CMP AL,0CC 7119D314 74 14 JE SHORT V1200351.7119D32A
再按F9一次中断在系统中,现在看看当前堆栈的地址:
0012FEDC 711A41BE /CALL to GetProcAddress from V1200351.711A41B9 0012FEE0 785C0000 |hModule = 785C0000 (shell32)
直接在711A41BE处下断,按F9停下,向下不远处看到这段代码:
711A41FE 8B55 B8 MOV EDX,DWORD PTR SS:[EBP-48] 711A4201 E8 E2F0FFFF CALL V1200351.711A32E8 //这里跟进 711A4206 E9 B7010000 JMP V1200351.711A43C2 711A420B 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
跟进后,我们要找IAT了,这个不难, 看代码先。
711A32E8 55 PUSH EBP 711A32E9 8BEC MOV EBP,ESP 711A32EB 83C4 F8 ADD ESP,-8 711A32EE 53 PUSH EBX 711A32EF 56 PUSH ESI 711A32F0 57 PUSH EDI 711A32F1 8BF9 MOV EDI,ECX ; notepad.004063F8
//在数据窗口里直接到4063f8(ECX的值),这样向上找一下就可以看到IAT的位置和大小了
711A32F3 8955 FC MOV DWORD PTR SS:[EBP-4],EDX
再一直按F8来到这里:
711A3379 8908 MOV DWORD PTR DS:[EAX],ECX 711A337B 8BC3 MOV EAX,EBX 711A337D 83C0 0B ADD EAX,0B 711A3380 8BCA MOV ECX,EDX 711A3382 83C1 05 ADD ECX,5 711A3385 334D FC XOR ECX,DWORD PTR SS:[EBP-4] //这里[EBP-4]=正确API //所以这里改成mov ecx, dword ptr ss:[ebp-4] 711A3388 8908 MOV DWORD PTR DS:[EAX],ECX 711A338A 8955 F8 MOV DWORD PTR SS:[EBP-8],EDX //这里改IAT的成员 //所以这里改成NOP。 711A338D 85FF TEST EDI,EDI 711A338F 74 29 JE SHORT V1200351.711A33BA 711A3391 33D2 XOR EDX,EDX
改好后,md删除内存断点,再按f9异常后按Shift+f9直到全部解压完成(判断很易的,看看状态栏就知道了)。完成后CTRL+P打开Patches窗口,这里可以看到我们改过的代码,双击代码并"清场"(反原代码),这样不会让壳发现你已经改了的。
后面就按Shift+f9准备到入口处,到入口之后你就会发现全部API修复好了。现在用lordpe dumped下来并去掉壳启动的那个节(如果是delphi的程序就不要去了,去了程序无法运行的),修复输入表,Rebuilder之后就可以。壳也就此脱完了。
献给我亲爱的DFCG,愿它能够蒸蒸日上! Thank all of my friends,best wish for you!
Thanks: Fly 辉仔yock、jingulong、二哥、tDasm、所有曾经关心支持或帮助过我的朋友!谢谢您们!

|
|
相关文章:相关软件: |
|