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

歡迎光臨散文網(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題目的逆向分析的評論 (共 條)

分享到微博請遵守國家法律
文昌市| 西乡县| 南宁市| 恩平市| 广安市| 康定县| 高安市| 长垣县| 乌兰浩特市| 叙永县| 周口市| 文水县| 黄龙县| 夏津县| 辽宁省| 当雄县| 龙岩市| 河北区| 长寿区| 克山县| 阿瓦提县| 蒙阴县| 印江| 博爱县| 安化县| 浑源县| 太康县| 海口市| 满洲里市| 三台县| 蒙城县| 长武县| 略阳县| 玉树县| 绥芬河市| 文山县| 宁夏| 荆门市| 吴堡县| 蒙自县| 张家界市|