2008看雪论坛读书月第一题

上传的附件 KeyGen.rar

  • 标 题:答复
  • 作 者:沙金
  • 时 间:2008-07-10 18:12

分析过程

OD忽略异常并隐藏进程,可直接调试。

bp MessageBoxA
随便输入用户名和密码点确定后断下。

在 00401CC0  下段 重新输入 用户名,密码
程序对 用户名长度长度进行判断,并判断 每一位是否在 'a'-'z' 之间

00401BB0 > $  55            push    ebp 进行密码的第一次验证
分析得知,用户名长度为6位 密码长度为0xC位。
密码的1、3、5、7、9、11 为分别对应用户名的每一位,结果为 用户名每一位-0x1B
密码的2、4、6、8、10、12 位大于用户名每一位-0x20

00401C84   .  C745 E0 9C020>mov     dword ptr [ebp-20], 29C
00401C8B   .  8B4D E0       mov     ecx, dword ptr [ebp-20]
00401C8E   .  C601 06       mov     byte ptr [ecx], 6
00401C91   .  EB 0B         jmp     short 00401C9E

这里对29C地址有写操作,会发生异常,异常返回 [ebp-14] 里所指向的地址。当密码满足第一次验证条件时,返回到004017F0 否则返回到004017B0
4017B0 弹出错误对话框后退出程序。

跟入004017F0 后分析,通过用户名的第1位和第6位生成一个“密钥”(暂时叫密钥)。
跟到

004018BB   > \6A 00         push    0                                         
004018BD   .  68 60354000   push    00403560      
004018C2   .  68 54354000   push    00403554     
004018C7   .  0FBE0D F64040>movsx   ecx, byte ptr [4040F6]   
004018CE   .  83E9 55       sub     ecx, 55      
004018D1   .  F7D9          neg     ecx            
004018D3   .  1BC9          sbb     ecx, ecx    
004018D5   .  41            inc     ecx     
004018D6   .  51            push    ecx    
004018D7   .  FF15 00324000 call    dword ptr [<&USER32.MessageBoxA>]   
004018DD   .  8945 D8       mov     dword ptr [ebp-28], eax
004018E0   .  837D D8 00    cmp     dword ptr [ebp-28], 0
004018E4   .  74 15         je      short 004018FB

后碰到的难题。一度怀疑是否分析错了。
仔细分析前面的代码,没有找到原因。仔细分析代码后发现
004018C7   .  0FBE0D F64040>movsx   ecx, byte ptr [4040F6]   
004018CE   .  83E9 55       sub     ecx, 55      
004018D1   .  F7D9          neg     ecx            
004018D3   .  1BC9          sbb     ecx, ecx    
004018D5   .  41            inc     ecx     

[4040F6]为密码的11位,而这位密码是用户名的第6位-0x1B
当用户名第6位是'p'时,ecx = 1 否则 ecx = 0

ecx做为 MessageBoxA 函数的句柄参数。当ecx=1时,MessageBoxA函数无法正确弹出对话框,返回值为0
由此判断 用户名的第6位置能为'p'

下面就简单很多了,判断密码的第1、3、5、7、9、11位是否在 前面生成的 “密钥”指定位数开始连续5位里。

由于密码是有用户名直接生成的,所以,本题的用户名的生产算法,即为本题的解。


---------------------------------------------------------
科锐学子:沙金