五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

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

逆向破解入門

2020-07-17 20:43 作者:無情劍客Burning  | 我要投稿

一個(gè)簡單的程序

程序功能是判斷用戶輸入,如果是"burning",則輸出"success",否則,輸出"fail"。程序代碼如下:

  1. #include<string.h>

  2. #include<stdlib.h>

  3. #include<stdio.h>


  4. int main(){

  5. char buff[1024];

  6. char *password = "burning";

  7. ? ? ? ?scanf("%s",buff);

  8. if (strncmp(password,buff,strlen(password)) == 0){

  9. ? ? ? ? ? ? ? ?printf("success\n");

  10. }

  11. else{

  12. ? ? ? ? ? ? ? ?printf("fail\n");

  13. }

  14. return 0;

  15. }

可執(zhí)行文件生成過程

預(yù)處理過程

主要處理源文件中以“#”開頭的預(yù)編譯指令,經(jīng)過預(yù)編譯處理后,得到的是預(yù)處理文件(如,test.i) ,它還是一個(gè)可讀的文本文件 。

  1. gcc –E test.c –o test.i

編譯

將預(yù)處理后得到的預(yù)處理文件(如 test.i)進(jìn)行詞法分析、語法分析、語義分析、優(yōu)化后,生成匯編代碼文件。經(jīng)過編譯后,得到的匯編代碼文件(如 test.s)還是可讀的文本文件,CPU無法理解和執(zhí)行它。

  1. gcc ?-S test.i -o test.s

匯編過程

匯編程序(匯編器)用來將匯編語言源程序轉(zhuǎn)換為機(jī)器指令序列(機(jī)器語言程序)。匯編結(jié)果是一個(gè)可重定位目標(biāo)文件(如 test.o),其中包含的是不可讀的二進(jìn)制代碼,必須用相應(yīng)的工具軟件來查看其內(nèi)容。

  1. gcc –c test.s –o test.o

預(yù)處理、編譯和匯編三個(gè)過程針對(duì)一個(gè)模塊(一個(gè).c文件)進(jìn)行處理,得到對(duì)應(yīng)的一個(gè)可重定位目標(biāo)文件(一個(gè).o文件)。

鏈接過程

將多個(gè)可重定位目標(biāo)文件合并以生成可執(zhí)行目標(biāo)文件。

一步到位

直接將.c文件轉(zhuǎn)化為可執(zhí)行目標(biāo)程序(ELF)。

  1. gcc test.c -o test

破解test程序

運(yùn)行程序

程序破解

如果輸入任何內(nèi)容,都顯示success,則說明test程序破解成功。

Radare2

Radare2在逆向方面是可以比肩IDA Pro的,從學(xué)習(xí)的角度來說,更建議使用Radare2。因?yàn)镮DA的F5功能具有反匯編的功能可以直接把匯編代碼翻譯成C語言,這樣反倒不會(huì)關(guān)注匯編語言了,同時(shí)在Linux下,IDA破解版也不太好用。

在這里對(duì)Radare2進(jìn)行簡單的介紹。

查看程序信息

使用如下 rabin2-I test命令查看test程序信息。

通過 rabin2-z test 查看來自數(shù)據(jù)段的字符串。

破解之旅

  1. 打開Radare2。?r2-w test

  2. 分析信息。?aa

  3. 查看所有的flag。Radare2會(huì)將所有有用的信息和特定的名字綁定在一起,比如區(qū)段、函數(shù)、符號(hào)、字符串,這些都被稱作 'flags', flags 被整合進(jìn) ,一個(gè) flag 是所有類似特征的集合。?fs

  4. 查看字符串引用 1.?fs strings;f?輸出結(jié)果是:0x000008ef 8 str.success 2.?axt@@str.sucess?'axt' 命令用來在 data/code段里找尋某個(gè)地址相關(guān)的引用

  5. 地址跳轉(zhuǎn)?s0x81c

  1. 查看匯編代碼?pdf

  1. 進(jìn)入可視化頁面,查看流程圖。?v

  1. 通過流程圖,很容易看出存在條件跳轉(zhuǎn),如果能夠讓所有的條件都走success流程,那么程序就算破解成功了。

  2. 修改?jne0x82a?為?jne0x81c,則無論怎樣,都會(huì)走success流程而不會(huì)走fail的流程。

  3. 跳轉(zhuǎn)到?jne0x82a。?s0x0000081a

  4. 修改指令,所有流程都走0x81c。?wx7500

  5. 查看修改內(nèi)容。?pd3

  1. 退出。?q

驗(yàn)證

運(yùn)行test程序,無論輸入什么內(nèi)容,都是會(huì)輸出success的?。。?!

Rasm2

rasm2 is an inline assembler/disassembler。在上面修改代碼的時(shí)候,是通過 wx7500來讓所有的流程都走success流程的,這個(gè)機(jī)器碼7500是怎么來的?通過如下的命令就可以獲得,其中的0x02是0x81c和0x82a的偏移。

  1. rasm2 -a x86 -b 32 "jne 0x02"

web頁面

Radare2自帶了內(nèi)嵌的Web服務(wù)器,服務(wù)器提供了純html/js接口可發(fā)送ajax請求。可以使用下面的命令進(jìn)行啟動(dòng):

  1. r2 -c=H test

界面效果如下:

公眾號(hào)

更多內(nèi)容,歡迎關(guān)注我的公眾號(hào):無情劍客。




逆向破解入門的評(píng)論 (共 條)

分享到微博請遵守國家法律
德安县| 诸城市| 江门市| 广元市| 资阳市| 河东区| 天津市| 长治市| 扶风县| 乌兰察布市| 郸城县| 慈溪市| 伊川县| 天全县| 峡江县| 湄潭县| 万安县| 乳源| 南充市| 武宁县| 仪陇县| 高阳县| 汉中市| 闵行区| 邵武市| 靖江市| 永吉县| 拜城县| 商丘市| 循化| 睢宁县| 瑞安市| 辽源市| 夏河县| 新干县| 凤凰县| 唐海县| 长葛市| 城固县| 鲁甸县| 阿克|