陇南市网站建设_网站建设公司_后端工程师_seo优化
2025/12/30 14:33:39 网站建设 项目流程

info

1、软件名称:CrackMe2.exe
2、压缩包名:Acid Bytes.2.zip
3、编程语言:Delphi
4、星级评定:算 法:★ 爆 破:★ 脱 壳:★

查壳

Pasted image 20250802215114

脱壳

用吾爱的脱壳程序,给他拖到这里就好了
Pasted image 20250802215237

界面

Pasted image 20250802215036

开逆

找到了成功的提示
Pasted image 20250801214259

在这个方法前打个断点,然后输出点东西
Pasted image 20250801214425

这边发现了,只要输入的东西等于 12011982 这个 call 就结束了
Pasted image 20250801214538

从新输入 12011982 后进入这个 call
Pasted image 20250801214721

发现没有跳转,原因是他对比的是 eax 的实际值,不是 120119182
Pasted image 20250801214809
Pasted image 20250801215611

int __fastcall CompareStrings(const char* str1, const char* str2) {if (str1 == str2) {return 0;  // 相同指针,直接返回相等}if (!str1) {// str1 是 nullptr,返回 str2 长度的负数(假设 str2 前面有长度字段)return -static_cast<int>(reinterpret_cast<const uint32_t*>(str2)[-1]);}if (!str2) {// str2 是 nullptr,返回 str1 的长度(假设 str1 前面有长度字段)return static_cast<int>(reinterpret_cast<const uint32_t*>(str1)[-1]);}// 读取字符串长度(假设长度存储在数据前 4 字节)uint32_t len1 = reinterpret_cast<const uint32_t*>(str1)[-1];uint32_t len2 = reinterpret_cast<const uint32_t*>(str2)[-1];uint32_t min_len = (len1 < len2) ? len1 : len2;// 按 4 字节块比较(优化速度)const uint32_t* p1 = reinterpret_cast<const uint32_t*>(str1);const uint32_t* p2 = reinterpret_cast<const uint32_t*>(str2);uint32_t dword_blocks = min_len >> 2;  // min_len / 4while (dword_blocks--) {if (*p1 != *p2) {// 不相等,进一步检查字节差异uint8_t c1 = *reinterpret_cast<const uint8_t*>(p1);uint8_t c2 = *reinterpret_cast<const uint8_t*>(p2);if (c1 != c2) return c1 - c2;c1 = *(reinterpret_cast<const uint8_t*>(p1) + 1);c2 = *(reinterpret_cast<const uint8_t*>(p2) + 1);if (c1 != c2) return c1 - c2;uint16_t s1 = *reinterpret_cast<const uint16_t*>(p1) >> 16;uint16_t s2 = *reinterpret_cast<const uint16_t*>(p2) >> 16;return s1 - s2;}p1++;p2++;}// 比较剩余字节(1-3 字节)uint32_t remaining = min_len & 3;  // min_len % 4const uint8_t* byte_p1 = reinterpret_cast<const uint8_t*>(p1);const uint8_t* byte_p2 = reinterpret_cast<const uint8_t*>(p2);while (remaining--) {if (*byte_p1 != *byte_p2) {return *byte_p1 - *byte_p2;}byte_p1++;byte_p2++;}// 如果前面都相等,返回长度差return static_cast<int>(len1) - static_cast<int>(len2);
}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询