摘要:所以按鈕消失的方法是跟一模一樣的,只是他消失后,不再顯示其他按鈕而已,至此注冊(cè)成功,的標(biāo)題也溫順的變成了了。
作者:逆向驛站
微信公眾號(hào):逆向驛站
知乎:逆向驛站
crackme007,是006的升級(jí)版,程序開(kāi)發(fā)者給出的難度是3星,可能是迷惑有點(diǎn)多?個(gè)人覺(jué)得條線(xiàn)還是比較清晰,難度也不大,依然適合新手準(zhǔn)備
【環(huán)境和工具】
win7/xp虛擬機(jī)環(huán)境
CrackMe007(aLoNg3x.2.exe)
ollydbg
Dededark
【學(xué)習(xí)層次】
逆向分析程序驗(yàn)證流程邏輯
解密算法,寫(xiě)注冊(cè)機(jī)
積累Delphi程序逆向特點(diǎn)經(jīng)驗(yàn)
實(shí)戰(zhàn)圖文最終效果展示
程序驗(yàn)證流程邏輯圖
動(dòng)態(tài)分析
1.程序觀(guān)察
crackme006的升級(jí)版,最終目標(biāo)是一致的,均是要求給下方的藍(lán)色logo無(wú)遮蓋的顯示出來(lái),也就是說(shuō)要給這個(gè)區(qū)域的控件全部隱藏,程序界面如下圖
同時(shí)可見(jiàn)開(kāi)發(fā)crackme的和學(xué)習(xí)crackme的目標(biāo)和標(biāo)準(zhǔn)是一致的,path的方式是不被認(rèn)可的,即不可爆破,crackme若是個(gè)美貌女子,則應(yīng)征服其心,切不可霸王硬上弓。
2.控件ID,事件函數(shù)信息
依然老規(guī)矩,既然是delphi的程序,我們就先用dededark給控件信息和事件函數(shù)信息搜集出來(lái)
3.控件ID常量搜索法,打開(kāi)入手點(diǎn)
程序開(kāi)始只有一個(gè)Register按鈕,對(duì)應(yīng)上圖,其控件ID是2CC,那么我們依然就從2CC常量出發(fā)
查找→所有常量→2CC(Register按鈕控件ID),結(jié)果如下
跟入第一個(gè),根據(jù)之前的對(duì)dephi程序逆向的經(jīng)驗(yàn),應(yīng)該可以一眼看出,這里的反匯編代碼,功能是:dl的值0是隱藏,1是顯示,如下圖
可以看出,若是程序如期執(zhí)行到這里,則隱藏Register按鈕,并顯示Again按鈕,那么我們?cè)谶@個(gè)代碼的函數(shù)塊入口處下斷點(diǎn),來(lái)動(dòng)態(tài)分析這個(gè)函數(shù)塊的邏輯流程,如下圖
可以看到,這個(gè)函數(shù)實(shí)際就是點(diǎn)擊Register按鈕的事件函數(shù),首先會(huì)對(duì)code進(jìn)行驗(yàn)證,若是純數(shù)字則跳到下方,否則彈框報(bào)錯(cuò),并給[0x445830]賦值,看似多此一舉,實(shí)則是必須過(guò)程,原因后面會(huì)提到,如果輸入的是純數(shù)字,則執(zhí)行以下流程,如圖
在這里我們看到了算法函數(shù),算法函數(shù)需要三個(gè)參數(shù)(用戶(hù)名、code、[0x445830]的值),算法函數(shù)若是合規(guī),則隱藏Register按鈕,顯示Again按鈕。那么我們就F7跟入算法函數(shù)去研究算法
4.分析算法
在分析算法前,需要對(duì)[0x445830]這個(gè)全局變量值做一個(gè)說(shuō)明
初始值是0
經(jīng)過(guò)動(dòng)態(tài)分析(請(qǐng)自行動(dòng)手)得出,對(duì)它賦值的觸發(fā)條件是,需要code輸入至少6個(gè)英文字母,然后點(diǎn)擊Regsiter按鈕
輸入AAAAAA,它會(huì)被賦值固定值0x1686
既然是這種輸入輸出都可控的全局變量值,我們就不去糾結(jié)其算法什么的了,當(dāng)然如果你想去研究分析,那也是值得提倡得
然而為什么非得多此一舉得對(duì)他賦值呢?因?yàn)楹竺娴煤诵乃惴ㄖ?,它的值將作為一個(gè)乘數(shù),若是0的話(huà),那么算法的最終結(jié)果無(wú)論如何都會(huì)是0,0是無(wú)法完成算法合規(guī)的,簡(jiǎn)單的說(shuō),若是這個(gè)值是0,則不可能完成注冊(cè),所以要對(duì)他進(jìn)行這種看似多此一舉的隱藏賦值。是不是類(lèi)似開(kāi)啟隱藏奶牛關(guān),呵呵!
后面得所有分析中我們都按照,code輸入AAAAAA后[0x445830]被賦值0x1686為準(zhǔn)
我們來(lái)分析算法,如圖
可見(jiàn)核心算法是
首先要求用戶(hù)名要大于4個(gè)字符,為了防止溢出,我寫(xiě)的注冊(cè)機(jī)就硬性規(guī)定為5個(gè)字符
根據(jù)輸入的用戶(hù)名,經(jīng)過(guò)兩次嵌套循環(huán),和[0x445830]的值,即我們控制其值為0x1686,共同計(jì)算出一個(gè)值,暫時(shí)記為nTemp
nTemp = nTemp % 0xA2C2A
第二次輸入的注冊(cè)碼要求是純數(shù)字,純數(shù)字作為10進(jìn)制的數(shù)字型值,記為nCode
則公式是nCode/0x59+nCode%0x50+1 = nTemp
這種不是摘要hash的,是直接可以逆推計(jì)算出注冊(cè)碼,根據(jù)以上分析,寫(xiě)出逆推注冊(cè)碼的源碼,如下
//code輸入AAAAAA給[0x445830]賦的值 int nKey = 0x1686; char szRes[1024] = {0}; char szName[32] = {0}; int nCode = 0; int nTemp = 0; GetDlgItemText(IDC_EDIT1,szName,31); if (strlen(szName)!=5) { MessageBox("請(qǐng)輸入5字符長(zhǎng)度的字符串","逆向驛站提示您"); } else { //根據(jù)name字符串計(jì)算 for (int i =1;i<=5;i++) { for (int j =5;j>=1;j--) { nTemp = nTemp + (int)szName[i-1] * (int)szName[j-1] * nKey; } } } //取模 nTemp = nTemp%0xA2C2A ; //反推code nCode = (0x50 - ((nTemp -1)*0x59 % 0x50))+(nTemp-1) * 0x59 ; sprintf(szRes,"1.把注冊(cè)機(jī)的五字符長(zhǎng)度用戶(hù)名輸入nome處 "); sprintf(szRes+strlen(szRes),"2.請(qǐng)?jiān)赾ode處輸入AAAAAA,然后點(diǎn)擊Register按鈕,彈框確認(rèn)關(guān)閉即可 "); sprintf(szRes+strlen(szRes),"3.請(qǐng)?jiān)赾ode處輸入%d,然后點(diǎn)擊Register按鈕 ", nCode); sprintf(szRes+strlen(szRes),"4.Register按鈕消失,again按鈕出現(xiàn) "); sprintf(szRes+strlen(szRes),"5.請(qǐng)?jiān)俅卧赾ode處輸入AAAAAA,然后點(diǎn)擊again按鈕,彈框確認(rèn)關(guān)閉即可 "); sprintf(szRes+strlen(szRes),"6.請(qǐng)?jiān)俅卧赾ode處輸入%d,然后點(diǎn)擊again按鈕,按鈕消失,注冊(cè)成功 ", nCode); SetDlgItemText(IDC_EDIT2,szRes);
crackme注冊(cè)機(jī)的完整源碼均在網(wǎng)盤(pán)
5.分析Again按鈕事件函數(shù)
我們現(xiàn)在已經(jīng)成功的隱藏了Register按鈕,但是又出來(lái)了一個(gè)Again按鈕,有了如上的過(guò)程作為經(jīng)驗(yàn),我們"依葫蘆畫(huà)瓢",對(duì)Again按鈕進(jìn)行分析,結(jié)果發(fā)現(xiàn),其實(shí)驗(yàn)證流程完全是重復(fù)了一遍Regsiter按鈕,Again按鈕點(diǎn)擊事件逆向代碼如下
可以看到,給[0x445830]賦值的隱藏算法和最后的合規(guī)核心算法,均自動(dòng)顯示出來(lái)了中文標(biāo)簽,這就是習(xí)慣做標(biāo)簽的好處,之所以會(huì)顯示出來(lái),那證明跟上方的Regsiter部分的兩個(gè)算法均調(diào)用的相同的算法函數(shù),參數(shù)相同,算法相同,那么結(jié)果一定相同了。
所以Again按鈕消失的方法是跟Register一模一樣的,只是他消失后,不再顯示其他按鈕而已,至此注冊(cè)成功,Crackme007的標(biāo)題也溫順的變成了Crackme by "your name"了。
是不是有如開(kāi)頭所說(shuō)的征服美女的快感?去網(wǎng)盤(pán)中下載,試試吧
文章中涉及軟件、課件、源碼等均在網(wǎng)盤(pán),為避免網(wǎng)盤(pán)鏈接失效,公眾號(hào)中回復(fù):網(wǎng)盤(pán)
歡迎關(guān)注微信公眾號(hào):逆向驛站
相關(guān)文章
● CrackMe-006精解
● CrackMe-005精解(下)
● CrackMe-005精解(上)
● CrackMe-004精解
● CrackMe-003精解
● CrackMe-002精解
● CrackMe-001精解
標(biāo)簽:逆向|破解|反匯編|olldbg|滲透測(cè)試|病毒分析|網(wǎng)絡(luò)安全|區(qū)塊鏈
本期標(biāo)簽:dededark|delphi反匯編|crackme|crackme7|crackme07
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/11456.html
摘要:作者逆向驛站微信公眾號(hào)逆向驛站知乎逆向驛站上篇說(shuō)了具體方法,下篇來(lái)發(fā)逆向分析過(guò)程,看看老夫是如何得到上篇的具體方法的準(zhǔn)備環(huán)境和工具虛擬機(jī)環(huán)境專(zhuān)用脫殼器學(xué)習(xí)層次爆破,但是這個(gè)作者聲明了,爆破他是不認(rèn)可的解密流程,寫(xiě)注冊(cè)機(jī)積累程序逆向特點(diǎn)經(jīng)驗(yàn)詳 作者:逆向驛站微信公眾號(hào):逆向驛站知乎:逆向驛站showImg(https://segmentfault.com/img/bVbnHJT?w=11...
摘要:作者逆向驛站微信公眾號(hào)逆向驛站知乎逆向驛站依然是的,而且沒(méi)殼子,條線(xiàn)比較清晰,算法也不難,非常適合新入門(mén)的來(lái)練習(xí)快過(guò)年了,系列年前就停更在吧,祝大家新年年后繼續(xù)準(zhǔn)備環(huán)境和工具虛擬機(jī)環(huán)境學(xué)習(xí)層次逆向分析程序驗(yàn)證流程邏輯解密算法,寫(xiě)注冊(cè)機(jī)積累程 作者:逆向驛站微信公眾號(hào):逆向驛站知乎:逆向驛站showImg(https://segmentfault.com/img/bVbnUo0?w=11...
閱讀 1954·2021-11-22 14:44
閱讀 1683·2021-11-02 14:46
閱讀 3678·2021-10-13 09:40
閱讀 2611·2021-09-07 09:58
閱讀 1642·2021-09-03 10:28
閱讀 1672·2019-08-29 15:30
閱讀 991·2019-08-29 15:28
閱讀 1482·2019-08-26 12:20