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