"强网杯"复现

发布时间 2023-12-20 00:10:42作者: More_ci

reverse

ezre(2023-12-19)

来自http://mtw.so/5ECr2q

 

父子进程(fork函数)  参考文献http://mtw.so/5xMbp5    http://mtw.so/6gTs9O

简言之,fork()函数执行后会复制一遍代码,开启一个新的进程(子进程),父子进程执行顺序不确定,且二者共享存储空间,二者的变量发生改变不影响另一进程。文章中还涉及返回值,pid,pcb,以及缓冲区刷新等,在此不多赘述。

虽然目前没看到哪里是父子进程,继续往下看“d810”,看不懂哈哈,我们换篇文章(来源:https://mp.weixin.qq.com/s/ksGjGGeYjvWpgmRA5xyBpg)

  

好好好,看样子是个插件,装!!!哇去,感觉这个插件,好吊。

参考:https://zhuanlan.zhihu.com/p/598019392?utm_id=0

使用后观察主函数,发现依旧看不懂,看了gyc的题解后才发现,可以查出来sm4加密,用findcrypt3试了一下,发现查不到,问了wm才知道需要用signsrh插件,启动,跳转,发现byte_6130是sm4的sbox表,那么sub_1260函数应该就是sm4的tao运算,也没怎么做过sm4的题目,发现这个加密了,猜测一下应该就是解一下,开始寻找密文与密钥,发现在sub_3058函数中

 这里是我的一个疑惑点,这是小端序,感觉总是区分不出那个是小端序,哪个不是,害。

总结一下应该就是主函数给了一个假check,看题解说啥init_arry中调用了fork(),说实话,真没看明白,害,慢慢学吧。

最后附上gyc的代码(py是真的不会,赛博厨子又要先把小端序处理了,感觉也挺麻烦,还是学习代码吧)

import struct
from sm4 import SM4Key

e_arr = [0x7C88631647197506, 0x4A0D7D3FFF55668B, 0xDEC2E93F384ED2F5, 0x3C1FB1746F7F7CDB]
key = [0xEFCDAB8967452301, 0xEFCDAB8967452301]
e = struct.pack('<4Q', e_arr[0], e_arr[1], e_arr[2], e_arr[3])
key = struct.pack('<2Q', key[0], key[1])
d = SM4Key(key).decrypt(e)
# cipher.set_key(key, mode=SM4_DECRYPT) 
# d = cipher.crypt_cbc(e) 
print(d)
#flag{h3kk0_w0rld_sur3_3n0ugh}

 

分析一下代码