Deceptive world

172次阅读
没有评论

Deceptive world

Deceptive world

这不是真正的入口 发现侧栏里面还有个main

Deceptive world

程序逻辑分析:

整型数据v3  v4  v8
任意长度字符串  v5
Str1[3]  三字节

赋值v8 =0
执行 sub_1400010EB()  传参 v3  Str1  //不知道干什么的 后面分析 大概率是一个输入函数

输出 aGZLzLgVlxvjgZL  (变量 数值是 G{z`Lz`Lg{vLxvjG{z`Lz`Lg{vLxvjxvj22)

执行 sub_140001017()  传参 Str1

v4赋值 strcmp()  传参 Str1 Str2  应该是得到了一个布尔型变量
	猜测 如果strcmp得到了正确的值 会给v4赋值false
v5赋值 根据情况判断
执行 sub_14000113B 猜测这里根据v5的值来输出flag
sub_1400010EB() 逻辑分析
发现他去调用了sub_1400011D3
sub_1400011D3里面还有个sub_140001207

观察发现,这条链实际上是一个等效scanf 就是把scanf的内容赋值给Str1

Deceptive world

Deceptive world

sub_140001017() 逻辑分析
Str[i] ^= aGZLzLgVlxvjgZL[i];
等价于
Str[i] = Str[i] ^ aGZLzLgVlxvjgZL[i];

也就是把 Str的第i个字符与 aGZLzLgVlxvjgZL的第i个字符进行二进制异或运算并赋值给Str[i]
(断点调试得到 This_is_the_keyThis_is_the_keykey!!)

Deceptive world

strcmp只是比较两个字符串是否相等,相等就触发接下来的一系列操作
可能输出flag

构造payload

Str2 = [
    0x02,0x21,0x2D,0x32,0x0D,0x12,0x32,0x00,0x10,
    0x11,0x2B,0x6B,0x06,0x54,0x1A,0x0B,0x1F,
    0x59,0x01,0x33,0x0D,0x2C,0x6E,0x07,0x37,
    0x07,0x6C,0x0A,0x10,0x0D,0x5A,0x03,0x0C,
    0x4D,0x5C
]

# key 从 IDA 数据段拿出来的完整字符串
Key = b"This_is_the_keyThis_is_the_keykey!!"

flag_bytes = bytearray()
for i in range(len(Str2)):
    flag_bytes.append(Str2[i] ^ Key[i])

print("Flag bytes:", flag_bytes)
print("Flag string:", flag_bytes.decode(errors="ignore"))

flag VIDAR{A_dyN4m1c_w0rld_1s_b3aut1ful}

正文完
 0
评论(没有评论)