当前位置: 首页 > 工具软件 > simplefs > 使用案例 >

[*ctf 2022 reverse] simplefs

公良向阳
2023-12-01

当时弄了一会乱了,0节点啥都没有,昨天看了官方WP发现需要把全部的节点弄出来。试了一成功,就差一点呀。

不过官方给出了密钥 0xdeadbeef程序里是没有的,而且我的作的时候也是爆密钥。先看下加密程序

__int64 __fastcall crypto(__int64 a1, int a2)
{
  int i; // [rsp+10h] [rbp-10h]
  int v4; // [rsp+14h] [rbp-Ch]
  _BYTE *v5; // [rsp+18h] [rbp-8h]

  v4 = sub_30A3();
  for ( i = 0; i < a2; ++i )
  {
    v5 = (_BYTE *)(i + a1);
    *v5 = (*v5 >> 1) | (*v5 << 7);
    *v5 ^= v4;
    *v5 = ((unsigned __int8)*v5 >> 2) | (*v5 << 6);
    *v5 ^= BYTE1(v4);
    *v5 = ((unsigned __int8)*v5 >> 3) | (32 * *v5);
    *v5 ^= BYTE2(v4);
    *v5 = ((unsigned __int8)*v5 >> 4) | (16 * *v5);
    *v5 ^= HIBYTE(v4);
    *v5 = (*v5 >> 5) | (8 * *v5);
  }
  return 0LL;
}

按字节加密,在5次循环移位中间加了密钥,其实这种密钥再大也就是256个

a0	a1	a2	a3	a4	a5	a6	a7
							
a7	a0	a1	a2	a3	a4	a5	a6
b10	b11	b12	b13	b14	b15	b16	b17
							
a5	a6	a7	a0	a1	a2	a3	a4
b16	b17	b10	b11	b12	b13	b14	b15
b20	b21	b22	b23	b24	b25	b26	b27
							
a2	a3	a4	a5	a6	a7	a0	a1
b13	b14	b15	b16	b17	b10	b11	b12
b25	b26	b27	b20	b21	b22	b23	b24
b30	b31	b32	b33	b34	b35	b36	b37
							
a6	a7	a0	a1	a2	a3	a4	a5
b17	b10	b11	b12	b13	b14	b15	b16
b21	b22	b23	b24	b25	b26	b27	b20
b34	b35	b36	b37	b30	b31	b32	b33
b40	b41	b42	b43	b44	b45	b46	b47
							
a1	a2	a3	a4	a5	a6	a7	a0
b12	b13	b14	b15	b16	b17	b10	b11
b24	b25	b26	b27	b20	b21	b22	b23
b37	b30	b31	b32	b33	b34	b35	b36
b43	b44	b45	b46	b47	b40	b41	b42

从手工运算可以看到加密后的第0位是a1^b12^b24^b37^b43所有的b只跟a1作了运算,所以不管密钥是多少都只算1位。

解密(根据官方WP)先把所有的节点dump出来

from pwn import *

p = process(['./simplefs', 'image.flag', ' 500'])
context.log_level = 'debug'

menu = b' simplefs> '
p.sendlineafter(menu, b'mount')
for i in range(0,175):
    p.sendlineafter(menu, f'copyout {i} {i}.dat'.encode())

p.sendlineafter(menu, b'quit')

第2步从这些加密数据里暴出带*ctf的

def xor(a, b):
    return bytes([((i>>1|i<<7)&0xff)^b for i in a])

for i in range(175):
    a = open(f'{i}.dat', 'rb').read()
    for j in range(0x100):
        b = xor(a, j)
        if b'CTF{' in b:
            print(i, b)

#22 b'*CTF{Gwed9VQpM4Lanf0kEj1oFJR6}\n'

是不是很easy,就是没想到它放的不是flag那个节点。笨!

 类似资料:

相关阅读

相关文章

相关问答