玩CrackMe

文件链接

§ 简单使用

这是一个由用户名和License-Key组成的校验程序,其中,LicKey需要至少17位且其中包含KEY,校验失败后会重试,直接扔进Ghidra

§ 定位

Ghidra直接自动识别出了_main函数,点进去就是了,然后反编译的代码中往下翻可以找到Username:License-Key字样,简单的命名之后是这样的

TAFyA1.png

然后往下翻,忽略没用的错误提示,可以找到这两段代码

TAksKg.png

TAkAvF.png

前面检查了用户名,后面检查了LicKey,两者demangle之后都是___gnu_cxx::__enable_if<std::__is_char<char>::__value, bool>::__type std::operator==<char>(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)(直接文本比较),于是可以直接知道local_a0local_104就是对应着正确的用户名和密码。

§ 解密

返回到_main前面,可以看到一大堆类似于这样的代码

TAEK1K.png

全部demangle之后很明显能看到拼接了字符串

TAVhGt.png

测试后发现,crck_me就是UserName,同理,$2833-15431-51KEY就是LicKey

§ 本文历史

  • 2021.12.17:编写本文