欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

第一阶段第二题:找规律玩填字游戏

第一阶段第二题:找规律玩填字游戏

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代码贴出来分析:

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功