003 - Cruehead-CrackMeV3

info

1、软件名称:CrackMe V3.0
2、压缩包名:Cruehead-CrackMe-3.rar
3、编程语言:Assembler
4、星级评定:算 法:★★  爆 破:★★

查壳

Pasted image 20250724184800

界面

Pasted image 20250724221708

Start

通过这个发现了一个文字,这个难度应该和 abexcm5 差不多
Pasted image 20250724221604

  1. 4020F9 变量是一个 DWORD,用来存放 key
  2. 加密方法的过程中会改变 key,并且方法运行后 key 还要在 xor 12345678 一遍
  3. 最后读取文件前18个字符的后4个字符和key做对比。如果一样就 Win 了。
    Pasted image 20250727144249

加密方法怎么做的懒得说了,贴张图和注册机的 Encryption(char *pass) 对着看吧。
Pasted image 20250727145357

注册机

#include <Windows.h>
#include <fstream>
#include <iostream>
#include <string>

DWORD key = 0;     // 4020F9

void Encryption(char *pass) {
  char bl = 0x41;

  do {
    pass[0] ^= bl;
    key += pass[0];
    pass++;
    bl++;
    if (pass[0] == '\0') {
      break;
    }
  } while (bl != 0x4F);
}

int main() {
  char input[15] = {0}, input_bak[15] = {0};
  std::cout << "Please enter 14 characters: ";

  std::string temp;
  std::getline(std::cin, temp);

  if (temp.length() != 14) {
    std::cout << "Error: You entered more than 14 characters.\n";
    return 1;
  }
  temp.copy(input, 14);
  input[14] = '\0';
  std::copy(input, input + 15, input_bak);

  Encryption(input);

  key ^= 0x12345678;

  std::ofstream outFile("CRACKME3.KEY", std::ios::binary);

  if (!outFile) {
    std::cerr << "Failed to create file!" << std::endl;
    return 1;
  }

  outFile.write(input_bak, 14);
  outFile.write(reinterpret_cast<const char *>(&key), sizeof(key));

  outFile.close();

  std::cout << "over!!!" << std::endl;
  return 0;
}
posted @ 2025-07-27 14:57  b_e_n  阅读(16)  评论(0)    收藏  举报