SHCTF-a_cup_of_tea
一道简单的tea算法题目,核心伪代码如下
1 | void __fastcall sub_1241(__int64 a1, __int64 p_src) |
1 | _BOOL8 __fastcall sub_1439(_DWORD *a1) |
1 | __int64 __fastcall sub_134E(unsigned int *a1, _DWORD *p_welcome_to_SHCTF) |
第一个代码在对密钥进行字符转ASCII并且进行小端序排序,第二个和第三个则是正常的tea算法加密,逆向代码如下
1 |
|
1 |
|
依旧需要注意:
TEA只能处理32位数据,所以在IDA中不要忘了shift+e
SHCTF-where are you
一道很有意思的题目,藏了很多东西,也有很多假的东西和指引。
首先查找字符串定位到main逻辑

函数sub_401FE0中找到

逆向后得到假flag。

找到可疑数据byte_404090,x 定位,找到真正逻辑

这里需要下断点,在第二个virtualprotect处下断点
动调前的ipaddress

动调后的ipaddress

很明显发生变化了。下面就是一点点脑洞了,类似于处理花指令,这里也是CUP处理,然后可以得到真实逻辑
1 | int __cdecl sub_402090(const char *Buf1) |
查看过后是RC4,在上面可以看到密钥及其处理,那么这题就出了。逆向脚本如下
1 | def rc4(data, key): |
SHCTF-damagePE
题干如下

附件丢进010中之后如下

可以看到最大的问题在于PE被出题人改成了SH,改完后我们尝试运行并丢进IDA中

得到第一部分flag

得到第二部分flag和提示。提示说找到第二个IAT,我们该怎么找导入函数呢?IDA中有一个强大的功能叫Imports,这个视窗中可以找到所有的导入函数

那答案就很明显了,两个都拿去试一下就能拿到flag了。
SHCTF-Safe Image Encryption
一道图像加密逆向问题,原伪代码如下
1 | __int64 __fastcall main(int n3, char **a2, char **a3) |
说实话我不是很懂这是什么玩意儿,逆向脚本如下
1 | from PIL import Image |