到底学到什么程度才可以呢?

Crackme

查壳

  无壳

分析

  字符串查找,找到关键跳转。将 jne 用 nop 填充即可。顺便根据这里面的提示了解到了输入的 name 长度必须大于等于 5 个字节。

关键跳转
关键跳转

Keygen

  逻辑很简单,输入长度大于等于 5 的字符串作为 name,其长度为 i,序列号 serial 的算法如下:
  第 0 位:serial[0] = name[0] - i + 0
  第 1 位:serial[1] = name[i] - i + 1
  ……
  第 i - 1 位:serial[i - 1] = name[i - 1] - i + (i - 1)
  注意:对于 serial 只对前 i 个字节进行校验,后面字节内容随意输入都可通过校验。

算法
算法

代码

#define _CRT_SECURE_NO_WARNINGS

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

#define MAX 100

int main(int argc, char* argv[])
{
    char Str1[MAX] = ""; // Str1 长度需要大于等于 6,建议填入 fffff 观察结果。
    char* pStr1 = Str1;
    char Str2[MAX] = "";
    char* pStr2 = Str2;
    scanf("%s",pStr1);
    int i = strlen(Str1);
    if (i < 5)
    {
        printf("name 长度错误!\n");
        return -1;
    }
    printf("%d\n", i);

    for (int j = 0; j < 5; j++)
    {
        pStr2[j] = pStr1[j] - i + j;
    }

    printf("%s\n", pStr2);

    return 0;
}