又是一道很操(沒做出來)的題目,學習其他師傅的思路,
第一步:
常規操作,無殼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}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/355239.html
標籤:其他
上一篇:架構師技術堆疊——對標阿里P10
