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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

逆向project实战--Acid burn

發(fā)布時(shí)間:2023/12/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 逆向project实战--Acid burn 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

0x00 序言

這是第二次破解 crackme 小程序,感覺(jué)明顯比第一次熟練。破解過(guò)程非常順利,差點(diǎn)兒是分分鐘就能夠找到正確的 serial,可是我們的目標(biāo)是破解計(jì)算過(guò)程。以下將具體介紹。

0x01 初次執(zhí)行

剛開(kāi)始拿到 crackme 先執(zhí)行程序。看看有哪些明顯的特征。或者有哪些任務(wù)須要完畢:

雙擊程序后彈框,顯然第一個(gè)任務(wù)就是把這個(gè)框框弄掉,我們繼續(xù)執(zhí)行:

這個(gè)小程序比上次的要復(fù)雜,有兩個(gè) serial ,我們先看看左邊的:


不出意外。猜錯(cuò)了,有明顯的彈框和失敗字符串作為特征。我們接著看右邊的:

不出意外,再次失敗,依舊是彈框。

0x02 開(kāi)始調(diào)試

1、明白目標(biāo)
通過(guò)上面的執(zhí)行分析,我們須要干掉第一個(gè)彈框,以及興許的兩個(gè) serial 。同一時(shí)候我們發(fā)現(xiàn)三者的共同特征為彈框。所以首先攔截彈框函數(shù):
右鍵代碼區(qū)選擇 “serach for” => “All intermodules calls”:

在新窗體中輸入 messageboxa,右鍵。選擇”Set breakpoint on every call to MessageBoxA”:

這樣我們就給全部調(diào)用彈框函數(shù)的地方下了斷點(diǎn),接著回到代碼區(qū)執(zhí)行程序。

2、調(diào)用者
按 F9 執(zhí)行到彈框函數(shù)處,我們發(fā)現(xiàn)此時(shí)的棧頂就是第一次彈框時(shí)的字符串的地址,于是我們須要找到那個(gè)調(diào)用彈框函數(shù)的函數(shù)。叫做調(diào)用者。

這里我們往上看,找到當(dāng)前這個(gè)函數(shù)的入口并下斷點(diǎn):

然后我們 Ctrl + F2 又一次加載程序。F9 執(zhí)行到剛才下斷點(diǎn)的入口:

此時(shí)棧頂就是調(diào)用者執(zhí)行call指令時(shí)保存的返回點(diǎn)。我們?cè)诖a區(qū)中查找這個(gè)地址(42F79C),注意單擊代碼區(qū),按 Ctrl + G 進(jìn)行查找:

看見(jiàn)了嗎,就是這個(gè)函數(shù),僅僅有幾句代碼。以下我們就來(lái)消滅它。

3、去掉彈框
調(diào)用了函數(shù)才會(huì)彈框,我們的想法就是讓它不調(diào)用函數(shù),那么直接讓函數(shù)返回是最簡(jiǎn)單的方式。于是我們把函數(shù)入口處的第一條指令改成RETN 就可以:
單擊指令,按一下空格鍵能夠改動(dòng):

此時(shí)我們能夠把改動(dòng)保存到文件里:
右鍵指令,選擇 “Copy to executable” => “selection”:

在新窗體中右鍵選擇 “Save file”:

然后保存:

執(zhí)行新的程序發(fā)現(xiàn)第一次的彈框成功消失。

4、破解右側(cè)serial
接下來(lái)我們轉(zhuǎn)到右邊的 serial,輸入隨意字符串。然后點(diǎn)擊button:
我們發(fā)現(xiàn)程序停在了彈框函數(shù)的入口:

此時(shí)棧頂?shù)闹稻蛻?yīng)該是上級(jí)函數(shù)的返回地址:

我們繼續(xù)在代碼區(qū)搜索此地址(42F509):

發(fā)現(xiàn)了嗎,有推斷條件。能夠看出是字符串比較函數(shù),我們?cè)O(shè)置斷點(diǎn)。F9 執(zhí)行究竟后又一次點(diǎn)擊button:

程序停在了斷點(diǎn)處。看看棧區(qū)。發(fā)現(xiàn)給函數(shù)的參數(shù)中的字符串:

破解起來(lái)確實(shí)非常輕松,字符串是固定的:Hello Dude!

5、破解左側(cè) serial
我們繼續(xù)執(zhí)行,轉(zhuǎn)到左側(cè)。輸入隨意字符串后點(diǎn)擊button:
依據(jù)剛才的方式找到調(diào)用者返回地址:42FB37

查找代碼區(qū):

發(fā)現(xiàn)字符串比較函數(shù)并下斷點(diǎn)。此時(shí)查看棧區(qū):

再往上看代碼區(qū):

我們能夠猜測(cè)出 serial 是 “CW-” + 某個(gè)數(shù) + “CRACKED”,中間的數(shù)是我們須要找的目標(biāo)。

6、真實(shí)的目標(biāo)
我們給 serial 生成函數(shù)的入口下一個(gè)斷點(diǎn),然后又一次點(diǎn)擊button執(zhí)行到斷點(diǎn)處 F8 單步走:

中間發(fā)現(xiàn)兩段代碼:

EAX = name[0] * 7 + name[1] * 0x10; EAX = name[3] * 0xB + name[2] * 0xE

繼續(xù)向下執(zhí)行,發(fā)現(xiàn)另外一段代碼:

函數(shù)入口的以下有一句不起眼的代碼:

兩個(gè)結(jié)合起來(lái)就是:

EAX = name[0] * 0x29 * 2;

后面我們發(fā)現(xiàn)調(diào)用字符串輸出函數(shù)之前 EAX 的值被置為那個(gè)內(nèi)存單元的值:

繼續(xù)往下調(diào)試結(jié)果就非常明顯了,第三段代碼才是我們要的。

0x03 雙重檢測(cè)

1、簡(jiǎn)單粗暴的 C語(yǔ)言
代碼例如以下:

#include <stdio.h>int main() {char name[1024];printf("Input your name: ");scanf("%s", name);printf("Serial: CW-%d-CRACKED\n", name[0] * 0x29 * 2);return 0; }

執(zhí)行結(jié)果:

2、原程序檢驗(yàn)

0x04 總結(jié)

這個(gè)小程序左邊的 serial 和 name 的第一個(gè)字符有關(guān),而且字符串長(zhǎng)度不能小于4.

轉(zhuǎn)載于:https://www.cnblogs.com/yangykaifa/p/7396298.html

總結(jié)

以上是生活随笔為你收集整理的逆向project实战--Acid burn的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。