1

Crackme010 的逆向分析

1.程序观察

clipboard.png

程序只有一个输入 Key 值的地方,尝试输入 "123",程序和 008、009 一样出现的还是德语错误提示,因为这都是一个人制作的小程序。
虽然这个程序标注的是 3星难度,但是我感觉这个程序和 009 一样,只是稍微有一点不同,难度应该也是 1星 才对。

2.简单查壳

clipboard.png

无壳。

3.程序分析

使用 OD 载入程序,搜索字符串
clipboard.png

双击进入代码,可以看到,和 009 几乎是一模一样。
clipboard.png
clipboard.png
clipboard.png

程序流程大概就是:

  1. 程序首先求得输入 Key 的长度。
  2. 建立循环,循环次数为 Key 的长度。
  3. 每次取我们输入的 Key 的一个字符。
  4. 将字符转换为 ASCII 再加上 0xA。
  5. 再次转换为字符形式。
  6. 将转换过的字符连接起来。

在最后程序将转换过的字符串和字符串 "kXy^rO|yXomkMuOn*+"进行比较,如果相同进提示正确,不相同就提示错误。

4.写出注册机

既然已经知道了转换的步骤,也有了正确的转换后的字符串,那么反推出正确的 Key 就是很简单的了。

#include <stdio.h>
#include <string.h>


int Key()
{
    char szKey[30] = "kXy^rO|*yXo*m\\kMuOn*+";
    int NameLen = 0;

    NameLen = strlen(szKey);

    for (int i = 0; i < NameLen; i++)
    {
        szKey[i] -= 0xa;
    }
    printf("%s", szKey);
    return 0;
}

int main(int argc, char* argv[])
{
    Key();
    return 0;
}

clipboard.png

相关文件在我的 Github


snow
4 声望0 粉丝

多么美好!


« 上一篇
Crackme 009
下一篇 »
Crackme011