日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Crackme006 - 全新160个CrackMe学习系列(图文|视频|注册机源码)

發布時間:2024/9/21 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Crackme006 - 全新160个CrackMe学习系列(图文|视频|注册机源码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

知乎:逆向驛站

原文鏈接
CrackMe006 | 難度適中適合練手 |160個CrackMe深度解析(圖文+視頻+注冊機源碼)

crackme006,依然是delphi的,而且沒殼子,條線比較清晰,算法也不難,非常適合新入門的來練習.
快過年了,Crackme系列年前就停更在006吧,祝大家新年666 ,年后繼續

準備

【環境和工具】

  • win7/xp虛擬機環境

  • CrackMe006(aLoNg3x.1.exe)

  • ollydbg

  • Dededark

【學習層次】

  • 逆向分析程序驗證流程邏輯

  • 解密算法,寫注冊機

  • 積累Delphi程序逆向特點經驗

實戰圖文

最終效果展示

程序驗證流程邏輯圖

動態分析

1.程序觀察

旁邊既然有個help,我們當然要看了,四個彈框,有實際信息價值的是頭兩個,如圖

大體意思是,這個crackme的最終目標是隱藏ok和cancella按鈕來觀看完整的Ringzero logo。

2.控件ID,事件函數信息
依然老規矩,既然是delphi的程序,我們就先用dededark給控件信息和事件函數信息搜集出來

3.控件ID常量搜索法,打開入手點
程序開始是ok按鈕是禁用狀態,cancella按鈕是可以點擊的,那么我們就從cancella入手,兩個方向,你可以去找cancellaclick事件的函數入手,也可以從cancella控件ID入手,我這里選擇后者,因為最終目的是cancella要被隱藏起來,無論如何一定會用到控件ID

查找→所有常量→2D0(cancella按鈕控件ID),結果如下

一共有四個地方用到了這個控件ID,我們分別跟入查看哪個是我們想找的隱藏這個控件的反匯編代碼,從上至下依次如下



找到了入手點,我們開始上下閱讀函數塊,發現這正是cancellaclick事件函數

4.分析Cancellaclick中算法
在Cancellaclick函數入口處下斷點,然后用戶名輸入123456,注冊碼輸入654321,然后開始動態調試分析,F8步過分析如下圖

F7跟如算法call仔細分析,如下圖

這種不是摘要hash的,是直接可以逆推計算出注冊碼,根據以上算法的反匯編分析,寫出逆推注冊碼的源碼,如下

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("請輸入6-10字符長度的字符串,而且第一位不能是0!","逆向驛站提示您");return ;}/************************************************************************//* cancella點擊事件算法,可隱藏cancella按鈕,根據輸入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應該輸入的值

例如我們輸入的用戶名是123456,逆推注冊碼計算如下

  • "123456"的第五個字符是"5",asc碼是53,即十六進制0x35

  • 除以7余數是4,再加2是6

  • 6的階乘是6 * 5* 4* 3 2 1,等于720 ,即十六進制的0x2D0

  • 123456每個字符的asc碼相加是0x31+0x32+0x33+0x34+0x35+0x36,結果是0x135

  • 0x135 乘以0x2D0是0x36510

  • 0x36510比注冊碼的十六進制形態大0x7A69

  • 即注冊碼是0x36510-0x7A69 = 0x2EAA7 ,即十進制是191143

算出了注冊碼,我們來測試一下,如下動圖

Cancella按鈕消失

5.分析OK按鈕中算法
有了如上的過程作為經驗,我們"依葫蘆畫瓢",來進行ok按鈕中的算法分析,依然是okClick事件入口下斷,F8動態分析,結果如下

F7跟如算法call仔細分析,如下圖

分析后發現,這個算法是根據已經算出的注冊碼,再次要求用戶名合規,算法并不難,而且很敏感的看到0x41,0x41對應的asc字符是大寫字母A,而0x41加上的數字的取值范圍是0-0x19,即十進制0-25,那一看就知道,就是26個大寫字母范圍內了,這時候你可以變態的暴力枚舉也行,當然這個也是可以逆推出來,我們還是選擇逆推吧。源碼如下

/************************************************************************//* ok點擊事件算法,可隱藏ok按鈕,根據code推name *//************************************************************************/sprintf(szCode,"%d",nKey);nlen =strlen(szCode);szName1[nlen]='\0';//循環處理后,szName1就是要求的namefor (int k =nlen-1;k>=0;k--){szName1[k] = ((int)szCode[k] * (int)szCode[k] * (k+1))%0x19+0x41;}sprintf(szRes,"1.請在code處輸入%d,然后點擊cancella按鈕\r\n\r\n", nKey);sprintf(szRes+strlen(szRes),"2.cancella按鈕消失后,請在name處輸入%s,然后點擊ok按鈕\r\n\r\n", szName1);sprintf(szRes+strlen(szRes),"3.ok按鈕消失,注冊成功");SetDlgItemText(IDC_EDIT2,szRes);

我們剛輸入的注冊碼是191143,逆推出用戶名應該是"BXDEUG",驗證如下動圖

OK按鈕消失,至此全部搞定, 是不是感覺不難,去網盤中下載,試試吧

補充知識點

再CancellaClick事件算法中,有個階乘計算,函數內部反匯編代碼如下,可以作為知識點積累,下次看到這個第一時間就能反應過來,提高效率,逆向的老手往往是這種知識碎片很多,而且腦部搜索算法很精準

最后,喜歡這里的請推薦給你身邊的朋友吧(滲透測試、逆向破解、病毒分析、信息安全等)


文章中涉及軟件、課件、源碼等均在網盤,為避免網盤鏈接失效,公眾號中回復:網盤

歡迎關注微信公眾號:逆向驛站

相關文章

● CrackMe-005精解(下)

● CrackMe-005精解(上)

● CrackMe-004精解

● CrackMe-003精解

● CrackMe-002精解

● CrackMe-001精解

本期標簽:dededark|delphi反匯編|crackme|crackme6|crackme06

轉載于:https://www.cnblogs.com/nxyz/p/10334737.html

總結

以上是生活随笔為你收集整理的Crackme006 - 全新160个CrackMe学习系列(图文|视频|注册机源码)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。