normal12

这题目的执行顺序比较混乱

大致跑一遍

推测,将所有参数传入v19,v19加密后传入dest

func2里面要求前面必须为flag{

func3里面要求结尾必须为}且长度为40

func4是要求输入的13,18,23,28必须为 ‘-’

func5是加密

大致逻辑就是a-z 字符-48

0-9字符+17

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
data=[0x0000004A, 0x00000032, 0x00000032, 0x00000036, 0x00000031, 0x00000043, 0x00000036, 0x00000033, 0x0000002D,
0x00000033, 0x00000049, 0x00000032, 0x00000049, 0x0000002D, 0x00000045, 0x00000047, 0x00000045, 0x00000034,
0x0000002D, 0x00000049, 0x00000042, 0x00000043, 0x00000043, 0x0000002D, 0x00000049, 0x00000045, 0x00000034,
0x00000031, 0x00000041, 0x00000035, 0x00000049, 0x00000035, 0x00000046, 0x00000034, 0x00000048, 0x00000042]
flag=''
for i in range(len(data)):
if data[i] >= 65 and data[i] <= 74:
flag += chr(data[i] - 17)
continue
if data[i] >= 48 and data[i] < 65:
flag += chr(data[i] + 48)
continue
else:
flag += "-"
print(flag)

Ollvm混淆介绍

Ollvm混淆主要分成三种模式,这三种模式主要是流程平坦化,指令替换,以及控制流伪造。

流程平坦化 :这个模式主要通过将if-else语句替换成do-while语句,然后通过switch语句来对流程的控制,这样就能模糊基本块之间的前后关系。指令替换 :这个模式主要通过使用更复杂的指令序列来替换一些标准的二元运算符,从而增加逆向的难度。控制流伪造 :这个模式主要是会在一个简单的运算中外包好几层if-else的判断,从而增加逆向的难度。