教你如何破解各种网络验证
文件夹内有几个文件,分别是main.

OD加载,退出,弹出软件窗口,OD下断CreateProcess,发现其打开的是main.dat,用UE查看main.dat 原来是个可执行文件被改名了,于是改名为

PE查壳 ASPack 2.12 -> Alexey Solodovnikov
直接cooldumper搞定

开始分析
点击登录,出现MessageboxW,未注册用户,窃喜,bp MessageBoxW.
果断断住,看堆栈调用情况

0013F550   0065A066  /CALL MessageBoxW
0013F554   007802CC  |hOwner = 007802CC ('三国哈哈 1.17',class='TLoginForm',parent=
018803B2)
0013F558   00C6F33C  |Text = "?,B4,"",D7,"",A2,"",B2,"?,BB,"?
0013F55C   00C76544  |Title = ""D7,"",A2,""
0013F560   00000000  \Style = MB_OK|MB_APPLMODAL
0013F564   0013F93C  指向下一个 SEH 记录的指针
0013F568   00546D1F  SE处理程序
0013F56C   0013F5F8
0013F570   0013F798
0013F574   0044E700  dumped_.0044E700
0013F578   00BC67C0  ASCII "pkD"
0013F57C   00000000
0013F580   00000000
0013F584   00000000
0013F588   00000000
0013F58C   00000000
0013F590   00000000
0013F594   00000000
0013F598   00000000
0013F59C   00000000
0013F5A0   00C6F33C  ASCII "*g鑜孮(u7b"
0013F5A4   00C76544
0013F5A8   00000000
0013F5AC   00000000
0013F5B0   00C8AA7C  UNICODE "d00b-207dcdd2"
0013F5B4   00C8AA1C  UNICODE "D00B-207DCDD2"
0013F5B8   00C8AA4C  UNICODE "d00b-207dcdd2"
0013F5BC   00C8EC14  UNICODE "D:\sg117\script\"
0013F5C0   00000000
0013F5C4   00000000
0013F5C8   00000000
0013F5CC   00000000
0013F5D0   00CA581C  UNICODE "D:\"
0013F5D4   00000000
0013F5D8   00CA57E4  UNICODE "D:\"
0013F5DC   00C8EC14  UNICODE "D:\sg117\script\"
0013F5E0   00000000
0013F5E4   00CA5774  UNICODE "D:\"
0013F5E8   00000000
0013F5EC   00000000
0013F5F0   00C8A9EC  UNICODE "D00B-207DCDD2"

看到最后面几行有D00b什么的,是软件上提示的机器码。其他没什么营养,先放住不管。
可能我才疏学浅,认为这种外挂一定是网络验证的,所以也没去深究这个D00B什么的,既然MessageBox没看出什么端倪,换方法。

bp send, bp recv全部打好断点

点击登录。断下在bp send ,看发包data,是明文,如下
0013F2A8  |00C214F8  ASCII "GET Http://60.190.222.188:8000/wglog ... 09C85&port=8020 HTTP/1.1",CR,LF,"Host: 60.190.222.188",CR,LF,"Connection: Ke"...

好长的一段串啊,不管它查下堆栈很容易发现它的组包过程。
几个Unicode串摆在堆栈里面,是由之前的D00B-207DCDD2+我硬盘号+MAC地址+一个时间数,然后看长度好像将这些参数组合进行了一 SHA运算,得出的这个串.当然这只是猜想,我认为没必要去跟组包的算法。毕竟网络验证都是通过回包的信息进行各种跳,各种逻辑的。


直接F9跑到recv这里看看,收包明文,如下



0013F274  |0110A048  ASCII "HTTP/1.1 200 OK",CR,LF,"Connection: keep-alive",CR,LF,"Content-Type: text/html",CR,LF,"Content-Length: 20",CR,LF,"Server: Indy/9.00.10",CR,LF,CR,LF,"REG:AAEDGWE29AB8C"

恩服务器回来的包很短REG:AAEDGWE29AB8C

分析一下发包的包值吧,每次发包相同值都是9D1669ADA23091A6F454E45991E4EB2258E2B2DF5B591B
不同点的地方在于后面,如果我每次把不同的值记录下来,发一样的,服务器是否会给我回一样的包呢,测试一下。

使用一次截获的包进行测试F7A78CB1449ADBF6DC2C2DECE8F09C85

013F2A8  |00C214F8  ASCII "GET Http://60.190.222.188:8000/wglog ... BF6DC2C2DEC
E8F09C85
服务器回的
结果两次完全一致
0013F274  |0110A048  ASCII "HTTP/1.1 200 OK",CR,LF,"Connection: keep-alive",CR,LF,"Content-Type: text/html",CR,LF,"Content-Length: 20",CR,LF,"Server: Indy/9.00.10",CR,LF,CR,LF,"REG:AAED1FAE8829AB8C"

0013F274  |0110A048  ASCII "HTTP/1.1 200 OK",CR,LF,"Connection: keep-alive",CR,LF,"Content-Type: text/html",CR,LF,"Content-Length: 20",CR,LF,"Server: Indy/9.00.10",CR,LF,CR,LF,"REG:AAED1FAE8829AB8C"

由此断定,服务器那边并没有随机算法。客户端和服务器端只有一方进行了随机处理,外挂并没有做双面的随机同步。

那么请各位大牛帮小弟分析一下这样做是否可行?
hookSend Api,修改验证服务器地址,改写为本地
购买一个正版KEY,截获正确的发包收包的数据,记录
createprocessa然后每次hook Send将包重组,发给本地服务器,本地服务器返回刚才截获到的正确回包值,是否就可以破解。

追到了一个地方,那个地方将Reg后面的值push进去,但是在里面没进行什么操作就ret了。不知道是不是关键点。

00426FB5    85C0            test    eax, eax
00426FB7    74 05           je      short 00426FBE
00426FB9    83E8 04         sub     eax, 4
00426FBC    8B00            mov     eax, dword ptr [eax]
00426FBE    8BD8            mov     ebx, eax
00426FC0    85DB            test    ebx, ebx
00426FC2    74 16           je      short 00426FDA
00426FC4    8BCB            mov     ecx, ebx
00426FC6    03C9            add     ecx, ecx
00426FC8    8B55 E0         mov     edx, dword ptr [ebp-20]          ; 服务器返回信息给edx
00426FCB    8B45 F8         mov     eax, dword ptr [ebp-8]
00426FCE    E8 81C4FDFF     call    00403454
下了内存访问断追到这里。EDX里面保存着服务器返回REG后面的信息,但是不知如何追到比对算法。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。