分享几道re

这几天一直打比赛忙不过来,偶尔抽出点时间写了几题
先上一道最水的吧

XCTF 3rd-GCTF-2017 hackme

这道题主逻辑其实特别简单
1
输入22个之判断部分,根据伪随机数来生成v9
然后用v9和输入的对应xor接着匹配
那就很简单了,下好断点记录下v9低8位的值就行
因为程序只验证部分就通过,所以只能解出部分。
但在提交的时候需要完整的flag
这不难,直接改了v7后记录v9
毕竟水题啊

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
a = [0x5F, 0xF2, 0x5E, 0x8B, 0x4E, 0x0E, 0xA3, 0xAA, 0xC7, 0x93,
0x81, 0x3D, 0x5F, 0x74, 0xA3, 0x09, 0x91, 0x2B, 0x49, 0x28,
0x93, 0x67]
b = [0x4e,0xb7,0x4e,0x42,0x9e,0x30,0x39,0x9b,0xec,0x9e,0x3f,0x35,0x6a,0x98
,0xf1,0xf6,4,0x6d,0x93,0xa9,0x2f,0x1c,0xa5,0x1a]
c = [0x11,0xA,0X11,0XD,0X1,0XF,0X0,0x6,0x3,0x1,2,4,5,7,8,9,0xb,0xc,0xe,0x10,
0x12,0x13,0x14,0x15]
flag = [0]*22
for i in range(len(b)):
flag[c[i]] = a[c[i]]^b[i]
print flag
aaa = ''
for i in range(len(flag)):
if flag[i]:
aaa += chr(flag[i])
else:
aaa += 't'
print aaa

CUIT-2017 re150

稍微增加些难度
这是一道smc+花的题
smc的话就不能在修改处下断点,每次调试都要从头来
至于花。。。就不能反编译了啊//其实是因为我不怎么会去花
所以,不能反编译加不能下断点
有点小恶心
好在这题的加密部分不怎么难
2
疯狂跟函数可以发现主要函数位置
加密段有花。。。没办法
3
怼汇编吧。。。
下断点看值配合一点黑盒可以看出来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
b = [0x73, 0x8D, 0xF2, 0x4C, 0xC7, 0xD4, 0x7B, 0xF7, 0x18, 0x32,
0x71, 0x0D, 0xCF, 0xDC, 0x67, 0x4F, 0x7F, 0x0B, 0x6D, 0x00]
a = [49, 24, 206, 133, 87, 180, 218, 119, 49, 185,
82, 39, 26, 6, 139, 205, 113, 161, 74]
flag = ''
c = [0]*19
for i in range(19):
for j in range(128):
temp = j
x = int(temp / 2 ** (i % 8)) & 0xff
y = (temp << (8 - i % 8)) & 0xff
x |= y
if b[i] == x ^ i ^ 0x20:
flag += chr(j)
break
print flag

XCTF 4th-QCTF-2018 babyre

这题写了我好久啊
最后才发现是rust写的。。。
感觉最近写的这种非c的逆向比较多啊。。。
对于这种类型题目的写法。。。说实话,只能怼汇编
配合黑盒上手
插件的话能用就用,但是用插件的前提是你认得出这是什么语言
4
首先是跟
找到关键函数
可以看到程序有俩次加密
在加密之前有一次移位操作
进第一次加密的时候就能发现了,按照某种顺序打乱字符串
第一次加密其实就是加法
第二次是移位后or
5
最后是匹配
可以看到匹配的数组
长度的话前面有一次验证,有个跳转,这边就不上了。
直接上代码吧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
b = [0xDA, 0xD8, 0x3D, 0x4C, 0xE3, 0x63, 0x97, 0x3D, 0xC1, 0x91,
0x97, 0x0E, 0xE3, 0x5C, 0x8D, 0x7E, 0x5B, 0x91, 0x6F, 0xFE,
0xDB, 0xD0, 0x17, 0xFE, 0xD3, 0x21, 0x99, 0x4B, 0x73, 0xD0,
0xAB, 0xFE]
flag = ''
a = [0]*32
for i in range(0,32,4):
for j in range(0xff):
temp = j
if (temp>>2)|(temp<<6)&0xff == b[(i+9)%32]:
a[(i+9)%32] = j
elif (temp>>7)|(temp<<1)&0xff == b[(i+10)%32]:
a[(i+10)%32] = j
elif (temp>>4)|(temp<<4)&0xff == b[(i+11)%32]:
a[(i+11)%32] = j
elif (temp>>5)|(temp<<3)&0xff == b[(i+12)%32]:
a[(i+12)%32] = j
for i in range(len(a)):
if i%4 == 0:
a[(i + 3) % 32] = chr(a[(i+3)%32]-0x81)
elif i%4 == 1:
a[(i + 3) % 32] = chr(a[(i+3)%32]-7)
elif i%4 == 2:
a[(i + 3) % 32] = chr(a[(i+3)%32]-0x12)
else:
a[(i + 3) % 32] = chr(a[(i+3)%32]-0x58)
for i in range(0,32,4):
flag += a[i+1]
flag += a[i+3]
flag += a[i]
flag += a[i+2]
print flag

花费大把时间怼出来一题还是蛮爽的。

文章目录
  1. 1. XCTF 3rd-GCTF-2017 hackme
  2. 2. CUIT-2017 re150
  3. 3. XCTF 4th-QCTF-2018 babyre
|