rust逆向题(持续收集)

FSCTF2023 rrrrust!

看见核心数据部分
image
后面大致作了一些trim match 转bytes的处理
image
注意到这里的v60~flag
来到关键变化段
image
前面提到过v60~flag 而v28是对v60取了个index
看到最下面 *v28 ^= HIBYTE(v26) 由于v26的值静态找不到 所以要动调得到key
注意到这里有个v30=v65%6 猜测key的长度为6
在xor处下好断点开始动调
手动记录下HIBYTE(v26)的值:
0x58 0x46 0x46 0x54 0x6E 0x54 0x58 0x46...
可以看到这里出现了循环 故一个循环节为 [0x58 0x46 0x46 0x54 0x6E 0x54] 长度刚好为6
结合后面的check
image
v54数组也给了 xor key就可以得到flag了
solution.c

#include<bits/stdc++.h>
using namespace std;
signed main(){
	unsigned char data[] = {
    0x3E, 0x2A, 0x27, 0x33, 0x15, 0x03, 0x3D, 0x77, 0x25, 0x64, 0x03, 0x67, 0x07, 0x32, 0x76, 0x0B, 
    0x1C, 0x21, 0x2B, 0x32, 0x19, 0x23,0x5E,0x26,0x69,0x22,0x3B
};
	int key[]={0x58,0x46,0x46,0x54,0x6E,0x54};
	string flag="";
	for(int i=0;i<27;i++){
		flag += char(int(data[i])^key[i%6]);
		cout<<flag<<"\n";
	}
}
// flag{We1c0m3_t0_rust_w0r1d}
posted @ 2023-11-13 08:47  N0zoM1z0  阅读(100)  评论(0编辑  收藏  举报