3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 1355|回复: 1
打印 上一主题 下一主题

[给破解菜鸟的手记]脱壳之老王壳

[复制链接]

0

主题

14

帖子

16

积分

新手玩家

Rank: 1

贡献度
2
金元
675
积分
16
精华
0
注册时间
2008-8-20
跳转到指定楼层
主题
发表于 2008-8-20 07:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
找到一篇以前的手记好象是以前脱的个外挂时写,发出来给大家学习哈。。
我大致看了看,菜鸟好象不是那么容易的,慢慢啃吧。。看日期是06年的。。。都忘记了撒。。
再翻翻。。。有好点的就发出来。

//-------------------------------------------------------------------------------
[em15][em15]

高手们都说这个是老王的壳,我看像点,关键是载入程序后提示是DLL文件,有点汗了。

按常规的ESP定律
//-------------------------------------------------------------
005C2000 > $  60            pushad
005C2001   .  9C            pushfd
005C2002   .  64:FF35 00000>push    dword ptr fs:[0]    ;ESP=0012FFA0
005C2009   .  E8 79010000   call    005C2187


程序太大了,N久后才断下来!
//------------------------------------------------------------
711A233A    25 00010000     and     eax, 100
711A233F    3D 00010000     cmp     eax, 100
711A2344    74 05           je      short 711A234B
711A2346    E8 C996FFFF     call    7119BA14
711A234B    6A 10           push    10
711A234D    A1 90B71B71     mov     eax, dword ptr [711BB790]
711A2352    8B00            mov     eax, dword ptr [eax]
711A2354    E8 CB27F8FF     call    71124B24
711A2359    50              push    eax
711A235A    A1 38B81B71     mov     eax, dword ptr [711BB838]
711A235F    8B00            mov     eax, dword ptr [eax]
711A2361    E8 BE27F8FF     call    71124B24
711A2366    50              push    eax
711A2367    6A 00           push    0
711A2369    E8 AE50F8FF     call    <jmp.&user32.MessageBoxA>
711A236E    59              pop     ecx
711A236F    5D              pop     ebp
711A2370    C2 0400         retn    4

按照脱文我们需要下内存断点,可是我们这里就没的下了,程序就下面一个区段,谁知道下那哦!
干脆点就下这个上了,大不了麻烦点
//--------------------------------------------------------------
Memory map, 条目 22
地址=00400000
大小=0032B000 (3321856.)
属主=MUSky    00400000 (自身)
区段=
包含=PE 文件头
类型=Imag 01001002
访问=R
初始访问=RWE


哈!F9一下就到了,有点意思哈哈!,很熟悉的OEP吧!,我怎么知道是OEP呢,一看就知道是DELPHI写的,估计是PASCAL之类的语言
如果是BC++之类写的,第一句是JMP跳转,最不喜欢脱这一类壳,因为,修复API是个问题.
//------------------------------------------------------------
00555A68    55              push    ebp
00555A69    8BEC            mov     ebp, esp
00555A6B    83C4 F0         add     esp, -10
00555A6E    B8 58555500     mov     eax, 00555558
00555A73    E8 3015EBFF     call    00406FA8
00555A78    A1 2CA65500     mov     eax, dword ptr [55A62C]
00555A7D    8B00            mov     eax, dword ptr [eax]
00555A7F    E8 DC57F1FF     call    0046B260
00555A84    8B0D ACA65500   mov     ecx, dword ptr [55A6AC]          ; MUSky.00572B64
00555A8A    A1 2CA65500     mov     eax, dword ptr [55A62C]
00555A8F    8B00            mov     eax, dword ptr [eax]
00555A91    8B15 184A5400   mov     edx, dword ptr [544A18]          ; MUSky.00544A64
00555A97    E8 DC57F1FF     call    0046B278
00555A9C    8B0D 24A25500   mov     ecx, dword ptr [55A224]          ; MUSky.0057282C
00555AA2    A1 2CA65500     mov     eax, dword ptr [55A62C]
00555AA7    8B00            mov     eax, dword ptr [eax]
00555AA9    8B15 643C5300   mov     edx, dword ptr [533C64]          ; MUSky.00533CB0
00555AAF    E8 C457F1FF     call    0046B278
00555AB4    8B0D E0A35500   mov     ecx, dword ptr [55A3E0]          ; MUSky.00572780
00555ABA    A1 2CA65500     mov     eax, dword ptr [55A62C]
00555ABF    8B00            mov     eax, dword ptr [eax]
00555AC1    8B15 BC515100   mov     edx, dword ptr [5151BC]          ; MUSky.00515208
00555AC7    E8 AC57F1FF     call    0046B278
00555ACC    A1 2CA65500     mov     eax, dword ptr [55A62C]
00555AD1    8B00            mov     eax, dword ptr [eax]
00555AD3    E8 2058F1FF     call    0046B2F8
00555AD8    E8 73ECEAFF     call    00404750

第一次修复看看,没想到ImportRec提示不是OEP,汗了,高兴就没了.....看来人懒惰了什么事情也办不成,我们知道OEP了
那就继续吧!

//--------------------------------------------------------------------------
继续按教程做!BP IsDebuggerPresent

7C812E03 >  64:A1 18000000  mov     eax, dword ptr fs:[18]
7C812E09    8B40 30         mov     eax, dword ptr [eax+30]
7C812E0C    0FB640 02       movzx   eax, byte ptr [eax+2]
7C812E10    C3              retn


继续下断 BP GetProcAddress,还没出来就报出异常错误,不管点掉,继续,还没到地点,就递归异常在下面:
//--------------------------------------------------------------------------

7112684D    68 00040000     push    400
71126852    8D4424 04       lea     eax, dword ptr [esp+4]
71126856    50              push    eax
71126857    8B43 04         mov     eax, dword ptr [ebx+4]
7112685A    50              push    eax
7112685B    8B03            mov     eax, dword ptr [ebx]
7112685D    8B00            mov     eax, dword ptr [eax]
7112685F    E8 34F5FFFF     call    71125D98
71126864    50              push    eax
71126865    E8 AEAAFFFF     call    <jmp.&user32.LoadStringA>
7112686A    8BC8            mov     ecx, eax
7112686C    8BD4            mov     edx, esp
7112686E    8BC6            mov     eax, esi
71126870    E8 EFDEFFFF     call    71124764
71126875    EB 0A           jmp     short 71126881
71126877    8BC6            mov     eax, esi
71126879    8B53 04         mov     edx, dword ptr [ebx+4]
7112687C    E8 E3DFFFFF     call    71124864
71126881    81C4 00040000   add     esp, 400
71126887    5E              pop     esi
71126888    5B              pop     ebx
71126889    C3              retn


再运行结果程序终止^^^^^^^^^经过3次测试,并不是手误需要重新来做!
//---------------------------------------------------------------


下BP LoadLibraryA断点,断下来如下面:
//---------------------------------------------------------------
7C801D77 >  8BFF            mov     edi, edi
7C801D79    55              push    ebp
7C801D7A    8BEC            mov     ebp, esp
7C801D7C    837D 08 00      cmp     dword ptr [ebp+8], 0
7C801D80    53              push    ebx
7C801D81    56              push    esi
7C801D82    74 14           je      short 7C801D98
7C801D84    68 F0E2807C     push    7C80E2F0                         ; ASCII "twain_32.dll"
7C801D89    FF75 08         push    dword ptr [ebp+8]
7C801D8C    FF15 9C13807C   call    dword ptr [<&ntdll._strcmpi>]    ; ntdll._stricmp
7C801D92    85C0            test    eax, eax
7C801D94    59              pop     ecx
7C801D95    59              pop     ecx
7C801D96    74 12           je      short 7C801DAA
7C801D98    6A 00           push    0
7C801D9A    6A 00           push    0
7C801D9C    FF75 08         push    dword ptr [ebp+8]
7C801D9F    E8 ABFFFFFF     call    LoadLibraryExA
7C801DA4    5E              pop     esi
7C801DA5    5B              pop     ebx
7C801DA6    5D              pop     ebp
7C801DA7    C2 0400         retn    4

堆栈:
//---------------------------------------------------------------
0012FF94   005C2283  /CALL 到 LoadLibraryA 来自 MUSky.005C2281
0012FF98   005C205A  FileName = "C:WINDOWSsystem32V12003518.EPE"    ;我们不就是要找它的地址嘛!

通常它是第一个被加载的哦!如果不是那么可以,在看看,只要做为模块它不加载那是说不过去的



返回后,我们可以看到内存中改有的全都有了.往下翻找到了在这里.
//-------------------------------------------------------------
Memory map, 条目 32
地址=71121000
大小=00083000 (536576.)
属主=V1200351 71120000
区段=CODE
包含=代码
类型=Imag 01001002
访问=R
初始访问=RWE

下内存访问断点.F9一下到家,删除内存断点
//-------------------------------------------------------------
711A37FC >  55              push    ebp
711A37FD    8BEC            mov     ebp, esp
711A37FF    83C4 C4         add     esp, -3C
711A3802    B8 24361A71     mov     eax, 711A3624
711A3807    E8 A832F8FF     call    71126AB4
711A380C    E8 EF0CF8FF     call    71124500


现在Ctrl+S 在“整个区段”搜索命令序列:
//-----------------------------------------------------------
mov eax,edi
mov edx,dword ptr ss:[ebp-8]
mov dword ptr ds:[eax],edx
xor eax,eax
//-------------------------------------------------------------
711A1F2B    8BC7            mov     eax, edi            ;这里下断点,F9停在这里
711A1F2D    8B55 F8         mov     edx, dword ptr [ebp-8]    ;这里改EBP-4
711A1F30    8910            mov     dword ptr [eax], edx
711A1F32    33C0            xor     eax, eax
711A1F34    5A              pop     edx
711A1F35    59              pop     ecx
711A1F36    59              pop     ecx
711A1F37    64:8910         mov     dword ptr fs:[eax], edx
711A1F3A    EB 0A           jmp     short 711A1F46

再Ctrl+S搜索命令序列:
//--------------------------------------------------------------
add ebx,4
mov eax,dword ptr ss:[ebp-4C]
add eax,4
//---------------------------------------------------------------
711A2F4E    83C3 04         add     ebx, 4            ;找到在这里
711A2F51    8B45 B4         mov     eax, dword ptr [ebp-4C]
711A2F54    83C0 04         add     eax, 4
711A2F57    8945 B4         mov     dword ptr [ebp-4C], eax
711A2F5A    8B03            mov     eax, dword ptr [ebx]
711A2F5C    85C0            test    eax, eax
711A2F5E  ^ 0F87 39FDFFFF   ja      711A2C9D
711A2F64    A1 78B71B71     mov     eax, dword ptr [711BB778]
711A2F69    8038 00         cmp     byte ptr [eax], 0
711A2F6C    75 1F           jnz     short 711A2F8D
711A2F6E    8B45 C4         mov     eax, dword ptr [ebp-3C]
711A2F71    83C0 14         add     eax, 14
711A2F74    8945 C4         mov     dword ptr [ebp-3C], eax
711A2F77    8B45 C4         mov     eax, dword ptr [ebp-3C]
711A2F7A    8378 0C 00      cmp     dword ptr [eax+C], 0
711A2F7E    76 0D           jbe     short 711A2F8D
711A2F80    8B45 C4         mov     eax, dword ptr [ebp-3C]
711A2F83    8378 10 00      cmp     dword ptr [eax+10], 0
711A2F87  ^ 0F87 38FCFFFF   ja      711A2BC5
711A2F8D    33C0            xor     eax, eax            ;这里F2下断点,EAX=IAT表地址005731B8


数据窗口显示如下,返回前面把我们修改的代码撤消:
//----------------------------------------------------------------------------------
005731B8  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
005731C8  00 00 00 00 8A 18 93 7C ED 10 92 7C 05 10 92 7C  ....?搢?抾抾
005731D8  A1 9F 80 7C 14 9B 80 7C 81 9A 80 7C 5D 99 80 7C  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2026-3-24 11:07 , Processed in 0.027405 second(s), 16 queries , Memcached On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表