记录逆向学习的第一个CrackMe
ps:在逆向的时候需要多备几个OD 以免数据出错查不出来
打开 并运行软件,尝试输入账号密码,发现报错,重新尝试不同的密码同样的报错,那么就可以猜测报错的格式是固定的。(可以进行Messagebox 断点操作
Messagebox 第一个断点断在 763AEA80 既然弹出,窗口就需要用到
这时候注意到了右下角堆栈区被放入了 提示所用到的字符串 !
右键反汇编窗口跟随 直接到程序领空
右键字符串 搜索-智能搜索 找到目标 参数
找到关键跳转语句
右键跟随 在反汇编中 注释里找到提示 在跳转中可猜测到是关键条
!但是下了断点没有在此中断这就很奇怪了 想到之前填入的账号 333可能是长度不够
可能有长度判断 然后再下面找到了 这里的判断
首先 cmp 和4比较 如果位数大于等于4位就可以继续执行
在执行过程中 发现右边寄存器栏目有出现 类似于出现机械码的东西,而且程序还在执行可以猜测 根据账号生成对应的验证码最终对结果进行验证
接下来验证密码是否是 上面所显示的CW-4018-CRACKED验证码!
保持账号不变 输入进行验证
发现的确对ZF标志位进行了改变 断言!是根据账号生成的注册码
接下来分析如何生成注册码
PS:用这个旧OD太容易崩溃了 换一个
更换一个 名称输入 666666
发现这次只更新了 CW-机械码-CRACKED
然后找到计算 4428这个数字 的地址
0042FA87 | 8B45 F0 | mov eax,dword ptr ss:[ebp-10] | [ebp-10]:"6666666"
0042FA8A | 0FB600 | movzx eax,byte ptr ds:[eax] | 使用 1 字节的EAX 移入 eax
0042FA8D | F72D 50174300 | imul dword ptr ds:[431750] | 乘 29h
0042FA93 | A3 50174300 | mov dword ptr ds:[431750],eax | 431750 = 8A6
0042FA98 | A1 50174300 | mov eax,dword ptr ds:[431750] | eax = 8A6
0042FA9D | 0105 50174300 | add dword ptr ds:[431750],eax | 8A6+8A6
0042FAA3 | 8D45 FC | lea eax,dword ptr ss:[ebp-4] | 114C = 4428
0042FAA6 | BA ACFB4200 | mov edx,acid burn.42FBAC | 42FBAC:"CW"
0042FAAB | E8 583CFDFF | call <acid burn.sub_403708> |
0042FAB0 | 8D45 F8 | lea eax,dword ptr ss:[ebp-8] |
0042FAB3 | BA B8FB4200 | mov edx,acid burn.42FBB8 | 42FBB8:"CRACKED"
0042FAB8 | E8 4B3CFDFF | call <acid burn.sub_403708> |
首先将 6666666 第一个6 的 ascii码表的16进制 乘与 29 然后增加自己的一倍 转换为10进制 就得出4428