各位看雪的朋友,大家新年好..这几天一直在调试这个外挂程序,现在把这几天遇到的问题总结一下,望懂的朋友给我们这些初学者指点一下,小弟不胜感激,这里也要感谢前面那几位帮忙的论坛朋友(特别是卧槽,给我提示了一下怎么找到那些字符串)!
这次上传的附件里面附带了游戏的3个文件,能登陆运行到验证完帐号,然后在
004B9889 |. 8BC3 mov eax, ebx
004B988B |. E8 04ECFFFF call 004B8494 ; 启动游戏
运行游戏时就会出错(帐号的验证是在更前的004B9266开始,下面有代码),所以你们要调试的话就能调试出帐号验证的过程,这也是我很头疼的问题..要查找字符串的话要先跳转到00401000,不然那些字符串都是看不到的.
首先说一下该程序执行的过程:设置完游戏路径,输入帐号后点登陆就开始验证游戏的路径是否正确,正确就连接网络,根据返回的数据封包进行验证,如果验证通过就对游戏目录下的Droiyan Online.ini进行写入登陆外挂时的ID(Droiyan Online.ini文件里有个ID=xxx),启动游戏,进入游戏就开始验证帐号是否跟登陆外挂时的帐号一致,如果一致就启动内挂,不一致就出错或不启动内挂.
大概步骤就是这样子,而且在登陆外挂的时候如果将Droiyan Online.ini文件设置为只读的话,就会出错,在这里我想能不能在写入ID的时候自己注入一段代码将Droiyan Online.ini文件修改要写入的帐号,不过现在还不懂,自己实现不了.
接下来我就说一下那些遇到的问题:在载入程序后运行程序,我在00404c58设置了断点,第一次运行,会在此处中断,而且这段代码在执行的时候经常会调用到,堆栈里经常都有一些奇怪的字符串,我搞不懂是用来做什么的,能不能请懂的人说一下这段代码的作用是来做什么?代码段:00404c58到00404c80.
启动完程序后,输入帐号(新帐号有一天试用时间)点启动游戏就会从004B9234 开始验证帐号(我在这里跟了很久,我试过用过期的号登陆,如果直接跳过验证是能启动外挂,但是到进入游戏的时候外挂就会出错,会出现内存的读取错误,估计应该是刚开始分配的堆栈有问题),所以我猜测是在一下这段代码里通过调用子程序来验证帐号
004B9266 |. E8 05A1F4FF call 00403370
004B926B |. B8 5A000000 mov eax, 5A
004B9270 |. E8 23A1F4FF call 00403398
004B9275 |. 8BF0 mov esi, eax
004B9277 |. 83C6 0A add esi, 0A
004B927A |. 8D55 F0 lea edx, dword ptr [ebp-10]
004B927D |. 8B83 A0030000 mov eax, dword ptr [ebx+3A0]
004B9283 |. E8 785FF9FF call 0044F200
004B9288 |. 8B45 F0 mov eax, dword ptr [ebp-10] ; 帐号
004B928B |. 8D55 FC lea edx, dword ptr [ebp-4]
004B928E |. E8 39FEF4FF call 004090CC ; 此处将帐号转换为大写
004B9293 |. 8D45 F8 lea eax, dword ptr [ebp-8]
004B9296 |. 50 push eax
004B9297 |. 0FB645 F7 movzx eax, byte ptr [ebp-9]
004B929B |. 50 push eax
004B929C |. 8BCE mov ecx, esi
004B929E |. 8BD7 mov edx, edi
004B92A0 |. 8B45 FC mov eax, dword ptr [ebp-4] ; 帐号
004B92A3 |. E8 4C29FEFF call 0049BBF4 ; 此处估计是用于验证的子程序
004B92A8 |. 84C0 test al, al
跟入004090CC的时候里面有很多的重复运算,在跟踪的时候发现帐号在这里被转换成大写,这里我也不是很懂到底是用来做什么的,猜测是在这里的作用是将所有的字符转换大写,只有在004090D9猜测是用来获取帐号长度,其他都看不明白,几个子程序也跟不出个所以然,这里望高手指教一下.
在0049BC3B到0049BDA7这段代码的作用也不是很懂,特别是那些字符串,看不懂是什么意思,特别是在
0049BC86 |. BA F8BD4900 mov edx, 0049BDF8 ; rh123
0049BC8B |. B8 08BE4900 mov eax, 0049BE08 ; 100207
0049BC90 |. E8 0B040000 call 0049C0A0
跟
0049BCE8 |. BA F8BD4900 mov edx, 0049BDF8 ; rh123
0049BCED |. B8 58BE4900 mov eax, 0049BE58 ; 999999
0049BCF2 |. E8 A9030000 call 0049C0A0
的RH123跟那几个数字不知道是用来做什么,越看越乱,还有
0049BD1D |. B8 18BE4900 mov eax, 0049BE18 ; checkuser2.asp?param1=%s¶m2=%s¶m3=%s¶m4=%s
也不知道是什么作用.
在
00404C58 /$ 85D2 test edx, edx
00404C5A |. 74 0A je short 00404C66
00404C5C |. 8B4A F8 mov ecx, dword ptr [edx-8]
00404C5F |. 41 inc ecx
00404C60 |. 7E 04 jle short 00404C66
00404C62 |. F0:FF42 F8 lock inc dword ptr [edx-8]
00404C66 |> 8710 xchg dword ptr [eax], edx ;
00404C68 |. 85D2 test edx, edx
00404C6A |. 74 14 je short 00404C80 ;
00404C6C |. 8B4A F8 mov ecx, dword ptr [edx-8]
00404C6F |. 49 dec ecx
00404C70 |. 7C 0E jl short 00404C80
00404C72 |. F0:FF4A F8 lock dec dword ptr [edx-8]
00404C76 |. 75 08 jnz short 00404C80
00404C78 |. 8D42 F8 lea eax, dword ptr [edx-8]
00404C7B |. E8 C0E2FFFF call 00402F40
00404C80 \> C3 retn
这段代码不管是启动的时候或是登陆的时候,都能看到许多的字符串,在连接网络的过程(像ASCII "HTTP/1.1 200 OK’)都能看得到,而且登陆成功最后会在
0049BB52 |. 8B16 mov edx, dword ptr [esi] ;
看到一大串字符串:
堆栈 ds:[0012F4FC]=00BCFE38, (ASCII "[[YD31D9A21A51ADFF1F33551BBC647F6A25ADE4836261D0465D44521160C72E6432A100D69DE453B2F0B62D82010-2-20 3:54:18]]")
edx=00BCFDB8, (ASCII "http://dr.51fuzhu.com/CheckUser2.asp?Param1=41C747A0DC1234C521&Param2=12110908080B10&Param3=1417&Param4=AB8D8E")
上面的那些代码是在成功登陆的时候才会出现这样的字符串,如果帐号已经试用过的话就会出现一个[[N]]字符,我试过在内存中直接修改这些字符串,但是还是登陆不了,不知道是哪里出问题.
现在遇到的问题大概就是这些, 还有在破解像这种需要通过网络验证的程序要从哪里下手比较合适,能不能跳过网络连接那一步?我刚接触破解不久,还有很多不懂,希望有经验的人给一些指点,小弟不胜感激!
重新传的文件:
JZ918vip.part1.rar
JZ918vip.part2.rar
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课