好了吃饱了,继续我们的破解之路。
前面已经追到了关键函数,函数中有下面一段代码
004166B7 |. 51 PUSH ECX
004166B8 |. 68 0C914500 PUSH upplican.0045910C ; 这里应该指向一个结构体
004166BD |. 6A 06 PUSH 6
004166BF |. 6A 07 PUSH 7
004166C1 |. 52 PUSH EDX
004166C2 |. C705 C43A5200>MOV DWORD PTR DS:[523AC4],1000000
004166CC |. 894424 1C MOV DWORD PTR SS:[ESP+1C],EAX
004166D0 |. C74424 20 120>MOV DWORD PTR SS:[ESP+20],12
004166D8 |. E8 C3400000 CALL upplican.0041A7A0 ; 获取mac地址
其中第二个push有点意思,直接是一个地址,转到数据窗口
0045910C 00 0B 2F 20 64 91 35 39 2E 36 38 2E 31 2E 32 30 ./ d?9.68.1.20
什么?居然是自己的mac地址,IP地址,网关地址,DNS服务器地址!(后面的数据我没有列出来)
那就看这个函数在做什么吧?
这个函数比较简单,只是几个movs而已,那就需要注意究竟是把什么数据复制到了什么地方。而且
后面对用户名,密码,IP地址等数据的处理也都是这个函数,那么很可能这个函数是用来对某个相同的数据进行赋值
(当然这是我跟踪多遍才发现的),那么是向什么地方赋值呢?直接看edi就可以了,对!直接EDI!
因为在复制的时候编译器编译之后绝大部分都是esi和edi的使用。经过跟踪发现,很大部分的验证信息都被放到了
11df22e地址左右的内存中。
0041680D |. 51 PUSH ECX
0041680E |. 6A 01 PUSH 1
00416810 |. 52 PUSH EDX
00416811 |. E8 0A0F0000 CALL 00417720 ; 这一部分填充的是什么呢?
00416816 |. 8B4424 40 MOV EAX,DWORD PTR SS:[ESP+40]
0041681A |. 8D8C24 C40000>LEA ECX,DWORD PTR SS:[ESP+C4]
00416821 |. 50 P