ljhljf 发表于 2019-3-29 09:13:00

破解理想论坛金钻指标分析系统

工具:Exeinfo PE ver0.0.5.2 - 2018 ( 1021 + 69 signatures x64 ) ;OD
说明:这个程序来源于网络,是2017年的版本了,只是有兴趣,并无盗版之意,只为探讨和交流。
这段时间在研究网路通信的问题,拿了几个软件学习了一下,写下一点体会。
先查壳:

无壳:Microsoft Visual C++ v.12 - 2013 ( E8 6A14 - WinXP ) www.microsoft.com [ Debug:02 ] 开OD,加载 金钻指标启动器.exe,F9正常运行,出现登陆对话框,随便输入
用户名:88888888888888
密码:88888888888888
点击登录,出现:网络链接失败看来服务器可能有问题。OD中搜索一下字符,找到4处:
00403374|.68 D0815400       push 0x5481D0                            ; |网络链接失败
00404373   .68 D0815400       push 0x5481D0                            ;网络链接失败
00404BAA|.68 D0815400       push 0x5481D0                            ;网络链接失败
00404EAB|.68 D0815400       push 0x5481D0                            ; |网络链接失败
全部都是明码,4处可以一一下F2断点,但我想研究一下,主程序注册时,想从服务方的服务器得到什么,也就是服务方的服务器回答给我这个用户机什么,才能让这个程序正常运行。
下面给ws2_32.inet_addr和ws2_32.connect函数下F2断点,
71A22EE1 ws2_32.inet_addr    6A 10               push 0x10
71A24A07 ws2_32.connect   8BFF                mov edi,edi
OD重新运行程序,点击登录按钮:
断在71A22EE1 ws2_32.inet_addr    6A 10               push 0x1看寄存器:EAX 00128E74 ASCII "112.74.54.28"
找到了服务器的IP地址,我们对这个IP地址来验证一下,ping 112.74.54.28一下:在使用的,有效的IP。
客户机和服务机需要通信,我到ws2_32.send函数下F2断点:
71A24C27 ws2_32.send    8BFF                   mov edi,edi
OD重新加载主程序,取消ws2_32.inet_addr和ws2_32.connect断点,F9,点击登录按钮,断在:
71A24C27 ws2_32.send   8BFF                   mov edi,edi
Alt+F9回到主程序领空,00402D4A   |.6A 00             push 0x0                                 ; /Flags = 0
00402D4C   |.68 00010000       push 0x100                               ; |DataSize = 100 (256.)
00402D51   |.8D4424 18         lea eax,dword ptr ss:          ; |
00402D55   |.50                push eax                                 ; |Data = FFFFFFFF
00402D56   |.FF75 08         push dword ptr ss:            ; |Socket = 0x12C
00402D59   |.FF15 F8545100   call dword ptr ds:             ; \send
00402D5F   |.33C9            xor ecx,ecx
00402D61   |.3D 00010000       cmp eax,0x100                            ;
00402D66   |.5F                pop edi
00402D67   |.0f94c1            sete cl
00402D6A   |.8BC1            mov eax,ecx
00402D6C   |.8B8C24 30010000   mov ecx,dword ptr ss:
00402D73   |.5E                pop esi
00402D74   |.5B                pop ebx
00402D75   |.33CC            xor ecx,esp
00402D77   |.E8 A03E0000       call 00406C1C                            ;金钻指标.00406C1C
00402D7C   |.8BE5            mov esp,ebp
00402D7E   |.5D                pop ebp
00402D7F   .C3                retn
我们来看一下这段代码,发现从ws2_32.send函数返回后寄存器eax有一个比较语句:
00402D61   |.3D 00010000       cmp eax,0x100                            ;
看看实际返回的eax值:
Eax=0xFFFFFFFF,表示错误,与0x100不符,标记这段语句:
00402D61   |.3D 00010000       cmp eax,0x100                            ;
我到ws2_32.recv函数下F2断点:
71A2676F ws2_32.recv   8BFF                mov edi,edi
00402D61下F2断点。
OD重新加载主程序,点击登录按钮,断在00402D61,将eax赋值0x100,F9,断在
71A2676F ws2_32.recv   8BFF                mov edi,edi
Alt+F9回到主程序领空,
00403040       |> /6A 00             /push 0x0                              ; /Flags = 0
00403042       |. |B8 00010000       |mov eax,0x100                           ; |
00403047       |. |2BC6            |sub eax,esi                           ; |
00403049       |. |50                |push eax                              ; |BufSize = FFFFFFFF (-1.)
0040304A       |. |8D043E            |lea eax,dword ptr ds:          ; |
0040304D       |. |50                |push eax                              ; |Buffer = FFFFFFFF
0040304E       |. |53                |push ebx                              ; |Socket = 0x138
0040304F       |. |FF15 FC545100   |call dword ptr ds:            ; \recv
00403055       |. |85C0            |test eax,eax
00403057       |. |7E 0C             |jle short 00403065                      ;金钻指标.00403065
00403059       |. |03F0            |add esi,eax
0040305B       |. |81FE 00010000   |cmp esi,0x100
00403061       |.^\7C DD             \jl short 00403040                     ;金钻指标.00403040
00403063       |.EB 02             jmp short 00403067                     ;金钻指标.00403067
00403065       |>8BF0            mov esi,eax
00403067       |>81FE 00010000   cmp esi,0x100                            ;
0040306D       |.74 06             je short 00403075                        ;金钻指标.00403075
0040306F       |.5F                pop edi
00403070       |.5E                pop esi
00403071       |.33C0            xor eax,eax
00403073       |.5B                pop ebx
00403074       |.C3                retn我们看一下00403065和00403067,这两条语句相当于cmp eax,0x100
我们看看eax实际返回的值:Eax=0xFFFFFFFF,表示错误,与0x100不符,标记这段语句:
00403067       |>81FE 00010000   cmp esi,0x100                            ;
将esi赋值0x100,F8,到
00403081       |.33C0            xor eax,eax
00403083       |.813F FC00E88C   cmp dword ptr ds:,0x8CE800FC
我们到数据窗口看看dword ptr ds:的值堆栈 ds:=76767676,不等于0x8CE800FC,我们将这个值赋给他,F9,程序进入正常界面:


ljhljf 发表于 2019-3-29 09:15:59

新来论坛,正在学习论坛发帖规定,一按发表给发出来了,如果不合规定,请版主删除。

xingbing 发表于 2019-3-29 09:19:19

学习了。

wbz_008 发表于 2019-3-29 10:04:32

学习了,谢谢

ytyay 发表于 2019-3-29 14:13:09

学习了   感谢楼主技术分享。。

三十三层天剑主 发表于 2019-3-29 14:49:35

分析的很详细,感谢!

rf_marlboro 发表于 2019-3-29 15:18:57

谢谢楼主分享

wzgangwzgang 发表于 2019-3-29 16:04:20

学习了,谢谢分享!!!

无法无天2020 发表于 2019-3-30 15:33:28

感谢楼主分享

Prajna 发表于 2019-3-30 16:44:18

老师,能分享吗?
页: [1] 2
查看完整版本: 破解理想论坛金钻指标分析系统