首页
论坛
课程
招聘
[原创]KCTF2020第三题 重返地球 设计思路:racket逆向
2020-10-21 23:35 964

[原创]KCTF2020第三题 重返地球 设计思路:racket逆向

2020-10-21 23:35
964

0x00 前言

最近刚好学习了racket这门语言,发现挺有意思的,尤其是通过Continuation Passing Style可以把racket程序转换成C。而且把racket程序CPS之后的可读性变得更差了,而函数式编程语言的逆向相对而言也非常少,于是便有了这道题目。函数式编程向来都以奇异为特点(相对于中规中矩的C/Java/Python),于是最适合的题目名称我认为是《异常信号》。

0x01 源代码

程序的逻辑很简单,就是一个标准的有限域的矩阵相乘。因为这道题目重点在于逆向racket而不在于算法,所以没有选择复杂的算法。racket源代码是chall.rkt。因为是一步一步从普通racket程序改的,所以我把每个步骤都commit了一次,详情可以看git log。Python文件用于生成数据,即用来相乘的矩阵,output.txt是从Python生成的输出数据。parenthec.rktpc2c.rkt是转换所需要用到的工具,详情见论文:parenthec。因为生成的C源码存在一些需要自己定义的函数,比如说获取输入数据(不然会链接错误),所以modify.c实现了这些函数,用于直接复制到chall.c中。

0x02 逆向

因为程序是registerization过的,所以所有的racket函数的参数都由全局变量传递。而这些regster可以是一个结构体的指针,也可以是一个int整形。分析程序逻辑的关键点在于识别出continuation的结构体,以及其中的union结构,这样才能在apply-kswitch中分析原本的递归逻辑。详细的分析以后有空再写吧。

 

flag: KCTF{r4Ck3t_M4tr|X_W1tH_CP5_YqBHxjWX}


[看雪官方培训] Unicorn Trace还原Ollvm算法!《安卓高级研修班》2021年6月班火热招生!!

最后于 2020-11-22 12:36 被kanxue编辑 ,原因:
上传的附件:
收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回