-
-
[原创]CrackMe-29(简易)新手
-
发表于:
2019-9-16 14:40
4944
-
CrackMe-29
用到的工具 OD,PEID
看到他是VC++6.0 运行一下看看效果
OD打开 给MessageBoxA 和MessageBoxW下个断点 看看是否可以断下窗口
是MessageBoxA断点断下的
栈回溯找到调用位置
这是弹窗正确和错误的位置了
往上面找下,找到入口处
入口点
下好断点让程序再次运行起来
NAME 和Serial 长度都必须要大于5
程序算法位置
经过观察 Name异或处
是按照 Name的长度+1去异或, 因为我们输入的是1234567 现在全部变成了0了 只有相同的数进行异或才会变成0 所以 每次异或都是相同的
用户输入几位,他就从1开始 ++1 的形式去异或后面的字符 为了印证我们使用9位试试看123456789
Name上面的值全部变成了0 那就代表他们都异或了自己(相同的数); 也就证明 Name位置的异或是i=1;++i的形式去异或的
Serial的异或形式和Name 的一样,只不过 不一样的是值, Serial异或是从A 开始 然后下一位B 下一位C 这样去异或
算法过去之后, 可以到了判断的位置
判断条件是 Name 和Serial 可以在异或完毕后,值是相同的才可以成功,
这里 我放一个我一开始分析的数值, 这个程序可以写注册机, 逻辑也很好分辨, 但是我就不写了,时间有限
数值不是绝对的,
爆破的话 直接修改跳转就可以了 jnz修改位jmp 正确弹出的弹窗位置 0x4015D9
注册机就写Name和Serial的逻辑判断去生成,可以用
for(int i=0;i<=输入的值;i++)
{
数组[i] ^i ; // 这样就ok了 伪代码, Serial一样的写法,换一个异或的值 从 i=0 i++; 变成 i=A , A++;
}
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)