-
-
[原创]第一阶段第二题:找规律玩填字游戏
-
发表于:
2008-10-7 12:24
7601
-
bp GetWindowTextA下断,运行后随便输入name和key点击“确定”,中断下来后ALT+F9返回到用户领空:
00403C22 call <jmp.&MFC42.#3874_CWnd::GetWindowTextA>
00403C27 mov ecx, dword ptr [ebp-4]
向下不远处:
00403C84 mov edx, dword ptr [ebp-8]
00403C87 push edx
00403C88 mov eax, dword ptr [ebp-C]
00403C8B push eax
00403C8C call 00401113
跟进就是处理name和key的。
由代码:
00403335 cmp eax, 0C ; 用户名长度必须是12
00403338 je short 0040334E
知道用户名长度必须是12;从后面的分析还知道name串中不能有重复的字符。
向下跟到:
00403598 cmp eax, 35 ; key长度要大于35H
0040359B jnb short 004035B1
知道key长度要大于等于53,从后面的分析还知道key串中字符只可能取‘0’,‘1’,‘2’,‘3’中的一个。向下跟到:
00403615 push ecx
00403616 lea edx, dword ptr [ebp-100]
0040361C push edx
0040361D lea eax, dword ptr [ebp-2B0]
00403623 push eax ; key每个字符减30H后按DWORD存放
00403624 call 00401087
……
00401087 jmp 004022A0
……
便到了主要部分了,sub_004022A0函数是用来验证key的,其复杂程度相当大!!!好多人在此放弃了,sub_004022A0函数共有三个参数,第一个dwKey是输入的key串逐个字符转换成整型后存储的内存地址;第二个参数buffer是存储生成的字符串的缓冲区,大小为24字节;第三个参数a3为:{0,1,2,3,4,5,6,7,8,9,0x0A,0x0B};现将整理后的C代码贴出来分析:
by sing
2008-10-7
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!