下面是网上的160个CrackMe的部分逆向笔记,包括逆向思路、注册机实现和逆向中常用的知识整理
注意:逆向前一定要先操作一下软件,熟悉软件的运行现象;逆向一定要自己操作一遍,看是很难看会的(高手除外)
CrackMe018和CrackMe019是一个作者编写,都是
VC6.0
的程序
1.程序基本信息
需要输入正确的用户名和密码才可以破解程序,有错误提示就很容找到处理逻辑的主要函数(如果不明白,可以参考CrackMe001)
2.IDA分析
使用test123
作为用户名,456
作为密码;IDA直接分析Check
按钮的响应函数结果如下
验证流程简要总结:
- 1.求出用户名的长度,必须大于等于5
- 2.对用户名中的每一个字符执行一顿骚操作,将最后的结果
res
转化成字符串 - 3.将用户名计算的
res
与用户输入的密码比较,相等就是破解成功
简单验证
用户名test123
经过一顿for循环的操作,结果res=0x2E6D8C1
,转成十进制字符串"48683201"
猜测这个字符串大概率就是真正的密码,验证结果如下,果然猜的没错
扩展:其实上面截图分析结果是OD和IDA一起动态调试分析出来的
下面是OD比较密码是否正确的截图
3.注册机
根据IDA的分析,直接将需要部分拷贝下来写成简单的注册机如下:
#include "StdAfx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int res = -2128125115;
char user_name[100] = {0};
printf("请输入用户名(>=5):");
scanf_s("%s", user_name, 100);
int username_len = strlen(user_name);
for (int i = 0; i < username_len; ++i) { // 遍历用户名中每个字符
res += user_name[i];
res ^= i << 8;
res *= ~(i * username_len) * (i + 1);
}
printf("密码:%d\n", res);
system("pause");
return 0;
}
验证注册机结果:
4.参考
- 1.VB程序逆向反汇编常见的函数 - 笨笨D幸福 - 博客园 (cnblogs.com)
- 2.常用软件可以在这里下载:爱盘 - 最新的在线破解工具包 (52pojie.cn)
- 3.【反汇编练习】160个CrackME索引目录1~160建议收藏备用
- 4.160个Crackme_鬼手56的博客-CSDN博客
- 5.《使用OllyDbg从零开始Cracking》系列的文章也不错