日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BugkuCTF-Reverse题游戏过关多解法

發布時間:2024/9/27 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BugkuCTF-Reverse题游戏过关多解法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

解題流程

下載程序
運行:

翻譯為:
玩游戲
n是燈的序列號,m是燈的狀態
如果第n個燈的m是1,它就亮,如果不是,它就滅
起初所有的燈都關上了
現在您可以輸入n來更改其狀態
但是你應該注意一件事,如果你改變Nth的狀態p、 (N-1)th和(N+1)th的狀態也改變
所有燈亮起時,flag將出現
現在,輸入n
輸入n,n(1-8)
就是輸入一個1到8之間的數,例如1:就會改變周圍的三個數的狀態,令8、1、2三個數變亮,再輸入一個2:也會改變2周圍三個數的狀態,令1、2熄滅,3亮起。多次輸入后,最后8個數都亮起的時候就會輸出flag。

方法一

逐漸輸入1~8,得到flag

方法二

動態調試
先查殼

OD打開文件
右鍵 >> 搜索引擎 >> 智能搜索,一眼找到flag相關字符串"done!!! the flag is"

雙擊字符串找到對應的匯編指令,能推斷出這是一個輸出flag的函數,向上找到這個函數的入口地址為0099E940,因此只要讓程序跳轉到這里就能輸出flag。

根據搜索到的字符串確定到輸出flag函數的位置0099E940,點擊可以看到顯示“跳轉來自 007A7AB4”,右鍵轉到該地址。

又看到在007A7AB4位置顯示“本地調用來自 007AF66C”,右鍵轉到這個地址。

可以看到,在007AF66C地址的call指令之上有八個jnz指令,對應的是程序里八盞燈的明暗判斷。
在各jnz指令處都設置斷點。按F9運行程序,程序需輸入1-8任意一數字,程序會運行到第一個jnz處的斷點暫停。輸入1的結果如下圖:

這時看程序運行到時,對應的ZF標志寄存器值為多少,若為0則右鍵“置1”,然后運行。接下來的七個斷點也是如此。

八個jnz處的斷點位置z寄存器的值都為1,函數接著就會跳轉到輸出flag的函數。后面沒有設置斷點,直接繼續運行就能得到flag。

注意: 這里用jnz去舉例,jnz的判斷檢查Z位,當Z位是1的時候就不跳轉,在Z位是0的時候就跳轉

方法三

DA打開無殼
1.SHIFT+F12打開string窗口
2.ALT+T查找flag

3.雙擊查看該字符串的內存地址
變量位于只讀數據區(rdata)

4.通過X鍵定位變量的交叉引用地址

F5查看偽代碼(關鍵部分)

此IDA為IDAPro6.6

分析后是兩步異或的過程
flag生成邏輯為:將v2 ~ v58各字符分別與v59 ~ v115進行異或,再與0x13u(十進制19)進行異或,所得的v2~58字符即為flag
5.Python對數據處理得到flag

方法五

修改源碼
用OD打開,查找字符串“done!!! the flag is”找到輸出flag的關鍵位置:


發現它是跳轉來自 01077AB4。所以我們再往上轉到 01077AB4:
01077AB4為跳轉到flag的地址,后面修改的正為此地址01077AB4


0107E940=ConsoleA.0107E940 表明了它指向了輸出flag的函數;本地調用來自 0107F66C說明它是由0107F66C調用的,所以我們再往回轉到 0107F66C:

我們到了這,發現上面由8個JNZ,這不就是源代碼里的8個判斷嗎?

一旦只要由一個判斷不滿足,程序就跳轉到輸出flag的函數的下一條去了,這樣就不會輸出flag而重新開始循環要求你輸出n了:

所以我們要修改源代碼令程序不管怎樣都會進入輸出flag的函數,這樣我們只要運行程序就能得到flag了。將原來的“jmp 0107F4FB”(跳轉到循環重新開始的位置)改為jmp 01077AB4(跳轉到輸出flag函數的位置),這樣只要我們輸入1~8直接的數,程序最后都為跳轉到01077AB4(flag函數的入口地址):

建議:將jmp ConsoleA.01077AB4改為call ConsoleA.01077AB4
即不要跳到里面去

也可以在斷點運行的過程修改跳轉地址
保存到可執行文件,(沒有直接保存的選項,所以需要右鍵 復制到可執行文件->選上
運行:

同樣也得到flag。

總結

以上是生活随笔為你收集整理的BugkuCTF-Reverse题游戏过关多解法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。