160个Crackme023
文章目錄
- 查殼
- 分析程序
- 分析條件一
- 分析條件三
- 分析條件二
- 分析條件四
- 寫(xiě)出注冊(cè)機(jī)
查殼
目標(biāo)程序是一個(gè)用匯編寫(xiě)的帶圖形界面的程序,沒(méi)有殼
分析程序
直接查找錯(cuò)誤的字符串,來(lái)到錯(cuò)誤的提示處,可以看到這個(gè)cmp就是關(guān)鍵比較了
這里會(huì)比較eax是否等于0x10,而eax來(lái)自于0x403166,所以必須讓0x這個(gè)地址的值為0x10才能注冊(cè)成功
直接右鍵->查找所有常量
這里有四個(gè)地址分別對(duì)0x403166進(jìn)行了+4的操作,只要同時(shí)滿(mǎn)足四個(gè)條件,就能注冊(cè)成功了
分析條件一
首先來(lái)分析第一個(gè)地址的401093處的代碼
這里首先獲取用戶(hù)名,然后判斷用戶(hù)名長(zhǎng)度是否為零,不為零則對(duì)0x403166這個(gè)地址執(zhí)行+4操作,所以這個(gè)地方一定會(huì)斷下來(lái)
分析條件三
為什么先看條件三,因?yàn)槲抑耙呀?jīng)分析完了,這四個(gè)位置有一個(gè)先后順序的問(wèn)題,按照順序再來(lái)到00401493這個(gè)地址
這里會(huì)獲取輸入的序列號(hào),然后將序列號(hào)保存到0x403188這個(gè)地址,這個(gè)地址很重要,這個(gè)地址也是一定會(huì)斷下來(lái)的
分析條件二
再來(lái)看條件二,這里就是這個(gè)程序校驗(yàn)的算法了,校驗(yàn)過(guò)程如下
分析條件四
這里首先會(huì)取出0x403188的結(jié)果,然后加上0x9112478,接著比較eax是否為零,為零則403166這個(gè)位置加上4,從這里可以得出條件三的算法結(jié)果必須為0-0x9112478=0xf6eedb88
寫(xiě)出注冊(cè)機(jī)
根據(jù)條件三的結(jié)果,我們可以直接逆推出注冊(cè)機(jī)
int CalcKey() {char* name;unsigned long serial = 0xF6EEDB88;unsigned long *p;name = new char[20]{0};cout << "請(qǐng)輸入用戶(hù)名:";gets_s(name, strlen(name) - 1);for (int i= 0x10 - 1; i >= 0; i--){p = (unsigned long *)&name[i];serial ^= *p;serial--;}cout <<serial << endl;return 0; }輸入用戶(hù)名和計(jì)算的序列號(hào),注冊(cè)成功,破解完成
需要相關(guān)文件的可以到我的Github下載:https://github.com/TonyChen56/160-Crackme
總結(jié)
以上是生活随笔為你收集整理的160个Crackme023的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 160个Crackme022之故布疑阵
- 下一篇: Windbg新手入坑指南