逆向手终于来整理逆向啦(喜大普奔,可能会有其他两个逆向题的复现+1?
有幸苟在Top14,队友们tql!
Reverse
DigitalCircuits
exe典型pyinstaller打包,甚至图标都没改(
按照 RE套路 - 关于pyinstaller打包文件的复原 解出来python源码,然后读代码的过程中顺便给一些函数命了名(便于分析):
1 | import time |
从前三个函数开始分析出与门、或门和非门,剩下的根据数电/离散学的一些知识来推(比如myadd
这里是一个全加器,返回进位c和结果s)。
分析完以后可以发现f10其实就是个原版TEA,魔数都不带改的那种(u1s1看到这四个kx = '...'.zfill(32)
就有猜到是TEA系列了hhh
key是k0-k3,密文是res,明文就是我们要的flag
用python把密钥和密文处理一下:
1 | res = '001111101000100101000111110010111100110010010100010001100011100100110001001101011000001110001000001110110000101101101000100100111101101001100010011100110110000100111011001011100110010000100111' |
从 TEA、XTEA、XXTEA加密解密算法 抄一个tea解密,改一下main函数(需要注意一下flag塞进去的顺序):
1 | #include <stdio.h> |
然后unhex一下:
flag:SUSCTF{XBvfaEdQvbcrxPBh8AOcJ6gA}
hell_world
在某g搜“vhdl 逆向”的时候搜到一道类似的题:https://team-su.github.io/passages/2021-11-20-XHLJ/
思路跟这个题差不多(可以说除了数据、case和算法其他都是一样的,连2233都一样),xjb逆+动态调试就行
搜字符串“flag”,定位到一样的主操作函数
最开始的已知数组在dword_7FF74A635C50
case11这里有另一个已知数组
然后把两个已知数组前面几个相互xor起来会发现刚好是SUS。。
然后就出来了(
(如果不确定是xor的话也可以通过动态调试看输出来判断,比较的加密后的密文在case7这里)
exp:
1 | arr1 = [0x00000056, 0x000000DA, 0x000000CD, 0x0000003A, 0x0000007E, 0x00000086, 0x00000013, 0x000000B5, 0x0000001D, 0x0000009D, 0x000000FC, 0x00000097, 0x0000008C, 0x00000031, 0x0000006B, 0x000000C9, 0x000000FB, 0x0000001A, 0x000000E2, 0x0000002D, 0x000000DC, 0x000000D3, 0x000000F1, 0x000000F4, 0x00000036, 0x00000009, 0x00000020, 0x00000042, 0x00000004, 0x0000006A, 0x00000071, 0x00000053, 0x00000078, 0x000000A4, 0x00000097, 0x0000008F, 0x0000007A, 0x00000072, 0x00000039, 0x000000E8, 0x0000003D, 0x000000FA, 0x00000040, 0x0000003D] |
flag:SUSCTF{40a339d4-f940-4fe0-b382-cabb310d2ead}