破解理想论坛金钻指标分析系统
工具: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,程序进入正常界面:
新来论坛,正在学习论坛发帖规定,一按发表给发出来了,如果不合规定,请版主删除。 学习了。 学习了,谢谢 学习了 感谢楼主技术分享。。 分析的很详细,感谢! 谢谢楼主分享 学习了,谢谢分享!!! 感谢楼主分享 老师,能分享吗?
页:
[1]
2