附件:UnpackMe.rar
【破解作者】 layper
【作者邮箱】 layper2002@yahoo.com.cn
【作者主页】 layper.51.net
【使用工具】 peid,od,lordPE,ImportREC
【破解平台】 Win9x/NT/2000/XP
【软件名称】 UnpackMe记事本
【加壳方式】 未知
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】
现在我学习脱壳,很多东西都是刚刚学起,有什么不对的请大虾指正,这个是加密与解密第二版的一个脱壳练习,老习惯
用PEID查壳,呵呵,什么也没找到,没办法只好忐忑不安的进行我的脱壳之旅,OD载入,隐藏OD,不忽略内存访问异常
0040F000 > E8 04000000 CALL UnpackMe.0040F009 ;停在这里
0040F005 C783 EB0E58EB 0>MOV DWORD PTR DS:[EBX+EB580EEB],8320CD02
0040F00F C002 EB ROL BYTE PTR DS:[EDX],0EB ; 移动常数超出 1..31 的范围
0040F012 01E9 ADD ECX,EBP
0040F014 50 PUSH EAX
0040F015 C3 RETN
shift+F9几次来到最后一个异常处
0040D46F 8700 XCHG DWORD PTR DS:[EAX],EAX ;停在这里
0040D471 0000 ADD BYTE PTR DS:[EAX],AL
0040D473 40 INC EAX
0040D474 00CC ADD AH,CL
0040D476 1040 00 ADC BYTE PTR DS:[EAX],AL
0040D479 BC D6000000 MOV ESP,0D6
到这里后我们查找OEP了,Alt+M打开内存看到这里
地址=00401000 //F2下断
大小=00004000
Owner=UnpackMe
区段=.code
Contains=code
类型=Imag 01001002
访问=R
初始访问=RWE
Shift+F9到达
0040D245 3006 XOR BYTE PTR DS:[ESI],AL ;到达这里
0040D247 D40A AAM
0040D249 46 INC ESI
0040D24A ^ E2 F5 LOOPD SHORT UnpackMe.0040D241
0040D24C E8 F9000000 CALL UnpackMe.0040D34A ;F4直接下来,F8单步
0040D251 6A 04 PUSH 4
0040D253 68 00100000 PUSH 1000
0040D258 68 00100000 PUSH 1000
0040D25D 6A 00 PUSH 0
0040D25F FF95 44060000 CALL DWORD PTR SS:[EBP+644]
0040D265 8985 89040000 MOV DWORD PTR SS:[EBP+489],EAX
0040D26B 8BB5 79040000 MOV ESI,DWORD PTR SS:[EBP+479]
0040D271 03B5 71040000 ADD ESI,DWORD PTR SS:[EBP+471]
0040D277 8B3E MOV EDI,DWORD PTR DS:[ESI]
0040D279 85FF TEST EDI,EDI
0040D27B 0F84 8B000000 JE UnpackMe.0040D30C
0040D281 03BD 71040000 ADD EDI,DWORD PTR SS:[EBP+471]
0040D287 83C6 05 ADD ESI,5
0040D28A 56 PUSH ESI
0040D28B FF95 38060000 CALL DWORD PTR SS:[EBP+638]
0040D291 85C0 TEST EAX,EAX
0040D293 75 07 JNZ SHORT UnpackMe.0040D29C
0040D295 56 PUSH ESI
0040D296 FF95 3C060000 CALL DWORD PTR SS:[EBP+63C]
0040D29C 8985 85040000 MOV DWORD PTR SS:[EBP+485],EAX
0040D2A2 46 INC ESI
0040D2A3 8A0E MOV CL,BYTE PTR DS:[ESI]
0040D2A5 84C9 TEST CL,CL
0040D2A7 ^ 75 F9 JNZ SHORT UnpackMe.0040D2A2 ;往回跳
0040D2A9 46 INC ESI ;F4直接下来
重新打开内存窗口,在上面所处的00401000处F2再次下断,Shift+F9运行
004010CC 55 PUSH EBP ;这里就是OEP了,用LorPe脱壳为dumped
004010CD 8BEC MOV EBP,ESP
004010CF 83EC 44 SUB ESP,44
004010D2 56 PUSH ESI
004010D3 FF15 E4634000 CALL DWORD PTR DS:[4063E4]
004010D9 8BF0 MOV ESI,EAX
004010DB 8A00 MOV AL,BYTE PTR DS:[EAX]
004010DD 3C 22 CMP AL,22
004010DF 75 1B JNZ SHORT UnpackMe.004010FC
004010E1 56 PUSH ESI
下面按照参考获得IAT,重新载入未脱壳记事本下bp GetProcAddress,F9运行
0012FF80 0040FF4E /CALL 到 GetProcAddress 来自 UnpackMe.0040FF49 ;这里不是,F9继续
0012FF84 77E40000 |hModule = 77E40000 (kernel32)
0012FF88 0040F283 \ProcNameOrOrdinal = "GetCurrentProcessId"
0012FF60 770F3D75 /CALL 到 GetProcAddress 来自 oleaut32.770F3D6F ;不在领空,F9
0012FF64 77180000 |hModule = 77180000
0012FF68 7717201C \ProcNameOrOrdinal = "CoCreateInstanceEx"
……………
直到来到
0012FF90 0040D2E2 /CALL 到 GetProcAddress 来自 UnpackMe.0040D2DC
0012FF94 773A0000 |hModule = 773A0000 (SHELL32)
0012FF98 0040D6CD \ProcNameOrOrdinal = "DragFinish"
Alt+F9返回
0040D2E2 8B8D 89040000 MOV ECX,DWORD PTR SS:[EBP+489] ;返回到这里
0040D2E8 890F MOV DWORD PTR DS:[EDI],ECX ;这里就是参考处所要改的代码了,把ECX改为EAX
0040D2EA C601 B8 MOV BYTE PTR DS:[ECX],0B8
0040D2ED 41 INC ECX
F9运行,记事本跳出,运行ImportREC,修改入口为10cc修复脱壳文件即可运行了
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课