drinkSomeTea
题目本身不难,就是一个tea加密,但是用python写这个脚本属实是坑多,给折磨了好久
主要的坑
- python 的右移运算符 >> 是逻辑右移(左补0),c语言里的 >> 是算术右移(左补符号位)
- 文件读写的大端序小端序的问题,也借此简单学习了一下python的struct库
以后遇见这种文件读写的题目还是用c写吧,害
分析
通过下面这里fake_flag在内存中的排放可知,这个程序是小端序的,所以写脚本的时候也要注意小端序输出字节流

然后看一下加密的核心源码(润色后的)
1 | int *__cdecl enc_fuc(int *pfile, _DWORD *fake_flag) |
exp
直接放解密脚本吧(python),里面的算术右移函数是抄的Mas0n师傅的脚本
1 | import struct |

一个小技巧
一般常见格式的文件,像这次这种png,他都有一些固定的文件头,可以观察正确格式下对应文件的文件头来辅助逆向分析
Enjoyit-1
这题其实蛮简单,边吃饭边看,吃完饭就出解了
分析
是c#写的,拖进dnSpy,贴一下主要逻辑代码

- 先是一个魔改了编码表的base64加密后密文的判断
- 然后中间具体的先不看,密文判断完后,有一个很长的sleep(图中只sleep了1秒,原来好像是10w秒来着,直接给他改了),然后好像是输出正确flag
- 修改一下源码,保存,再运行,flag直接出,关键的解密逻辑甚至看都不用看

replace
虽然说这题难度标的是困难,但给我的感觉倒不是最难的,那道扫雷到现在我都还一点头绪没有2333(稍微玩了一下,应该是少了一行,没法全扫光)
说回这道题目,一开始没去管太多,看到一个异或加密,直接写个脚本跑一下,好家伙果然是fake flag hhh
然后再仔细分析了下,发现一些反调试和花指令,去花之后真正的逻辑就容易看出来了
这题没什么太多新东西,就直接贴脚本了
1 | text = [39, 3, 10, 118, 30, 26, 54, 46, 73, 46, 48, 28, 118, 28, 95, 99, 86, 40, 19, 105, 116, 95, 31, 85] |
flag{Sh1t_you_dec0d3_it}
Comments