CrackMe算法分析案例 | wanao's CrackMe#1-2048

admin 2023年6月6日01:55:24评论57 views字数 841阅读2分48秒阅读模式

熟悉软件操作,发现有注册点。

CrackMe算法分析案例 | wanao's CrackMe#1-2048

尝试断下GetWindowTextA、GetWindowTextW、GetDlgItemTextA、GetDlgItemTextW函数。结果无法断下,因此该输入框获取文本不是通过上述四个函数。

对当前程序环境,进行字符串检索。检索结果如下。

CrackMe算法分析案例 | wanao's CrackMe#1-2048

根据字符提示,可以大致分析出当前程序注册所需的注册号形式:

  • 用户名不能为空

  • 用户名不能少于5个字符

  • 序列号错误(此处为关键点,初步预测是账号密码的校验算法附近代码)


尝试对每个序列号错误进行下断操作,直到其中某一个能够断下。

CrackMe算法分析案例 | wanao's CrackMe#1-2048

可以明显的看到,有一个跳转在尝试跳过报错函数,如果逻辑上没有执行报错函数,那么是否就能判定,注册码符合要求。那么基本就能锁定,je指令上方的call应该是一个注册码检验函数。

CrackMe算法分析案例 | wanao's CrackMe#1-2048

函数内部很简短,函数功能涉及到如下几点。

  • 获取参数字符串

  • 获取字符串所占字节数,根据字节计算字符个数

  • 将字符个数返回

那么我们是否能编写一个注册机,创造对应的用户名密码,生成对应的0xC字符长度的字符串。

注册机代码

#include <iostream>
#include <string>
#include <ctime>

using namespace std;

int main() {

string csUserName;
string csPassWord;

srand(time(NULL));

for (int i = 0; i < 3; i++) {
csUserName += rand() % 5 + '0';
csPassWord += rand() % 5 + '0';
}

cout << "账号:" << csUserName << csUserName << csUserName << csUserName << endl;
cout << "密码:" << csPassWord << csPassWord << csPassWord << csPassWord << endl;

getchar();
return 0;

}

原文始发于微信公众号(0x00实验室):CrackMe算法分析案例 | wanao's CrackMe#1-2048

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年6月6日01:55:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CrackMe算法分析案例 | wanao's CrackMe#1-2048http://cn-sec.com/archives/1745668.html

发表评论

匿名网友 填写信息