到底学到什么程度才可以呢?
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;
}