【文章标题】: 中游球皇7.0网络验证分析
【文章作者】: atomy
【软件名称】: 中游球皇7.0
【下载地址】: 自己搜索下载
【保护方式】: themida
【使用工具】: ollyice,winhex,peid
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
看到论坛有人发了想要用这个软件 于是下来练手。
安装 用peid查看 天啊 竟然是 themida 看来没必要脱壳了。 只好 设置 hideod 的选项 动态调试了
钩选两住
HideNtDebugBit
ZwQueryInformationProcess/method2
Shift + F9 运行 (不能直接按F9)
ok 程序在ollyice下正常运行 首先是一个登录窗口 我开始还以为是一个网络游戏软件呢。呵呵 其实是一个台球外挂
现在是下断点问题了。 我想 如果该软件使用登录方法一定要到网上去验证 就会使用到Socket 于是
bp socket
随便输入用户名和密码点击登录
程序被断下 Alt + F9 返回用户代码然后一直F8 跟到 返回 retn :
00402B14 E8 ABDA0500 call 004605C4 ; 登录网络验证
00402B19 8D4D E0 lea ecx, dword ptr [ebp-20]
00402B1C 8BD8 mov ebx, eax
00402B1E 51 push ecx
00402B1F 8BCB mov ecx, ebx
00402B21 895D E4 mov dword ptr [ebp-1C], ebx
00402B24 897D FC mov dword ptr [ebp-4], edi
00402B27 E8 A0E40500 call 00460FCC
00402B2C 817D E0 C800000>cmp dword ptr [ebp-20], 0C8
00402B33 74 29 je short 00402B5E ; 返回值为200才是正常连接互联网 否则服务器连接出错 这里要修改jnz
ok 继续往下跟踪
00402B94 83C4 08 add esp, 8
00402B97 8D4D DC lea ecx, dword ptr [ebp-24]
00402B9A 85C0 test eax, eax
00402B9C 0F94C3 sete bl
00402B9F E8 8F980500 call 0045C433
00402BA4 84DB test bl, bl
00402BA6 74 29 je short 00402BD1
00402BA8 6A 1C push 1C
00402BAA 8D4D D8 lea ecx, dword ptr [ebp-28]
00402BAD E8 EF980500 call 0045C4A1
00402BB2 8B00 mov eax, dword ptr [eax]
00402BB4 8BCE mov ecx, esi
00402BB6 50 push eax
00402BB7 68 F2030000 push 3F2
00402BBC C645 FC 08 mov byte ptr [ebp-4], 8
00402BC0 E8 669D0500 call 0045C92B ; 用户名不存在
00402BC5 C645 FC 07 mov byte ptr [ebp-4], 7
00402BC9 8D4D D8 lea ecx, dword ptr [ebp-28]
00402BCC E9 EF010000 jmp 00402DC0
00402BD1 6A 1D push 1D
00402BD3 8D4D D4 lea ecx, dword ptr [ebp-2C]
00402BD6 E8 C6980500 call 0045C4A1
00402BDB 8B00 mov eax, dword ptr [eax]
00402BDD 50 push eax
00402BDE 8B45 EC mov eax, dword ptr [ebp-14]
00402BE1 50 push eax
00402BE2 E8 AA890400 call 0044B591
00402BE7 83C4 08 add esp, 8
00402BEA 8D4D D4 lea ecx, dword ptr [ebp-2C]
00402BED 85C0 test eax, eax
00402BEF 0F94C3 sete bl
00402BF2 E8 3C980500 call 0045C433
00402BF7 84DB test bl, bl
00402BF9 74 29 je short 00402C24
00402BFB 6A 1D push 1D
00402BFD 8D4D D0 lea ecx, dword ptr [ebp-30]
00402C00 E8 9C980500 call 0045C4A1
00402C05 8B00 mov eax, dword ptr [eax]
00402C07 8BCE mov ecx, esi
00402C09 50 push eax
00402C0A 68 F2030000 push 3F2
00402C0F C645 FC 09 mov byte ptr [ebp-4], 9
00402C13 E8 139D0500 call 0045C92B ; 密码错误
00402C18 C645 FC 07 mov byte ptr [ebp-4], 7
00402C1C 8D4D D0 lea ecx, dword ptr [ebp-30]
00402C1F E9 9C010000 jmp 00402DC0
00402C24 6A 20 push 20
00402C26 8D4D CC lea ecx, dword ptr [ebp-34]
00402C29 E8 73980500 call 0045C4A1
00402C2E 8B00 mov eax, dword ptr [eax]
00402C30 8B4D EC mov ecx, dword ptr [ebp-14]
00402C33 50 push eax
00402C34 51 push ecx
00402C35 E8 57890400 call 0044B591
00402C3A 83C4 08 add esp, 8
00402C3D 8D4D CC lea ecx, dword ptr [ebp-34]
00402C40 85C0 test eax, eax
00402C42 0F94C3 sete bl
00402C45 E8 E9970500 call 0045C433
00402C4A 84DB test bl, bl
00402C4C 74 3A je short 00402C88
00402C4E 6A 03 push 3
00402C50 8BCE mov ecx, esi
00402C52 E8 59F4FFFF call 004020B0
00402C57 84C0 test al, al
00402C59 0F85 AD010000 jnz 00402E0C
00402C5F 6A 1E push 1E
00402C61 8D4D C8 lea ecx, dword ptr [ebp-38]
00402C64 E8 38980500 call 0045C4A1
00402C69 8B00 mov eax, dword ptr [eax]
00402C6B 8BCE mov ecx, esi
00402C6D 50 push eax
00402C6E 68 F2030000 push 3F2
00402C73 C645 FC 0A mov byte ptr [ebp-4], 0A
00402C77 E8 AF9C0500 call 0045C92B ; 试用期已满
00402C7C C645 FC 07 mov byte ptr [ebp-4], 7
00402C80 8D4D C8 lea ecx, dword ptr [ebp-38]
00402C83 E9 38010000 jmp 00402DC0
上面是检查特定值的 来设置提示信息
但由于我们是通过修改 200处的跳转 所以 程序是找不到那些特定代码的 于是一直走到下面
00402C88 6A 21 push 21
00402C8A 8D4D C4 lea ecx, dword ptr [ebp-3C]
00402C8D E8 0F980500 call 0045C4A1
00402C92 8B00 mov eax, dword ptr [eax]
00402C94 8B55 EC mov edx, dword ptr [ebp-14]
00402C97 50 push eax
00402C98 52 push edx
00402C99 E8 F3880400 call 0044B591
00402C9E 83C4 08 add esp, 8
00402CA1 8D4D C4 lea ecx, dword ptr [ebp-3C]
00402CA4 85C0 test eax, eax
00402CA6 0F94C3 sete bl
00402CA9 E8 85970500 call 0045C433 ; 中游球皇7.0单功能版-美式
00402CAE 84DB test bl, bl
00402CB0 0F85 5E010000 jnz 00402E14
00402CB6 6A 22 push 22
00402CB8 8D4D C0 lea ecx, dword ptr [ebp-40]
00402CBB E8 E1970500 call 0045C4A1
00402CC0 8B00 mov eax, dword ptr [eax]
00402CC2 50 push eax
00402CC3 8B45 EC mov eax, dword ptr [ebp-14]
00402CC6 50 push eax
00402CC7 E8 C5880400 call 0044B591
00402CCC 83C4 08 add esp, 8
00402CCF 8D4D C0 lea ecx, dword ptr [ebp-40]
00402CD2 85C0 test eax, eax
00402CD4 0F94C3 sete bl
00402CD7 E8 57970500 call 0045C433 ; 中游球皇7.0单功能版-斯诺克
00402CDC 84DB test bl, bl
00402CDE 0F85 3C010000 jnz 00402E20
00402CE4 6A 23 push 23
00402CE6 8D4D BC lea ecx, dword ptr [ebp-44]
00402CE9 E8 B3970500 call 0045C4A1
00402CEE 8B00 mov eax, dword ptr [eax]
00402CF0 8B4D EC mov ecx, dword ptr [ebp-14]
00402CF3 50 push eax
00402CF4 51 push ecx
00402CF5 E8 97880400 call 0044B591
00402CFA 83C4 08 add esp, 8
00402CFD 8D4D BC lea ecx, dword ptr [ebp-44]
00402D00 85C0 test eax, eax
00402D02 0F94C3 sete bl
00402D05 E8 29970500 call 0045C433 ; 中游球皇7.0全功能版.斯诺克
00402D0A 84DB test bl, bl
00402D0C 0F85 1A010000 jnz 00402E2C ; 全功能
00402D12 6A 4F push 4F
00402D14 8D4D B8 lea ecx, dword ptr [ebp-48]
00402D17 E8 85970500 call 0045C4A1
00402D1C 8B00 mov eax, dword ptr [eax]
00402D1E 8B55 EC mov edx, dword ptr [ebp-14]
00402D21 50 push eax
00402D22 52 push edx
00402D23 E8 69880400 call 0044B591
00402D28 83C4 08 add esp, 8
00402D2B 8D4D B8 lea ecx, dword ptr [ebp-48]
00402D2E 85C0 test eax, eax
00402D30 0F94C3 sete bl
00402D33 E8 FB960500 call 0045C433 ; 中游球皇7.0单功能版-美式(防远程)
00402D38 84DB test bl, bl
00402D3A 0F85 F8000000 jnz 00402E38
00402D40 6A 50 push 50
00402D42 8D4D B4 lea ecx, dword ptr [ebp-4C]
00402D45 E8 57970500 call 0045C4A1
00402D4A 8B00 mov eax, dword ptr [eax]
00402D4C 50 push eax
00402D4D 8B45 EC mov eax, dword ptr [ebp-14]
00402D50 50 push eax
00402D51 E8 3B880400 call 0044B591
00402D56 83C4 08 add esp, 8
00402D59 8D4D B4 lea ecx, dword ptr [ebp-4C]
00402D5C 85C0 test eax, eax
00402D5E 0F94C3 sete bl
00402D61 E8 CD960500 call 0045C433 ; 中游球皇7.0单功能版-斯诺克(防远程)
00402D66 84DB test bl, bl
00402D68 0F85 D6000000 jnz 00402E44
00402D6E 6A 51 push 51
00402D70 8D4D B0 lea ecx, dword ptr [ebp-50]
00402D73 E8 29970500 call 0045C4A1
00402D78 8B00 mov eax, dword ptr [eax]
00402D7A 8B4D EC mov ecx, dword ptr [ebp-14]
00402D7D 50 push eax
00402D7E 51 push ecx
00402D7F E8 0D880400 call 0044B591
00402D84 83C4 08 add esp, 8
00402D87 8D4D B0 lea ecx, dword ptr [ebp-50]
00402D8A 85C0 test eax, eax
00402D8C 0F94C3 sete bl
00402D8F E8 9F960500 call 0045C433 ; 中游球皇7.0全功能版(防远程)
00402D94 84DB test bl, bl
00402D96 0F85 B4000000 jnz 00402E50
上面代码可知道 该软件通过返回的数据来设置软件的版本 如果需要用哪个版本 修改那个call下面的 对比就可以了
继续跟踪到retn 来到主函数住
00401A64 E8 E70F0000 call 00402A50 ;网络登录验证版本之类
00401A69 84C0 test al, al
00401A6B 0F84 F7050000 je 00402068
00401A71 8BCE mov ecx, esi
00401A73 E8 98140000 call 00402F10 ;网络验证
00401A78 84C0 test al, al
00401A7A 0F84 E8050000 je 00402068
跟进 call 00402F10
有两个地方要跳
第一个地方
00402FC8 E8 FFDF0500 call 00460FCC
00402FCD 817D E4 C800000>cmp dword ptr [ebp-1C], 0C8
00402FD4 74 2A je short 00403000 ; 要跳
00402FD6 6A 1B push 1B
00402FD8 8D4D DC lea ecx, dword ptr [ebp-24]
00402FDB E8 C1940500 call 0045C4A1
00402FE0 8B00 mov eax, dword ptr [eax]
00402FE2 8BCF mov ecx, edi
00402FE4 50 push eax
00402FE5 68 F2030000 push 3F2
00402FEA C645 FC 08 mov byte ptr [ebp-4], 8
00402FEE E8 38990500 call 0045C92B ; 连接服务器失败
00402FF3 8D4D DC lea ecx, dword ptr [ebp-24]
00402FF6 885D FC mov byte ptr [ebp-4], bl
00402FF9 E8 35940500 call 0045C433
00402FFE EB 29 jmp short 00403029
第二个地方
00403086 E8 41DF0500 call 00460FCC
0040308B 817D E4 C800000>cmp dword ptr [ebp-1C], 0C8
00403092 74 62 je short 004030F6 ; 要跳
00403094 6A 1B push 1B
00403096 8D4D DC lea ecx, dword ptr [ebp-24]
00403099 E8 03940500 call 0045C4A1
因为上面两个地方都是判断是否连接到服务器 所以要跳
ok 回到主函数地址继续往下跟
00401F1E 8BCE mov ecx, esi
00401F20 E8 9DAB0500 call 0045CAC2 ; 最小化登录窗口
00401F25 6A 00 push 0
00401F27 8BCE mov ecx, esi
00401F29 E8 94AB0500 call 0045CAC2 ; 隐藏登录窗体
00401F2E 8D8E C0010000 lea ecx, dword ptr [esi+1C0]
00401F34 8DBE BC010000 lea edi, dword ptr [esi+1BC]
00401F3A 51 push ecx
00401F3B 8BCF mov ecx, edi
00401F3D E8 9A1E0000 call 00403DDC ; Core.CCore::TransferData
00401F42 8BCF mov ecx, edi
00401F44 E8 8D1E0000 call 00403DD6 ; Core.CCore::Start and HookMessage
00401F49 6A 40 push 40 ; 64
00401F4B 8D8C24 8C000000 lea ecx, dword ptr [esp+8C]
00401F52 E8 4AA50500 call 0045C4A1 ; 应该是加载字符资源
00401F57 8BF8 mov edi, eax
到这冒似可以了。 于是shift + f9 哈 运行成功....
--------------------------------------------------------------------------------
【经验总结】
开始找了好多关于themida如何脱壳的资料 发现这个壳比较难脱。。(难道真的这么难?偶就不信这个邪,以后慢慢研究吧)
还有分析的时候在call的地方 找了一下寄存器指向的内存才知道这个call的用处了.
这个软件可以写个内存补丁
要修改的地方有几住
必改
1.00402B33 74 -> 75 验证
2.00402FD4 74 -> 75 验证
3.00403092 74 -> 75 验证
可选
1.00402CB1 85 -> 84 中游球皇7.0单功能版-美式
2.00402CDF 85 -> 84 中游球皇7.0单功能版-斯诺克
3.00402D0D 85 -> 84 中游球皇7.0全功能版.斯诺克
4.00402D3B 85 -> 84 中游球皇7.0单功能版-美式(防远程)
5.00402D69 85 -> 84 中游球皇7.0单功能版-斯诺克(防远程)
6.00402D97 85 -> 84 中游球皇7.0全功能版(防远程)
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2007年03月07日 14:01:12
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!