首页
社区
课程
招聘
菜鸟学脱壳
发表于: 2005-3-30 11:08 3776

菜鸟学脱壳

2005-3-30 11:08
3776
附件: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直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不错,支持一下
2005-3-30 20:42
0
雪    币: 197
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tao
3
蛮强的哦。我连那些工具都不咋会用,买了本《加密解密》很多都看不懂!
2005-3-30 21:40
0
游客
登录 | 注册 方可回帖
返回