ISCC之Re2


硬核rust逆向

首先去學了一天rust。。。我TMD

IDA打開,跟蹤主函數

看一下偽代碼,發現有一串密文

跟進去發現一串數據,猜測有可能是flag的加密數據,於是回頭去分析算法

發現一個關鍵點

if ( v16 == v24 )

break;

v2 = ((*(_DWORD *)(v33 + 4 * v25) >> 2) ^ 0xA) == *(_DWORD *)(v16 + 4 * v25);

++v25;

v26 += v2;

v24 -= 4LL;

這段被加密過的字符串解密方式為(data[i] >> 2) ^ 0xA,datauint32_t類型的數組,解密之后的字符串即為flag,然后會拿來和自己輸入的字符串作比較。

於是我們可以根據上面的密文構造payload

#!-*-coding:utf-8 -*-
flag=[0x154,0x180,0x1FC,0x1E4,
0x1F8,0x154,0x190,0x1BC,
0x1BC,0x1B8,0x154,0x1F8,
0x194,0x154,0x1B4,0x1BC,
0x1F8,0x154,0x1F4,0x188,
0x1AC,0x1F8,0x154,0x18C,
0x1E4,0x154,0x190,0x1BC,
0x1BC,0x1B8,0x1BC,0x1B8,0x22,0x000,0x220]
decript=''
for
i in flag:
decript += chr(( i >> 2) ^0xA)
print (
decript)

最后getflag,但是算出來的flag有亂碼,於是一路窮舉,最后兩位猜出來是下划線和點號

 

Flag: _just_need_to_get_what_is_needed_.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM