交响诗篇 发表于 2007-5-17 09:50:08

WinLicense 1.8.5.5 加壳之棋天大圣2.6高级版主程序脱壳。

作者:8100303
转贴自:一蓑烟雨

名称:棋天大圣 2.6 高级版主程序
下载地址:自己找
加壳:WinLicense 1.8.5.5 sdk
工具:okdodo 的脚本,ollydbg 及相关插件,peid,lordpe,Imprec 1.6F,UltraEdit
说明:一点心得,不妥之处望批评指正
第一步:dump 并修复 IAT
运行脚本,停在这里:

[ - ]CODE:
004460B1    A1 08745500   mov   eax, dword ptr
004460B6    C1E8 08         shr   eax, 8
004460B9    25 FF000000   and   eax, 0FF
004460BE    A3 14745500   mov   dword ptr , eax
004460C3    8B0D 08745500   mov   ecx, dword ptr
代码窗口向上看:

[ - ]CODE:
0044607B    CC            int3
0044607C    CC            int3
0044607D    CC            int3
0044607E    CC            int3
0044607F    CC            int3
00446080    D06F 99         shr   byte ptr , 1
00446083    828F 4FDDFC10 4>or      byte ptr , 44
0044608A    EC            in      al, dx
0044608B    73 62         jnb   short 004460EF
0044608D    BD E5851818   mov   ebp, 181885E5
00446092    35 BE1C7D56   xor   eax, 567D1CBE
00446097    6C            ins   byte ptr es:, dx
00446098    DB1A            fistp   dword ptr
0044609A    B1 28         mov   cl, 28
0044609C    CA CC85         retf    85CC
0044609F    19AE 96061618   sbb   dword ptr , ebp
004460A5    13E5            adc   esp, ebp
004460A7    9B            wait
004460A8    95            xchg    eax, ebp
004460A9    74 2C         je      short 004460D7
004460AB    898B 6614D982   mov   dword ptr , ecx
004460B1    A1 08745500   mov   eax, dword ptr
004460B6    C1E8 08         shr   eax, 8
很明显。oep是 00446080 ,部分代码被抽掉。
用 lordpe 把程序 dump 出来,Imprec 1.6F 修复 IAT。
第二步修复 OEP
找一个没有加壳的程序,如果你没有我这个程序,有个 1.0 测试版可以参考。
我这个程序 OEP 如下:

[ - ]CODE:
00435A80 >/$55                  push    ebp
00435A81|.8BEC                mov   ebp, esp
00435A83|.6A FF               push    -1
00435A85|.68 08855100         push    00518508
00435A8A|.68 98AA4300         push    0043AA98                      ;SE 处理程序安装
00435A8F|.64:A1 00000000      mov   eax, dword ptr fs:
00435A95|.50                  push    eax
00435A96|.64:8925 00000000    mov   dword ptr fs:, esp
00435A9D|.83C4 A4             add   esp, -5C
00435AA0|.53                  push    ebx
00435AA1|.56                  push    esi
00435AA2|.57                  push    edi
00435AA3|.8965 E8             mov   dword ptr , esp
00435AA6|.FF15 E8A55000       call    dword ptr [<&KERNEL32.GetVers>;kernel32.GetVersion
00435AAC|.A3 DC3F5400         mov   dword ptr , eax
00435AB1|.A1 DC3F5400         mov   eax, dword ptr
00435AB6|.C1E8 08             shr   eax, 8
00435AB9|.25 FF000000         and   eax, 0FF
关键是两句push 语句和那个 GetVersion 函数 call。
看一下没有加壳的程序push 地址的数据:
第一句:

[ - ]CODE:
005184FC00000000
0051850000000000
005185043FF00000
00518508FFFFFFFF
第二句:

[ - ]CODE:
0043AA98/$55            push    ebp                              ;结构异常处理程序
0043AA99|.8BEC          mov   ebp, esp
0043AA9B|.83EC 08       sub   esp, 8
0043AA9E|.53            push    ebx
0043AA9F|.56            push    esi
0043AAA0|.57            push    edi
0043AAA1|.55            push    ebp
0043AAA2|.FC            cld
0043AAA3|.8B5D 0C       mov   ebx, dword ptr
0043AAA6|.8B45 08       mov   eax, dword ptr
0043AAA9|.F740 04 06000>test    dword ptr , 6
结合相邻地址数据查找特征码,不同的程序是不同的,不过这个地址的数据都是 FFFFFFFF,:

[ - ]CODE:
00 00 00 00 00 00 00 00 00 00 F0 3F FF FF FF FF
第二句处地址数据基本是固定的,好像c++的都是这样,比较好找。查找特征码:

[ - ]CODE:
55 8B EC 83 EC 08 53 56 57 55 FC 8B 5D 0C 8B 45 08 F7 40 04 06 00 00 00
据说随便弄俩地址或者 NOP 掉也行。
IAT 区域找到所需函数地址:

[ - ]CODE:
0051B5E8 >7C8111DAkernel32.GetVersion
最后修复如下:

[ - ]CODE:
00446080 >55            push    ebp
00446081    8BEC            mov   ebp, esp
00446083    6A FF         push    -1
00446085    68 30925200   push    00529230
0044608A    68 08B34400   push    0044B308
0044608F    64:A1 00000000mov   eax, dword ptr fs:
00446095    50            push    eax
00446096    64:8925 0000000>mov   dword ptr fs:, esp
0044609D    83C4 A4         add   esp, -5C
004460A0    53            push    ebx
004460A1    56            push    esi
004460A2    57            push    edi
004460A3    8965 E8         mov   dword ptr , esp
004460A6    FF15 E8B55100   call    dword ptr ; kernel32.GetVersion
004460AC    A3 08745500   mov   dword ptr , eax
第三步干掉SDK
保存后,程序不能运行,原因是运用了壳的 SDK ,这个程序仅仅是利用 SDK 获取机器码,载入脱壳后程序,在 WinLicen 区段下F2断点,运行,中断在下面:

[ - ]CODE:
00853C47    68 4D160000   push    164D
00853C4C    891C24          mov   dword ptr , ebx
00853C4F    89E3            mov   ebx, esp
00853C51    81C3 04000000   add   ebx, 4
00853C57    83EB 04         sub   ebx, 4
00853C5A    871C24          xchg    dword ptr , ebx
00853C5D    5C            pop   esp
看堆栈数据:

[ - ]CODE:
0012F700   0040C569返回到 0123_.0040C569 来自 0123_.00426B10
0012F704   00551ACC0123_.00551ACC
0012F708   0012F784
0012F70C   00410DBD返回到 0123_.00410DBD 来自 0123_.0040C570
0012F710   00489C700123_.00489C70
0012F714   00489CAB返回到 0123_.00489CAB
0012F718   0012FE94
0012F71C/0012F748
0012F720|77D18734返回到 USER32.77D18734
找到返回的地方:

[ - ]CODE:
00489C8C    E8 52FBFFFF   call    004897E3
00489C91    83C4 08         add   esp, 8
00489C94    8945 FC         mov   dword ptr , eax
00489C97    837D FC 00      cmp   dword ptr , 0
00489C9B    74 10         je      short 00489CAD               ;这里直接改jmp
00489C9D    8B4D FC         mov   ecx, dword ptr
00489CA0    8B11            mov   edx, dword ptr
00489CA2    8B4D FC         mov   ecx, dword ptr
00489CA5    FF92 C4000000   call    dword ptr
00489CAB    EB 09         jmp   short 00489CB6
00489CAD    B8 01000000   mov   eax, 1
00489CB2    EB 02         jmp   short 00489CB6
00489CB4    33C0            xor   eax, eax
00489CB6    8BE5            mov   esp, ebp
00489CB8    5D            pop   ebp
00489CB9    C2 1000         retn    10
那个跳转的作用是判断是否加壳,如果没有加壳则不调用SDK获取机器码,如果已经加壳,则调用SDK获取机器码。
第四步优化
简单优化一下,把 WinLicen 的俩个区段删除,c++程序4个区段,前面3个排列紧密,只要把最后一个区段单独出来即可实现文件大小优化,如果你非得把所有区段都弄出来,我也没意见。
第五步破解
略。
第六步感谢所有直接或间接提供帮助的朋友。

a__p 发表于 2007-5-17 10:09:01

楼主转贴也要先留意一下本论坛有没此文章哦

glts 发表于 2007-5-17 11:55:42

欢迎转好文,2楼兄弟说得对,稍注意一下!

suyajun 发表于 2007-5-17 20:17:40

下棋作弊的软件啊 不知道引擎库怎么样 脱壳脱的好

crackforchina 发表于 2007-12-30 15:25:31

好东东多转些来也不为过哈

网游难民 发表于 2007-12-30 16:03:14

原帖由 crackforchina 于 2007-12-30 15:25 发表 https://www.chinapyg.com/images/common/back.gif
好东东多转些来也不为过哈

看情况crackforchina准备大搞themida???

cc7x 发表于 2008-1-8 23:10:03

真正的好东西,不得不佩服

zsl01 发表于 2008-9-24 17:34:24

学习一下,强者啊,顶.
页: [1]
查看完整版本: WinLicense 1.8.5.5 加壳之棋天大圣2.6高级版主程序脱壳。