160个Crackme034拆解KeyFile验证升级版
文章目錄
- 查殼
- 分析程序
- 用戶名算法分析(前14位)
- 序列號(hào)算法分析(后4位)
- 算法總結(jié)
- 注冊(cè)機(jī)探索
- 驗(yàn)證結(jié)果
這個(gè)Crackme和上一個(gè)是同一個(gè)作者,保護(hù)方式是KeyFile。難度兩顆星
查殼
同樣是匯編寫的,作者偽造了一個(gè)Delphi的OEP。
分析程序
這個(gè)軟件的KeyFile保護(hù)沒(méi)有必要用監(jiān)控工具了。驗(yàn)證直接就在入口處,直接單步往下跟就可以了
首先檢測(cè)CRACKME3.KEY這個(gè)文件是否存在
然后從文件中讀取0x12個(gè)字節(jié),并檢測(cè)文件內(nèi)容是否少于0x12個(gè)字節(jié),
那么我們就偽造一個(gè)CRACKME3.KEY文件,并且再里面隨便輸18個(gè)字母
然后將文件內(nèi)容放入堆棧,開(kāi)始計(jì)算前14個(gè)字節(jié)。
這個(gè)文件總共需要18個(gè)字節(jié),前14個(gè)字節(jié)為用戶名,后4個(gè)字節(jié)為序列號(hào)。每一部分都有一個(gè)算法,下面分析用戶名算法部分
用戶名算法分析(前14位)
用戶名算法的校驗(yàn)過(guò)程如下:
序列號(hào)算法分析(后4位)
接下來(lái)將0x14個(gè)字節(jié)的文件內(nèi)容壓入堆棧,然后執(zhí)行0040133C這個(gè)函數(shù)
這個(gè)函數(shù)的作用就算將文件內(nèi)容右移14位,也就是去掉前14位用戶名的部分,然后將最后四位賦值給eax
最后比較后四位是否等于[0x4020F9],也就是前12位用戶名計(jì)算的結(jié)果,根據(jù)比較的結(jié)果提示是否破解成功
算法總結(jié)
總結(jié)一下前面的分析,文件內(nèi)容必須是18個(gè)字符,前14位是用戶名,后4位是序列號(hào)。序列號(hào)必須等于用戶名計(jì)算的結(jié)果。
注冊(cè)機(jī)探索
接下來(lái)寫出注冊(cè)機(jī),代碼如下:
#include <iostream> #include <windows.h> using namespace std;int main() {char username[15] = { 0 };char serial[5] = { 0 };int temp = 0x41;int result = 0;printf("請(qǐng)輸入用戶名,長(zhǎng)度必須為14:");scanf_s("%s", username, 15);for (int i = 0; i < 14; i++){username[i] ^= temp;result += username[i];temp++;}result ^= 0x12345678;char* p = (char*)&result;for (int i = 0; i < 4; i++){printf("%c", p[i]);}printf("\n");system("pause");return 0; }驗(yàn)證結(jié)果
隨便輸入一個(gè)12位的用戶名,然后把計(jì)算出來(lái)的序列號(hào)復(fù)制過(guò)去替換后四位,亂碼不需要管,再打開(kāi)目標(biāo)程序
破解完成,最后需要相關(guān)文件可以到我的Github下載:
https://github.com/TonyChen56/160-Crackme
總結(jié)
以上是生活随笔為你收集整理的160个Crackme034拆解KeyFile验证升级版的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 160个Crackme033
- 下一篇: 160个Crackme035