日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

今年的hsctf里遇到了一个比较少见的nds逆向题目,侥幸拿下一血

發(fā)布時間:2025/3/21 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 今年的hsctf里遇到了一个比较少见的nds逆向题目,侥幸拿下一血 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


因?yàn)楦杏X網(wǎng)上整理好的相關(guān)資料比較少在這里分享給大家。

基本介紹

NDS:任天堂DS,是電玩游戲生產(chǎn)商任天堂公司2004年發(fā)售的第三代便攜式游戲機(jī)。主要的特征包括了雙屏幕顯示,其中下方的屏幕為觸摸屏;并配置有麥克風(fēng)聲音輸入裝置和 Wi-Fi 無線網(wǎng)絡(luò)功能。
這里題目提供了一個chall.nds的文件,一個nds的ROM文件,可以在pc上使用模擬器來加載運(yùn)行,在這里我使用的是DeSmuME模擬器。

解題

觀察題目大致功能
首先我們使用模擬器加載題目,可以看到是一個需要通過三關(guān)才能拿到flag的游戲。如下圖所示

按下回車后進(jìn)入第一關(guān)

可以看到是要輸入數(shù)據(jù)才可以通過下一關(guān)。由于DeSmuME并不能下斷進(jìn)行調(diào)試,只能看反匯編和寄存器的值這里我們繼續(xù)考慮靜態(tài)分析。

靜態(tài)分析準(zhǔn)備

打開IDA發(fā)現(xiàn)并不能識別它的架構(gòu)程序基址等等,這里我在github上搜到了一個nds的IDA loader插件
https://github.com/EliseZeroTwo/IDA-NDS
安裝插件后即可識別代碼。需要注意的是程序中有ARM7和ARM9的代碼,如果只識別ARM7則不能在IDA中看到全部函數(shù)。插件會彈框告訴你。識別結(jié)果如下圖。

可以看到識別出了很多的函數(shù),那么下一步就是需要定位到,處理的代碼在哪。
這里我們可以通過靜態(tài)分析或者觀察DeSmuME運(yùn)行時的pc寄存器的值來確定處理數(shù)據(jù)的代碼位置。

定位處理代碼位置

在進(jìn)入第一關(guān)之后等待輸入時,PC的值為2005B24我們在IDA找到這個位置,位于2005AD0這個函數(shù)中。猜測這個函數(shù)的功能就是獲取輸入,這里查看其引用發(fā)現(xiàn)上層函數(shù)只有一個,再查看上層引用如下圖(注:其中的stage1 stage2 stage3是我后來改的函數(shù)名,原本的程序是沒有符號表的)。

我們挨個進(jìn)入函數(shù)查看其功能。在我標(biāo)記的stage1(0x2000D4C)中發(fā)現(xiàn)了這樣一段代碼。

猜測這里是對我們輸入數(shù)據(jù)的校驗(yàn)。也就是stage1的代碼。
再查找stage1的引用定位到函數(shù)0x2002e18如下圖


猜測接下來的函數(shù)是stage2 stage3 后面驗(yàn)證果然如此

stage1

觀察函數(shù)執(zhí)行流程,確定了此處為比較位置

得到正確的輸入cuteblueicecube
輸入之后進(jìn)入stage2

stage2

第二階段如下圖

猜測是點(diǎn)擊圖片上的字來通過。
繼續(xù)分析stage2的代碼
在其中發(fā)現(xiàn)這樣一段代碼

可以看到之前在stage1中出現(xiàn)的獲取輸入的函數(shù)
確定輸入的位數(shù)為8位數(shù)也就是說應(yīng)該點(diǎn)擊界面上帶數(shù)字的小方格八次。
繼續(xù)看下面可以看到有一段進(jìn)行驗(yàn)證的代碼

代碼實(shí)現(xiàn)了多個方程,對輸入進(jìn)行校驗(yàn),其中使用的2014DB8為除法。這里使用Z3解方程,解開后將得到的值在屏幕上點(diǎn)擊即可進(jìn)入下一關(guān),由于出題人并不夠嚴(yán)謹(jǐn)導(dǎo)致方程有多個解。通過后進(jìn)入第三關(guān)

stage3

第三階段走迷宮需要把鳥移到左下角

但在實(shí)際中我們移到一半就發(fā)現(xiàn)下面有一堵墻,挪不動了,這時候想到小時候玩游戲魂斗羅之類的有作弊碼,那作者很有可能也設(shè)置了這樣的一段代碼。這時候我們需要看一下IDA的代碼。發(fā)現(xiàn)了可疑的一部分,如下圖。

猜測這里就是作弊碼,接著看代碼如何滿足條件進(jìn)入這里。

在這里發(fā)現(xiàn)需要v76以一定的順序執(zhí)行這幾個賦值就可以通過檢測。通過看代碼可知v76是r4寄存器,而后觀察模擬器按鍵設(shè)置

按下QWASZX對應(yīng)的鍵位即可讓r4寄存器產(chǎn)生我們需要的值,接下來就是確定它的順序。

v121 == 50 && v117 == 30 && v122 == 60 && v118 == 70 && v120 == 40 &&
v119==80

最終確定按鍵順序?yàn)閤sazwq
按下后中間的墻壁消失了。小鳥成功走到了右下角。

final

在通過三個階段后界面如下圖

這里把我們的輸入拼接成flag即可,需要注意的是第三階段需要提交的是任天堂游戲機(jī)的真正按鍵,這里我們根據(jù)模擬器鍵位得到真正的游戲機(jī)鍵位。
最終flag為
flag{cuteblueicecube_1-16-20-6-21-4-16-18_A-X-Y-B-R-L}
由于第二階段是多解,第二階段輸入為1-16-20-6-21-4-16-18 成功通過

小結(jié)

題目難點(diǎn)主要是,陌生的架構(gòu),以及模擬器不能進(jìn)行下斷調(diào)試等(可能有模擬器可以調(diào)試?知道的大佬可以提點(diǎn)一下)

》》想學(xué)習(xí)網(wǎng)安打CTF的朋友福利來了!

免費(fèi)贈送價值11980安全學(xué)習(xí)資料包

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的今年的hsctf里遇到了一个比较少见的nds逆向题目,侥幸拿下一血的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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