BUUCTF--[GWCTF 2019]re3学习记录
又是一道很操(沒做出來)的題目,學習其他師傅的思路。
第一步:
常規操作,無殼64位,放入IDApro中。
搜索找到main函數,出現紅色提示
棧存在問題,修改一下棧的值
?查看main函數,讀取,mproct函數,一種保護函數,不是很重要。
mprotect函數詳解
?SMC自修改代碼
在真正執行某一段代碼時,程序會對自身的該段代碼進行自修改,只有在修改后的代碼才是可執行的。在程序未對該段代碼進行修改之前,在靜態分析狀態下,均是不可讀的字節碼,IDA之類的反匯編器無法識別程序的正常邏輯。
第一次看,一臉懵逼,到這里就卡住了,把函數+i??? wtf???點進去查看
?大概意思是將sub_402219函數的匯編代碼修改了,最后再次執行,我們靜態分析看不出來。而且這里無法動態調試。
查看匯編代碼
?發現這里出現了一大堆數據,應該就是我們需要處理的數據。
選中402219數據段 D鍵轉換為數據段。
?這時我們就需要使用IDC腳本進行數據修改(一種類c語言)shift+F2
IDC腳本介紹
IDC腳本舉例
IDC函數
#include <idc.idc>static main() {auto addr = 0x402219; //聲明局部變量 addr是起始地址auto i = 0;for(i=0;i<224;i++) {PatchByte(addr+i,Byte(addr+i)^0x99); //設置虛擬地址addr處的一個字節值} }然后將修改后的數據選中,右鍵分析,選擇force強制執行,然后把代碼按P鍵形成函數。
?我們分析一下函數,點進去都是好長一段,試試findcrypt插件,可能是某種加密,發現是AES
?byte_6030A0就是最后加密后的內容
BC0AADC0147C5ECCE0B140BC9C51D52B46B2B9434DE5324BAD7FB4B39CDB4B5B
現在我們需要來求密鑰unk_603170.linux遠程動態調試(輸入一個長為32位的字符串)
CB8D493521B47A4CC1AE7E62229266CE
最后學習別的師傅的腳本
from Crypto.Cipher import AES from Crypto.Util.number import * key = long_to_bytes(0xcb8d493521b47a4cc1ae7e62229266ce) #密鑰 mi = long_to_bytes(0xbc0aadc0147c5ecce0b140bc9c51d52b46b2b9434de5324bad7fb4b39cdb4b5b) #密文 lun = AES.new(key, mode=AES.MODE_ECB) flag = lun.decrypt(mi) print(flag)得到最后的flag為
flag{924a9ab2163d390410d0a1f670}
總結
以上是生活随笔為你收集整理的BUUCTF--[GWCTF 2019]re3学习记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BUUCTF firmware
- 下一篇: [BUUCTF]Reverse——[网鼎