Crackme006 - 全新160个CrackMe学习系列(图文|视频|注册机源码)
知乎:逆向驛站
原文鏈接
CrackMe006 | 難度適中適合練手 |160個(gè)CrackMe深度解析(圖文+視頻+注冊(cè)機(jī)源碼)
crackme006,依然是delphi的,而且沒(méi)殼子,條線比較清晰,算法也不難,非常適合新入門的來(lái)練習(xí).
快過(guò)年了,Crackme系列年前就停更在006吧,祝大家新年666 ,年后繼續(xù)
準(zhǔn)備
【環(huán)境和工具】
win7/xp虛擬機(jī)環(huán)境
CrackMe006(aLoNg3x.1.exe)
ollydbg
Dededark
【學(xué)習(xí)層次】
逆向分析程序驗(yàn)證流程邏輯
解密算法,寫注冊(cè)機(jī)
積累Delphi程序逆向特點(diǎn)經(jīng)驗(yàn)
實(shí)戰(zhàn)圖文
最終效果展示
程序驗(yàn)證流程邏輯圖
動(dòng)態(tài)分析
1.程序觀察
旁邊既然有個(gè)help,我們當(dāng)然要看了,四個(gè)彈框,有實(shí)際信息價(jià)值的是頭兩個(gè),如圖
大體意思是,這個(gè)crackme的最終目標(biāo)是隱藏ok和cancella按鈕來(lái)觀看完整的Ringzero logo。
2.控件ID,事件函數(shù)信息
依然老規(guī)矩,既然是delphi的程序,我們就先用dededark給控件信息和事件函數(shù)信息搜集出來(lái)
3.控件ID常量搜索法,打開(kāi)入手點(diǎn)
程序開(kāi)始是ok按鈕是禁用狀態(tài),cancella按鈕是可以點(diǎn)擊的,那么我們就從cancella入手,兩個(gè)方向,你可以去找cancellaclick事件的函數(shù)入手,也可以從cancella控件ID入手,我這里選擇后者,因?yàn)樽罱K目的是cancella要被隱藏起來(lái),無(wú)論如何一定會(huì)用到控件ID
查找→所有常量→2D0(cancella按鈕控件ID),結(jié)果如下
一共有四個(gè)地方用到了這個(gè)控件ID,我們分別跟入查看哪個(gè)是我們想找的隱藏這個(gè)控件的反匯編代碼,從上至下依次如下
找到了入手點(diǎn),我們開(kāi)始上下閱讀函數(shù)塊,發(fā)現(xiàn)這正是cancellaclick事件函數(shù)
4.分析Cancellaclick中算法
在Cancellaclick函數(shù)入口處下斷點(diǎn),然后用戶名輸入123456,注冊(cè)碼輸入654321,然后開(kāi)始動(dòng)態(tài)調(diào)試分析,F8步過(guò)分析如下圖
F7跟如算法call仔細(xì)分析,如下圖
這種不是摘要hash的,是直接可以逆推計(jì)算出注冊(cè)碼,根據(jù)以上算法的反匯編分析,寫出逆推注冊(cè)碼的源碼,如下
char szName1[128] = {0};char szCode[128] ={0} ;char szRes[256] ={0} ;int nKey = 0 ;int nlen = 0;int nTemp = 0 ;GetDlgItemText(IDC_EDIT1,szName1,128);nlen = strlen(szName1);if (nlen<=5 || nlen >10 || szName1[0] == 0x30){MessageBox("請(qǐng)輸入6-10字符長(zhǎng)度的字符串,而且第一位不能是0!","逆向驛站提示您");return ;}/************************************************************************//* cancella點(diǎn)擊事件算法,可隱藏cancella按鈕,根據(jù)輸入name推code *//************************************************************************/nKey = ((int)szName1[4])%7+2 ;nTemp = nKey ;//階乘for (int i=1;i<nTemp;i++){nKey = nKey * i;}nTemp = nKey ;nKey = 0 ;//求和for (int j =0;j<nlen ;j++){nKey = nKey + nTemp * ((int)szName1[j]);}//得出正確codenKey = nKey - 0x7a69 ;//nKey值就是code應(yīng)該輸入的值例如我們輸入的用戶名是123456,逆推注冊(cè)碼計(jì)算如下
"123456"的第五個(gè)字符是"5",asc碼是53,即十六進(jìn)制0x35
除以7余數(shù)是4,再加2是6
6的階乘是6 * 5* 4* 3 2 1,等于720 ,即十六進(jìn)制的0x2D0
123456每個(gè)字符的asc碼相加是0x31+0x32+0x33+0x34+0x35+0x36,結(jié)果是0x135
0x135 乘以0x2D0是0x36510
0x36510比注冊(cè)碼的十六進(jìn)制形態(tài)大0x7A69
即注冊(cè)碼是0x36510-0x7A69 = 0x2EAA7 ,即十進(jìn)制是191143
算出了注冊(cè)碼,我們來(lái)測(cè)試一下,如下動(dòng)圖
Cancella按鈕消失
5.分析OK按鈕中算法
有了如上的過(guò)程作為經(jīng)驗(yàn),我們"依葫蘆畫(huà)瓢",來(lái)進(jìn)行ok按鈕中的算法分析,依然是okClick事件入口下斷,F8動(dòng)態(tài)分析,結(jié)果如下
F7跟如算法call仔細(xì)分析,如下圖
分析后發(fā)現(xiàn),這個(gè)算法是根據(jù)已經(jīng)算出的注冊(cè)碼,再次要求用戶名合規(guī),算法并不難,而且很敏感的看到0x41,0x41對(duì)應(yīng)的asc字符是大寫字母A,而0x41加上的數(shù)字的取值范圍是0-0x19,即十進(jìn)制0-25,那一看就知道,就是26個(gè)大寫字母范圍內(nèi)了,這時(shí)候你可以變態(tài)的暴力枚舉也行,當(dāng)然這個(gè)也是可以逆推出來(lái),我們還是選擇逆推吧。源碼如下
/************************************************************************//* ok點(diǎn)擊事件算法,可隱藏ok按鈕,根據(jù)code推name *//************************************************************************/sprintf(szCode,"%d",nKey);nlen =strlen(szCode);szName1[nlen]='\0';//循環(huán)處理后,szName1就是要求的namefor (int k =nlen-1;k>=0;k--){szName1[k] = ((int)szCode[k] * (int)szCode[k] * (k+1))%0x19+0x41;}sprintf(szRes,"1.請(qǐng)?jiān)赾ode處輸入%d,然后點(diǎn)擊cancella按鈕\r\n\r\n", nKey);sprintf(szRes+strlen(szRes),"2.cancella按鈕消失后,請(qǐng)?jiān)趎ame處輸入%s,然后點(diǎn)擊ok按鈕\r\n\r\n", szName1);sprintf(szRes+strlen(szRes),"3.ok按鈕消失,注冊(cè)成功");SetDlgItemText(IDC_EDIT2,szRes);我們剛輸入的注冊(cè)碼是191143,逆推出用戶名應(yīng)該是"BXDEUG",驗(yàn)證如下動(dòng)圖
OK按鈕消失,至此全部搞定, 是不是感覺(jué)不難,去網(wǎng)盤中下載,試試吧
補(bǔ)充知識(shí)點(diǎn)
再CancellaClick事件算法中,有個(gè)階乘計(jì)算,函數(shù)內(nèi)部反匯編代碼如下,可以作為知識(shí)點(diǎn)積累,下次看到這個(gè)第一時(shí)間就能反應(yīng)過(guò)來(lái),提高效率,逆向的老手往往是這種知識(shí)碎片很多,而且腦部搜索算法很精準(zhǔn)
最后,喜歡這里的請(qǐng)推薦給你身邊的朋友吧(滲透測(cè)試、逆向破解、病毒分析、信息安全等)
文章中涉及軟件、課件、源碼等均在網(wǎng)盤,為避免網(wǎng)盤鏈接失效,公眾號(hào)中回復(fù):網(wǎng)盤
歡迎關(guān)注微信公眾號(hào):逆向驛站
相關(guān)文章
● CrackMe-005精解(下)
● CrackMe-005精解(上)
● CrackMe-004精解
● CrackMe-003精解
● CrackMe-002精解
● CrackMe-001精解
本期標(biāo)簽:dededark|delphi反匯編|crackme|crackme6|crackme06
轉(zhuǎn)載于:https://www.cnblogs.com/nxyz/p/10334737.html
總結(jié)
以上是生活随笔為你收集整理的Crackme006 - 全新160个CrackMe学习系列(图文|视频|注册机源码)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Mac免费使用MAMP搭建本地开发环境
- 下一篇: [bzoj 2555]Substring