160个Crackme029
生活随笔
收集整理的這篇文章主要介紹了
160个Crackme029
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 查殼
- 分析程序
- 分析算法
- 寫出注冊機(jī)
- 校驗(yàn)結(jié)果
查殼
這個(gè)Crackme跟027和028是同一個(gè)作者,VC6寫的,難度為一顆星
分析程序
同樣,根據(jù)字符串的錯(cuò)誤提示,來到函數(shù)頭的位置,配合IDA的偽代碼分析整個(gè)算法,
分析算法
隨便輸入一個(gè)用戶名和序列號,算法的校驗(yàn)過程如下。這個(gè)Crackme跟028一樣有花指令的干擾,如果想在IDA中看到F5的偽代碼,需要手動去除花指令,去除的方法請參考我的Crackme027的分析
對 沒錯(cuò) 兩個(gè)算法都是直接從IDA的偽代碼中拷出來的 直接就能用
也就是說用戶名和序列號必須要滿足程序中的等式才能注冊成功
寫出注冊機(jī)
這個(gè)程序的注冊機(jī)也比較好寫,首先根據(jù)用戶名計(jì)算出中間結(jié)果,然后再根據(jù)結(jié)果反向逆推出注冊碼,代碼如下:
#include <iostream> #include <windows.h>using namespace std;int main() {char username[20] = { 0 };char result[20] = { 0 };char key[20] = { 0 };printf("請輸入用戶名 必須為全大寫:");scanf_s("%s", username, 20);int usernameLength = strlen(username);if (usernameLength <= 5){printf("用戶名長度必須大于5");}//計(jì)算中間結(jié)果for (int i=0;i<usernameLength;i++){username[i] ^= i+1;result[i] = username[i];}//根據(jù)結(jié)果逆推注冊碼for (int i = 10; i < usernameLength+10; i++){result[i-10] ^= i;key[i-10] = result[i-10];}printf("%s\n", key);system("pause");return 0; }校驗(yàn)結(jié)果
輸入用戶名和計(jì)算出來的序列號
提示正確 破解成功
需要相關(guān)文件可以到我的Github下載:https://github.com/TonyChen56/160-Crackme
總結(jié)
以上是生活随笔為你收集整理的160个Crackme029的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 160个Crackme028之对抗花指令
- 下一篇: 160个Crackme030之一元一次方