首页
社区
课程
招聘
Armadillo 3.78 -> Silicon Realms Toolworks手动脱壳
发表于: 2005-10-29 10:11 5710

Armadillo 3.78 -> Silicon Realms Toolworks手动脱壳

2005-10-29 10:11
5710
Armadillo 3.78 -> Silicon Realms Toolworks手动脱壳                            Armadillo 3.78 -> Silicon Realms Toolworks手动脱壳

     日期:2005年10月29日   破解人:桂圆
―――――――――――――――――――――――――――――――――――――――――――

【软件名称】:天骄正式区适用的1020A自动上线版   软件版本:10.20
【软件大小】: 1.37 MB
【下载地址】:http://www.ff777.com/down.htm
【软件简介】:正式区适用的1020A自动上线版
①随游戏更新,支持正式区的1.197版游戏
②修正勾选了远程下线指令接受到任何密语都下线关机的BUG。
③如果使用远程下线功能的同时需要关机,请同时选择“断开后关机”,否则只下线不关机,以方便多开的用户。
【软件限制】:
【破解声明】:初学Crack,只是感兴趣,没有其它目的。失误之处敬请诸位大侠赐教!
【破解工具】:OD, LORDPE IMP

―――――――――――――――――――――――――――――――――――――――――――
 
【破解过程】:

这个一个外挂程序
天骄外挂
下载地址:http://www.ff777.com/down.htm
呵呵,要破解它当然要先脱掉它啦

嘿嘿
我们先用PEID查下壳
Armadillo 3.78 -> Silicon Realms Toolworks

我们运行程序看一下

好了,我们用OD载入

首先  忽略所有异常!

自己手动添加C000001E (INVALID LOCK SEQUENCE),
C000001D (ILLEGAL INSTRUCTION)
并且隐藏OD!

047D8000 TJMa>  60               pushad    //OD载入后在这里
047D8001        E8 00000000      call TJMan.047D8006
047D8006        5D               pop ebp
047D8007        50               push eax
047D8008        51               push ecx
047D8009        0FCA             bswap edx
047D800B        F7D2             not edx
047D800D        9C               pushfd
047D800E        F7D2             not edx
047D8010        0FCA             bswap edx
047D8012        EB 0F            jmp short TJMan.047D8023
047D8014        B9 EB0FB8EB      mov ecx,EBB80FEB
047D8019        07               pop es
047D801A        B9 EB0F90EB      mov ecx,EB900FEB
047D801F        08FD             or ch,bh

//我们在命令行下断点  bp OpenMutexA   回车  Shift+F9运行!

77E62391 kern>  55               push ebp      //断在这里  注意堆栈提示
77E62392        8BEC             mov ebp,esp
77E62394        51               push ecx
77E62395        51               push ecx
77E62396        837D 10 00       cmp dword ptr ss:[ebp+10],0
77E6239A        56               push esi
77E6239B        0F84 C2E30100    je kernel32.77E80763
77E623A1        64:A1 18000000   mov eax,dword ptr fs:[18]
77E623A7        FF75 10          push dword ptr ss:[ebp+10]
77E623AA        8DB0 F80B0000    lea esi,dword ptr ds:[eax+BF8]
77E623B0        8D45 F8          lea eax,dword ptr ss:[ebp-8]
77E623B3        50               push eax
77E623B4        FF15 8C10E477    call dword ptr ds:[<&ntdll.RtlInitAnsiS>; ntdll.RtlInitAnsiString

/////////////堆栈提示/////////////////////////////
0012D784     047AF398    /CALL 到 OpenMutexA 来自 TJMan.047AF392
0012D788     001F0001    |Access = 1F0001
0012D78C     00000000    |Inheritable = FALSE
0012D790     0012DDC4    \MutexName = "6A0::DA1FAF23B7"
0012D794     0012FF04
0012D798     00000000
////////////////////////////////////////////////

Ctrl+G 401000 键入以下代码

00401000         60                pushad
00401001         9C                pushfd
00401002         68 C4DD1200       push 12DDC4    ; ASCII "648::DA5BE79566"
00401007         33C0              xor eax,eax
00401009         50                push eax
0040100A         50                push eax
0040100B         E8 B5A6A577       call kernel32.CreateMutexA
00401010         9D                popfd
00401011         61                popad
00401012       - E9 7A13A677       jmp kernel32.OpenMutexA

60 9C 68 C4 DD 12 00 33 C0 50 50 E8 B5 A6 A5 77 9D 61 E9 7A 13 A6 77

这里我们直接 划上一部分地址

将 上面的复制 后 右键 二进制 二进制粘贴

在401000处新建起源,右键===>此处新建EIP
提示可疑的EIP  我们点确定      并且删除断点

F9运行,再次中断在OpenMutexA处,

77E62391 kern>  55               push ebp                  //中断在这里
77E62392        8BEC             mov ebp,esp
77E62394        51               push ecx
77E62395        51               push ecx
77E62396        837D 10 00       cmp dword ptr ss:[ebp+10],0
77E6239A        56               push esi
77E6239B        0F84 C2E30100    je kernel32.77E80763
77E623A1        64:A1 18000000   mov eax,dword ptr fs:[18]
77E623A7        FF75 10          push dword ptr ss:[ebp+10]
77E623AA        8DB0 F80B0000    lea esi,dword ptr ds:[eax+BF8]
77E623B0        8D45 F8          lea eax,dword ptr ss:[ebp-8]
77E623B3        50               push eax
77E623B4        FF15 8C10E477    call dword ptr ds:[<&ntdll.RtlInitAnsiS>; ntdll.RtlInitAnsiString

//取消断点,到401000处撤消修改

//我们在在命令行下he GetModuleHandleA+5断点

Shift+F9运行!

77E5AD8B       /0F84 37010000    je kernel32.77E5AEC8    //中断在这里  我们注意堆栈,来寻找最佳返回时机
77E5AD91       |FF7424 04        push dword ptr ss:[esp+4]
77E5AD95       |E8 F8050000      call kernel32.77E5B392
77E5AD9A       |85C0             test eax,eax
77E5AD9C       |74 08            je short kernel32.77E5ADA6
77E5AD9E       |FF70 04          push dword ptr ds:[eax+4]
77E5ADA1       |E8 27060000      call kernel32.GetModuleHandleW
77E5ADA6       |C2 0400          retn 4
77E5ADA9 kern> |55               push ebp

//利用F9寻找 和ALT+F9返回   注意堆栈提示

/////////////堆栈提示////////////////////////////////////////
0012CEAC     77C059FC    返回到 msvcrt.77C059FC 来自 kernel32.GetModuleHandleA
0012CEB0     77BE31AC    ASCII "kernel32.dll"
0012CEB4     77C2CA20    msvcrt.77C2CA20
0012CEB8     00000000
0012CF70     772A8663    返回到 SHLWAPI.772A8663 来自 kernel32.GetModuleHandleA
0012CF74     772AF8FC    ASCII "KERNEL32.DLL"
0012CF78     00000000
0012CF7C     772A0000    SHLWAPI.772A0000
0012CF80     0012CFBC

0012CE94     770FB124    返回到 OLEAUT32.770FB124 来自 kernel32.GetModuleHandleA
0012CE98     771722E4    ASCII "KERNEL32.DLL"
0012CE9C     770FADAC    返回到 OLEAUT32.770FADAC 来自 OLEAUT32.770FB119
0012CEA0     77172064    OLEAUT32.77172064
0012CEA4     000003E8
0012CEA8     770FB0D0    返回到 OLEAUT32.770FB0D0 来自 OLEAUT32.770FAD8A

0012D728     047AE4D3    返回到 TJMan.047AE4D3 来自 kernel32.GetModuleHandleA
0012D72C     00000000

00127AB4     04EC4510    返回到 04EC4510 来自 kernel32.GetModuleHandleA
00127AB8     04ED7B20    ASCII "kernel32.dll"
00127ABC     04ED8BF8    ASCII "VirtualAlloc"

00127AB4     04EC452D    返回到 04EC452D 来自 kernel32.GetModuleHandleA
00127AB8     04ED7B20    ASCII "kernel32.dll"
00127ABC     04ED8BEC    ASCII "VirtualFree"

00127818     04EB47CB    返回到 04EB47CB 来自 kernel32.GetModuleHandleA    //嘿嘿,删除断点,在这里返回ALT+F9
0012781C     00127968    ASCII "kernel32.dll"         

04EB47CB        8B0D 7CF6ED04    mov ecx,dword ptr ds:[4EDF67C]
04EB47D1        89040E           mov dword ptr ds:[esi+ecx],eax
04EB47D4        A1 7CF6ED04      mov eax,dword ptr ds:[4EDF67C]
04EB47D9        391C06           cmp dword ptr ds:[esi+eax],ebx
04EB47DC        75 16            jnz short 04EB47F4
04EB47DE        8D85 B4FEFFFF    lea eax,dword ptr ss:[ebp-14C]
04EB47E4        50               push eax
04EB47E5        FF15 0C21ED04    call dword ptr ds:[4ED210C]             ; kernel32.LoadLibraryA
04EB47EB        8B0D 7CF6ED04    mov ecx,dword ptr ds:[4EDF67C]
04EB47F1        89040E           mov dword ptr ds:[esi+ecx],eax
04EB47F4        A1 7CF6ED04      mov eax,dword ptr ds:[4EDF67C]
04EB47F9        391C06           cmp dword ptr ds:[esi+eax],ebx
04EB47FC        0F84 2F010000    je 04EB4931                                  //Magic Jump!将它改成改jmp 04EB4931
04EB4802        33C9             xor ecx,ecx
04EB4804        8B07             mov eax,dword ptr ds:[edi]
04EB4806        3918             cmp dword ptr ds:[eax],ebx

//我们再次的在命令行下断点bp GetCurrentThreadId
Shift+F9运行!

77E5A7DF kern>  64:A1 18000000   mov eax,dword ptr fs:[18]        //中断在这里  再次寻找返回的最佳时机 F9和ALT+F9配合
77E5A7E5        8B40 24          mov eax,dword ptr ds:[eax+24]
77E5A7E8        C3               retn
77E5A7E9 kern>  8B4C24 04        mov ecx,dword ptr ss:[esp+4]
77E5A7ED        8B5424 08        mov edx,dword ptr ss:[esp+8]
77E5A7F1        8B4424 0C        mov eax,dword ptr ss:[esp+C]
77E5A7F5        F0:0FB111        lock cmpxchg dword ptr ds:[ecx],edx
77E5A7F9        C2 0C00          retn 0C
77E5A7FC kern>  55               push ebp

//注意堆栈变化

00127118     73391E26    /CALL 到 GetCurrentThreadId 来自 73391E20
0012711C     00000001
00127120     73391C0A    返回到 73391C0A 来自 73391DD2
00127124     73391B50    返回到 73391B50 来自 73391B7C

001270F8     73393526    /CALL 到 GetCurrentThreadId 来自 73393520
001270FC     00000000
00127100     7349F470

00127368     73D3B003    /CALL 到 GetCurrentThreadId 来自 MFC42.73D3AFFD
0012736C     00000000
00127370     73E03738    MFC42.73E03738

00127364     73D3B003    /CALL 到 GetCurrentThreadId 来自 MFC42.73D3AFFD
00127368     00000000
0012736C     10005268    tjhook.10005268
00127370     10000000    tjhook.10000000

0012D76C     04EB4B97    /CALL 到 GetCurrentThreadId 来自 04EB4B91    //嘿嘿,在这里返回取消断点 ALT+F9返回  
0012D770     00000000
0012D774     0000015C

04EB4B97        50               push eax          //返回到了这里
04EB4B98        FF75 FC          push dword ptr ss:[ebp-4]
04EB4B9B        E8 05000000      call 04EB4BA5
04EB4BA0        83C4 0C          add esp,0C
04EB4BA3        C9               leave
04EB4BA4        C3               retn    //返回到 04ECC9C9
04EB4BA5        6A 14            push 14
04EB4BA7        E8 CCCD0100      call 04ED1978                           ; jmp to msvcrt.operator new

//我们F8往下走

04ECC9C9        6A 00            push 0              //返回到了这里 继续F8
04ECC9CB        E8 64E1FEFF      call 04EBAB34
04ECC9D0        59               pop ecx
04ECC9D1        BF 48B4ED04      mov edi,4EDB448
04ECC9D6        8BCF             mov ecx,edi
04ECC9D8        E8 1FB9FDFF      call 04EA82FC
04ECC9DD        84C0             test al,al
04ECC9DF        75 09            jnz short 04ECC9EA    //
04ECC9E1        6A 01            push 1
04ECC9E3        8BCF             mov ecx,edi
04ECC9E5        E8 DA01FEFF      call 04EACBC4
04ECC9EA        B9 B0A7ED04      mov ecx,4EDA7B0
04ECC9EF        C705 BC7FED04 0C>mov dword ptr ds:[4ED7FBC],4ED8D0C      ; ASCII "RC"
04ECC9F9        E8 2557FDFF      call 04EA2123
04ECC9FE        6A 00            push 0
04ECCA00        E8 1E57FDFF      call 04EA2123
04ECCA05        A1 90B8ED04      mov eax,dword ptr ds:[4EDB890]
04ECCA0A        59               pop ecx
04ECCA0B        8B15 A8B8ED04    mov edx,dword ptr ds:[4EDB8A8]          ; TJMan.00400000
04ECCA11        8B3E             mov edi,dword ptr ds:[esi]
04ECCA13        8B88 88000000    mov ecx,dword ptr ds:[eax+88]
04ECCA19        3348 50          xor ecx,dword ptr ds:[eax+50]
04ECCA1C        3348 04          xor ecx,dword ptr ds:[eax+4]
04ECCA1F        03CA             add ecx,edx
04ECCA21        85FF             test edi,edi
04ECCA23        75 18            jnz short 04ECCA3D
04ECCA25        8B50 6C          mov edx,dword ptr ds:[eax+6C]
04ECCA28        FF76 14          push dword ptr ds:[esi+14]
04ECCA2B        3350 50          xor edx,dword ptr ds:[eax+50]
04ECCA2E        FF76 10          push dword ptr ds:[esi+10]
04ECCA31        3350 18          xor edx,dword ptr ds:[eax+18]
04ECCA34        FF76 0C          push dword ptr ds:[esi+C]
04ECCA37        2BCA             sub ecx,edx
04ECCA39        FFD1             call ecx                        //我们在这里F7 进去
04ECCA3B        EB 1B            jmp short 04ECCA58
04ECCA3D        83FF 01          cmp edi,1
04ECCA40        75 18            jnz short 04ECCA5A
04ECCA42        FF76 04          push dword ptr ds:[esi+4]
04ECCA45        FF76 08          push dword ptr ds:[esi+8]
04ECC

00434072        55               push ebp             //嘿嘿,红字红字,OEP啦 ,快DUMP吧~
00434073        8BEC             mov ebp,esp
00434075        6A FF            push -1
00434077        68 B8A74300      push TJMan.0043A7B8
0043407C        68 D6414300      push TJMan.004341D6                     ; jmp to msvcrt._except_handler3
00434081        64:A1 00000000   mov eax,dword ptr fs:[0]
00434087        50               push eax
00434088        64:8925 00000000 mov dword ptr fs:[0],esp
0043408F        83EC 68          sub esp,68
00434092        53               push ebx
00434093        56               push esi

//使用LORDPE 完整DUMP    Import REConstructor修复

OEP处添入 34072  自动搜索IAT  获取输入表   有几个无效的指针 我们用级别1追踪下 嘿嘿 修复了几个  其他的全部CUT掉

抓取修复文件 把DUMP的修复下   

嘿嘿

OK啦  修复好后 我们运行下  成功~
在查下壳

Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks  PEID查的结果  

我们用FI 查下

MS Visual C++

MS Visual C++   成功脱壳

桂圆
2005.10.29

―――――――――――――――――――――――――――――――――――――――――――

【Crack_总结】:

很菜,所以不知道写什么心得,还得努力学习啊感谢WYNNEY


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 108
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
修改magic 直接第二内存断点 就到OEP了吧
2005-10-29 10:17
0
雪    币: 383
活跃值: (41)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
3
谢谢,这个壳我正好要脱,可以参考你的了
2005-10-29 12:33
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
4
Good!
2005-10-29 15:53
0
雪    币: 229
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
标准壳,超级 easy 的说
2005-10-29 18:03
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
兄弟,辛苦了!
2005-10-30 12:50
0
游客
登录 | 注册 方可回帖
返回
//