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

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

【CTF】記一次MIPS題目的逆向分析

2020-09-23 16:48 作者:吾愛破解論壇  | 我要投稿

作者論壇賬號:Li1y


初步分析

題目鏈接
https://wws.lanzous.com/i6Zo2gpbolc

2020HWS選拔賽的IOT逆向題目,內(nèi)有3個(gè)文件

其中readme.txt內(nèi)容如下:

題目運(yùn)行命令如下:

sudo qemu-system-mipsel -M malta -hda openwrt-malta-le-root.ext4 -kernel openwrt-malta-le-vmlinux.elf -nographic -append "root=/dev/sda console=tty50"

需要分析的程序?yàn)?./bin/maze

.ext4格式文件能直接解壓縮,復(fù)制出/bin/maze,用file看一下文件格式

發(fā)現(xiàn)是小端mips,根據(jù)readme.txt的內(nèi)容能直接模擬整個(gè)openwrt系統(tǒng)來運(yùn)行,而且可以使用gdb調(diào)試,但是調(diào)試過程中遇到了很多問題,比如莫名其妙突然不能顯示輸入輸出的字符等

因此考慮使用靜態(tài)分析方式,那么有以下幾個(gè)工具可以選擇

  1. Ghidra

  2. IDA7.5

  3. JEB-MIPS

首先推薦IDA7.5,氪金才能變強(qiáng),如果想白嫖最好還是選擇JEB-MIPS

根據(jù)個(gè)人經(jīng)驗(yàn),JEB-MIPS的偽代碼效果要優(yōu)于Ghidra,在一些異或處理上Ghidra顯示的偽代碼會和匯編有歧義,使用者容易被誤導(dǎo)

個(gè)人使用的JEB版本可在如下鏈接獲取

[Android Tools] JEB 3.17.1 Anti-Covid19 Edition by DimitarSerg

https://www.52pojie.cn/thread-1162477-1-1.html


靜態(tài)分析

根據(jù)題目maze也可以知道,這是一個(gè)CTF逆向題中典型的迷宮題

sub_400B44為主函數(shù)

首先限制了輸入長度為32

其次在sub_4006F0()通過預(yù)置的字符串"AMz1nG~#--Ma7e~"得出迷宮布局,即.bss段中的maze數(shù)組

根據(jù)字符串的長度和循環(huán)次數(shù)可以判斷出迷宮大小為8*15

我們可以根據(jù)偽代碼還原出迷宮生成函數(shù),從而打印出迷宮

剩下的就是判斷,上下左右分別用UDLR代替,下圖中以ASCII碼顯示

根據(jù)v1=1,v2=0可以判斷起始點(diǎn)是(1,0),而要走32步,則只有如下圖路徑


結(jié)果為

DDRDDLDDRRRRRDRDDDDDLLDDLLLUUULU


動(dòng)態(tài)分析

那么如果迷宮生成步驟再復(fù)雜一點(diǎn),很難從偽代碼分析還原出迷宮,就需要?jiǎng)討B(tài)調(diào)試了。

而根據(jù)前文所述,無法使用openwrt自帶的gdb調(diào)試,那么通過外接gdb是否可以呢

已知使用qemu可以直接模擬執(zhí)行靜態(tài)編譯的程序,但是如何對題中這種動(dòng)態(tài)編譯,需要外部依賴的程序進(jìn)行模擬執(zhí)行呢?

經(jīng)過查閱資料(https://www.colabug.com/2020/0824/7658729/),參考博主大佬對embedded_heap的調(diào)試過程,使用命令如下

qemu-mipsel -L ./ ./bin/maze

注意,根據(jù)博主大佬的過程,需要參照lib文件夾中的兩個(gè)1kb文件內(nèi)容,修改對應(yīng)的so文件,不然會出現(xiàn)解析錯(cuò)誤

解釋的可能不是很清楚,直接舉例吧,比如ld-musl-mipsel-sf.so.1其實(shí)并不是一個(gè)ELF格式的程序,用txt打開之后里面只有l(wèi)ibc.so,因此刪除舊的ld-musl-mipsel-sf.so.1并將libc.so命名為新的ld-musl-mipsel-sf.so.1

對libatomic.so.1的處理過程也一樣,處理之后就可以愉快的動(dòng)態(tài)調(diào)試了

因?yàn)橐褂胓db調(diào)試,所以使用-g參數(shù)設(shè)置端口

qemu-mipsel -g 1234 -L ./ ./bin/maze

之后安裝apt-get install gdb-multiarch,再使用如下命令啟動(dòng)gdb

gdb-multiarch -q ./bin/maze

設(shè)置架構(gòu)和大小端序(默認(rèn)小端)

set architecture mips

set endian little(本題為小端,可以不使用此命令)

最后遠(yuǎn)程連接調(diào)試端口,如在本地127.0.0.1可以省略不寫

target remote :1234

本以為這樣就結(jié)束了,可以愉快下斷點(diǎn)了,但是下完斷點(diǎn)執(zhí)行g(shù)db就崩了,換用pwngdb也是如此,過程如下圖

問題暫時(shí)無解,希望知道原因的師傅能告訴我

因此選擇使用IDA調(diào)試,雖然7.5以下的IDA不支持顯示mips的偽代碼,但是遠(yuǎn)程調(diào)試還是妥妥的,依舊是使用qemu-mipsel -g 1234 -L ./ ./bin/maze啟動(dòng)遠(yuǎn)程調(diào)試,ifconfig看一下虛擬機(jī)的ip,使用IDA打開maze文件,下斷點(diǎn)后選擇Remote GDB debugger運(yùn)行


填寫虛擬機(jī)ip和端口,其它參數(shù)默認(rèn)點(diǎn)OK即可


如果斷點(diǎn)下在了初始化迷宮布局結(jié)束之后,例如sub_400904處,運(yùn)行至此處后找到.bss段的maze變量轉(zhuǎn)化為數(shù)組即可看到迷宮全貌


此處還有一個(gè)坑點(diǎn),使用IDA7.0的時(shí)候同樣的流程看不到.bss段初始化后的結(jié)果,全是?

而換用7.2就可以了,淚目,果然氪金才能變強(qiáng)

不過論壇有7.2的版本,下載一個(gè)就OK

剩下的見靜態(tài)調(diào)試分析

最后,求知道為什么gdb調(diào)試會崩掉的師傅解惑

【更新,換了Ubuntu就不會崩掉了,玄學(xué)。。?!?/p>


原帖地址:?https://www.52pojie.cn/thread-1269155-1-1.html

【CTF】記一次MIPS題目的逆向分析的評論 (共 條)

分享到微博請遵守國家法律
娱乐| 广水市| 太和县| 石家庄市| 榆树市| 深州市| 科技| 陆川县| 淄博市| 肇东市| 高阳县| 荔波县| 张家界市| 巢湖市| 清苑县| 定日县| 凤凰县| 亚东县| 临邑县| 抚宁县| 广东省| 阿合奇县| 天等县| 长海县| 海口市| 林芝县| 民乐县| 云和县| 阿荣旗| 中方县| 丰镇市| 修武县| 阿拉尔市| 宝山区| 德庆县| 轮台县| 原平市| 酒泉市| 竹溪县| 赤峰市| 华池县|