nop破解
上OD,字符串搜索,直接搜索提示錯誤的字符串然後找到這個位置
往上邊找一下發現是跳轉來的,直接nop就可以成功破解。
序列號生成分析
找到函數頭,一段執行排除沒什麼用的操作,發現到了這個函數
查看返回值EAX,發現是獲取輸入的用戶名長度
在來分析下邊的指令,將用戶名長度乘以0x17CFB
執行的那個CALL是獲取用戶名第一個字符的數值
後邊是將乘以的值再加上第一個字符的數值
中間直接省略掉沒什麼意義的操作,發現到下邊的函數
查看壓入的數值,堆棧窗口發現有意思的數值,看樣子這個函數應該就是生成序列號的函數
查看返回值,發現這段數據非常像序列號,輸入測試,正確。
然後再寫我們的註冊機
#include "stdafx.h"
int main(int argc, char* argv[])
{
char buf[MAX_PATH];
printf("輸入用戶名(自動生成序列號):");
scanf("%s", buf);
int num = 0x17CFB * strlen(buf);
int num2 = (int)buf[0];
num = num + num2;
printf("AKA-%d\n", num);
return 0;
}