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

歡迎光臨散文網(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)論 (共 條)

分享到微博請遵守國家法律
信宜市| 云南省| 新建县| 汝城县| 山阴县| 玛沁县| 平昌县| 长宁区| 海淀区| 大姚县| 巴林左旗| 昔阳县| 桐乡市| 武功县| 枝江市| 连云港市| 河池市| 牡丹江市| 丰顺县| 咸宁市| 太保市| 会昌县| 安龙县| 洛隆县| 宁河县| 固阳县| 宁化县| 建昌县| 固镇县| 湖口县| 永修县| 朝阳市| 灵丘县| 房产| 张家界市| 西贡区| 通海县| 杭州市| 乐至县| 襄垣县| 肇州县|