简单逆向分析使用案例(5)--CrackMe_04.exe 获取用户名和密码

来源:互联网 发布:学会python能干嘛 编辑:程序博客网 时间:2024/05/16 06:24

环境:

     win7 旗舰版 x64

      OD1.1(吾爱破解版)

      PEiD0.95

使用资源

      http://download.csdn.net/detail/obuyiseng/9351217 中的 CrackMe_04.exe

技巧:

     借助OD中的栈回溯,考虑情况要全面 。



第一步:简单测试。
随便输入点击确定,程序自动关闭了。这里没有我们一直要找的MessageBox。这就需要使用第二步中的PEiD。查看下输入表。

第二步:使用PEiD查看程序信息。
 
发现该程序是VS2013编写,并且是Release。查看输入表信息,发现第一个API是PostQuitMessage函数。
 
第三步:进入OD调试
1、将程序拖入OD中,并打断点  BP PostQuitMessage----注意大小写
 
2、查看是否有存在1中打的断点


 3、按C进行返回,并点击运行。弹出程序窗口,并进行任意输入,并点击确定。程序会在PostQuitMessage函数处进行断住。
 
4、点击堆栈窗口中的栈顶回车,进入到CPU窗口,此时CPU窗口就是PostQuitMessage调用后栈中压入的返回值。

将代码上移,发现含有文本"成功"
 
那么我们借助此开始查看代码。

5、我们需要
013510B6  |.  3905 6C333501 cmp dword ptr ds:[0x135336C],eax         ; |
013510BC  |. /75 22         jnz short CrackMe_.013510E0              ; |
因为jnz会跳转到成功下面,所以需要让cmp结果为0。

6、我们移动代码带该函数的顶部,并设置EIP。并按F8进行单步调试。
 
7、单步到下面代码
 
0135107B  |.  35 78563412   xor eax,0x12345678
01351080  |.  A3 6C333501   mov dword ptr ds:[0x135336C],eax
此处eax的值为"111",也就是我们输入的用户名。
先将eax与0x12345678进行异或, 并将eax的值 赋值到dword ptr ds:[0x135336C]。
代码继续执行
 
发现
eax=000000DE  ---------- 222
ds:[0135336C]=12345617
8、综上所述,我们发现序列号为用户名异或上0x12345678。
 

9、此时我们用户名使用字母呢,该如何使用?我们使用默认的密钥0x12345678(十进制305419896)就可以。
 

总结:

1)当用户名为纯数字的时候: 使用该数字 xor 0x12345678 

       例如:1 xor 305419897  =  305419897

2)当用户名前面含有数字后面含有字母:只保留前面数字部分 xor 0x12345678  

     例如:1abc xor 305419897  =  1 xor 305419897  =  305419897

3)当用户名以字母开头,后面有数字和字母:都使用十进制305419896作为密钥

    例如:aaa 或  a1  等  =  305419896


0 0