最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

新160個CrackMe分析-第1組:1-10(下)

2022-09-03 10:20 作者:rkvir逆向工程學(xué)院  | 我要投稿

目錄:

?001-前言1

?002-abexcm52

?003-CrueheadCM33

?004-AcidBytes.24

?005-Andrénalin.15

?006-ArturDents-CrackMe26

?007-reg7

?008-Afkayas.18

?009-Boonz-KeygenMe1

?010-ceycey10

1-5(關(guān)注上期文章)

6. 006-ArturDents-CrackMe2

算法難度:??

爆破難度:?

信息收集

運(yùn)行情況:

經(jīng)典的用戶名序列號授權(quán)驗(yàn)證:

? ?


查殼與脫殼:

無殼:

? ?

查字符串:

有兩個提示信息,可以作為分析的入口點(diǎn):


? ?

查導(dǎo)入表:

很直觀,獲取用戶輸入,進(jìn)行驗(yàn)證,然后彈出對話框提示信息


? ?

調(diào)試分析

首先獲取Name,然后判斷Name長度是否符合要求:


? ?

然后獲取輸入的Serial,與使用Name生成的Serial進(jìn)行比對驗(yàn)證,彈框提示


? ?

暴力破解

算法分析

注冊碼生成算法,沒啥好說的

? #include


int main()

{

? ? char Buffer[100] = { 0 };

? ? std::cin >> Buffer;


? ? for (int i = strlen(Buffer),j=0; i >0; i--,j++)

? ? {

? ? ? ? Buffer[j] = Buffer[j] - i;

? ? }

? ? std::cout << Buffer << std::endl;

}

總結(jié)

平平無奇的最簡單CM

7. 007-reg

算法難度:?

爆破難度:?

信息收集

運(yùn)行情況:

經(jīng)典的用戶名+序列號授權(quán)驗(yàn)證:


? ?

查殼與脫殼:

Delphi編寫的32位GUI程序,無殼


? ?

查字符串:

大概看了一下,字符串里有個reg.dll,但CM文件只是單一的exe,可能存在釋放文件

?


調(diào)試分析

對于Delphi程序,除了直接強(qiáng)行分析之外,還可以借助Delphi輔助分析工具:IDR(吾愛論壇上有)

因?yàn)槭谴翱诔绦颍圆榇翱诘南嚓P(guān)內(nèi)容:


? ?

直接查看點(diǎn)擊Ok按鈕的內(nèi)容:大概就是把用戶輸入的用戶名和序列號寫入到了reg.dll文件中,也就是說這是個dll后綴的文本文件


? ?

提示語是重啟軟件后驗(yàn)證注冊碼,說明這是一種重啟驗(yàn)證,在啟動的時候進(jìn)行校驗(yàn)

那么接下來查看創(chuàng)建窗口時的代碼:


? ?

這個調(diào)用的函數(shù):sub_0045D0F4,這應(yīng)該就是一個校驗(yàn)函數(shù),根據(jù)返回al的值是否為0,來進(jìn)行判斷跳轉(zhuǎn),這個跳轉(zhuǎn)應(yīng)該是關(guān)鍵跳了


? ?

暴力破解

修改關(guān)鍵跳:


? ?

然后跑起來:


? ?

算法分析

接下來看看具體校驗(yàn)call做了哪些事情:sub_45D0F4

首先獲取參數(shù)之后,計算SN長度,SN長度需要是16個字符:


? ?

然后接下來是個循環(huán),遍歷SN每個字符,檢查合法字符,這里允許的字符是0-9數(shù)字和A-F字母


? ?

然后緊接著進(jìn)行一頓處理,處理用戶名得到一個加密編碼后的值


? ?

值通過x86dbg動態(tài)調(diào)試觀察:計算的結(jié)果是8B45677A3AEBE84C


? ?

然后接下來,程序連續(xù)走了兩趟相同的操作,分別是對剛剛通過用戶名計算出來的結(jié)果和我們輸入的SN,然后將結(jié)果進(jìn)行對比,返回


? ?

這里具體生成用戶名對應(yīng)SN的代碼過于復(fù)雜,暫時還寫不出來注冊機(jī),但這里程序在分析過程中會出現(xiàn)SN真碼明文,這里也就到此結(jié)束了,使用該SN打開程序:


? ?

總結(jié)

Delphi程序逆向練習(xí),借助工具IDR可以很方便的識別Delphi函數(shù),這個CM使用了經(jīng)典的重啟驗(yàn)證,讓驗(yàn)證函數(shù)在窗口創(chuàng)建前進(jìn)行驗(yàn)證,注冊機(jī)較為復(fù)雜,暫時還寫不出來

?參考資料

– [1] 新160個CrackMe算法分析-007-Reg_嗶哩嗶哩_bilibili

8. 008-Afkayas.1

算法難度:??

爆破難度:?

信息收集

運(yùn)行情況:

輸入用戶名,序列號,點(diǎn)OK進(jìn)行驗(yàn)證


? ?

查殼與脫殼:

無殼,程序由VB5.0編寫


? ?

調(diào)試分析

這個程序以前做CM的時候分析過,以x86dbg+IDA進(jìn)行逆向分析的,詳情見參考

這次就直接拖VBDec里用專門的VB反編譯軟件進(jìn)行分析

這個程序有用的代碼就一個OK按鈕的點(diǎn)擊事件,總共就這么幾行:


? ?

很神奇一點(diǎn)就是,這點(diǎn)之前沒發(fā)現(xiàn),這里藏了一個文本框,我就說代碼里咋三個文本框呢,這個是用來保存數(shù)據(jù)的


? ?

算法分析

有幾行看不懂啥意思,直接x86dbg動態(tài)跟蹤看看效果,整體注釋:

? Private Sub OK_Click() '402310

? loc_004023D3: call var_8004 = var_C4(Me, Me, 0, 0, 0)? ? ? ? ? ? ?// 獲取用戶名輸入

? loc_00402415: var_8008 = Len(var_C4(Me, Me, 0, 0, 0).MousePointer)? ? ? ? // 計算用戶名長度

? loc_0040242D: var_800C = Asc(CrackMe.Text1.Text)? ? ? ? ? ? ? // 取用戶名首字符的ASCII碼

? loc_0040243F: call var_8010 = global_004040E0(var_8008*97531+var_800C)? ? // 97531*用戶名長度+首字符的ASCII碼,結(jié)果轉(zhuǎn)換成字符串

? loc_00402458: CrackMe.RegSerial.Text = var_8010? ? ? ? ? ? ? ?// 設(shè)置這個文本框的值

? loc_004024DE: call var_8014 = var_C0(Me)

? loc_0040258B: If (CrackMe.Serial.Text = "AKA-" & var_C0(Me).MousePointer) + 1 Then? // 判斷輸入的序列號是否為AKA-拼接剛剛計算的值

? loc_004025C4:? ?var_8028 = MsgBox("You Get It" & vbCrLf & "KeyGen It Now", 0, var_4C, var_5C, var_6C)

? loc_004025E5: Else

? loc_0040261C:? ?var_8034 = MsgBox("You Get Wrong" & vbCrLf & "Try Again", 0, var_4C, var_5C, var_6C)

? loc_0040263B: End If

? loc_00402652: GoTo loc_0040269E

? loc_0040269D: Exit Sub

? loc_0040269E: ' Referenced from: 00402652

End Sub

總結(jié)

依然是很簡單的一次VB逆向

– [1] 160個Crackme系列-002-Afkayas.1 - 我可是會飛的啊 (kn0sky.com)

9. 009-Boonz-KeygenMe1

算法難度:???

爆破難度:?

信息收集

運(yùn)行情況:

神奇的審美,用戶名+序列號驗(yàn)證程序


? ?

查殼與脫殼:

無殼程序


? ?

查字符串:

有一些提示字符串,提示輸入正確失敗的,還有錯誤提示:Name需要是4-50個字符長


? ?

調(diào)試分析

本次的目標(biāo)是分析出算法寫注冊機(jī),所以就沒有爆破環(huán)節(jié)了

從提示字符串Hello,Mr. Goodboy入手開始分析,交叉引用找到校驗(yàn)函數(shù):



先后獲取了用戶輸入的Name和Serial,然后進(jìn)入校驗(yàn)函數(shù)

? ?

算法分析

校驗(yàn)函數(shù)就是算法的所在

首先判斷用戶名長度是否合法,長度4--50內(nèi)


? ?

接下來進(jìn)行第一組計算,結(jié)果保存起來


? ?

然后進(jìn)行第二組運(yùn)算:圈出來的三行純屬干擾,無用


? ?

然后進(jìn)行第三組運(yùn)算:


? ?

然后再往下就是拼接字符串進(jìn)行比對的環(huán)節(jié)了:


? ?

已經(jīng)知道Serial是怎么算的了,接下來寫注冊機(jī)

注冊機(jī)代碼

? #define _CRT_SECURE_NO_WARNINGS

#include


int main()

{

? ? char name[50] = { 0 };

? ? char serial[50] = { 0 };

? ? int nameLength = 0;


? ? std::cin >> name;

? ? nameLength = strlen(name);

? ? if (nameLength < 4 || nameLength > 50) {

? ? ? ? std::cout << "Name Length Invalid" << std::endl;

? ? ? ? return 0;

? ? }


? ? // 第一輪計算

? ? unsigned int res_1 = 0;

? ? for (auto a = 0; name[a];a++) {

? ? ? ? char tmp = name[a];

? ? ? ? tmp -= 0x19;

? ? ? ? res_1 -= tmp;

? ? }


? ? // 第二輪計算

? ? unsigned int res_2 = res_1 * res_1 * res_1;


? ? // 第三輪計算

? ? unsigned int res_3 = 0x40e0f8 * 0x40e0f8 - 0x40e0f8;


? ? sprintf(serial, "Bon-%lX-%lX-%lX", res_1,res_2,res_3);

? ? std::cout << serial << std::endl;

? ? return 0;

}

? 計算結(jié)果:

? Name = 1234

Serial = Bon-FFFFFF9A-FFEFCEA8-41720F48

程序運(yùn)行結(jié)果:


? ?

總結(jié)

非常簡單的序列號校驗(yàn)算法分析,中間的干擾是無用計算,忽視即可

10. 010-ceycey

算法難度:?

爆破難度:?

信息收集

運(yùn)行情況:

輸入密碼登錄:


? ?

查殼與脫殼:

有UPX殼,使用ESP定律大法即可,這里不再啰嗦


? ?

脫殼后:可以看到是Delphi5寫的GUI程序


? ?

調(diào)試分析

抄起IDR就是干,明文硬編碼密碼:ULTRADMA............................................................,如果輸入錯誤,則點(diǎn)擊按鈕無事發(fā)生,輸入正確會彈窗


? ?

沒啥可爆破和算法分析的:


? ?

總結(jié)

可以當(dāng)成一次Upx脫殼練習(xí)


新160個CrackMe分析-第1組:1-10(下)的評論 (共 條)

分享到微博請遵守國家法律
辽中县| 定南县| 芦溪县| 邵东县| 仲巴县| 大埔区| 定远县| 洪江市| 镇平县| 内黄县| 泉州市| 大安市| 通道| 镇康县| 绍兴县| 鹤峰县| 惠安县| 广安市| 德化县| 开阳县| 祁门县| 天祝| 玉树县| 西和县| 普定县| 曲阜市| 游戏| 吐鲁番市| 东乡族自治县| 沂南县| 麻城市| 葵青区| 永福县| 克什克腾旗| 来安县| 张家港市| 定日县| 阳泉市| 瓮安县| 涞源县| 会理县|