CrackMe019:IDA和OD联合调试

下面是网上的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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值