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个排列紧密,只要把最后一个区段单独出来即可实现文件大小优化,如果你非得把所有区段都弄出来,我也没意见。
第五步破解
略。
第六步感谢所有直接或间接提供帮助的朋友。 楼主转贴也要先留意一下本论坛有没此文章哦 欢迎转好文,2楼兄弟说得对,稍注意一下! 下棋作弊的软件啊 不知道引擎库怎么样 脱壳脱的好 好东东多转些来也不为过哈 原帖由 crackforchina 于 2007-12-30 15:25 发表 https://www.chinapyg.com/images/common/back.gif
好东东多转些来也不为过哈
看情况crackforchina准备大搞themida??? 真正的好东西,不得不佩服 学习一下,强者啊,顶.
页:
[1]