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}
分析一下代码