HGAME REVERSE WEEK3
之前是按照出题人的思路进行patch得到的flag,这次想尝试一下直接逆向得到答案
这是其中的一个比较重要的加密过程
可以看到i的作用是类似于寻找地址
之后的mprotect是用来修改指定内存区域属性的,并且这个函数是再Linux下的
1 |
|
这就是函数原型
mprotect()函数把自start开始的、长度为len的内存区的保护属性修改为prot指定的值。
prot可以取以下几个值,并且可以用“|”将几个属性合起来使用:
1)PROT_READ:表示内存段内的内容可读;
2)PROT_WRITE:表示内存段内的内容可写;
3)PROT_EXEC:表示内存段中的内容可执行;
4)PROT_NONE:表示内存段中的内容根本没法访问。
可以看到,mprotect修改的内存区域与之后的加密区域是重合的
所以下面的加密操作其实是对内存也就是text进行的,这一点是week3逆向题的总体风格了,对text段操作,或者有shellcode
可以打开file -> script command 写入脚本进行解密的
(ida的python接口的函数还不会写)
这样之后只要在0x14c6 p一下创建函数体就可以静态分析代码了
加密很简单,异或之后输出
1 |
|
看了眼大师傅们的解密脚本
都很妙,有用char对数组操作强制四位四位转换的
还有整个异或之后用python pwn库的p64函数转换成字符串的
都学到了新东西
week3的所有wp应该都齐了,复现完week3之后我发觉对于逆向来说,任何对内存进行的操作都要敏感,不论是对数据的修改还是对代码的修改,这都非常重要
ps:期末考考完哩,应该挂不了
2023.3.14更新 XCTF babyre
一道有趣的题目
进去之后看到是这样的代码逻辑
judge数组的出现显得非常没有逻辑
其实这题和上文hgame的patchme是一个道理
都用了类似于smc技术
对关键代码进行了处理,不过hgame的逻辑隐藏地更深
1 | import idc |
judge代码逻辑
1 | flag="fmcd"+chr(127)+"k7d;V`;np" |
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !