Skip to main content

工具 Z3 (约束求解)

(听说CTF和EDA设计都需要这个哎,打算花点时间学一下)

整不明白….之后再学

虽然整不太明白,不过至少从逆向工程这一方面,我还是想分享一下我在几个小时内的学习心得吧。

(理解得很浅也可能有错误)

我最近才做逆向的题目,逆向大概就是让你通过ida工具分析出来的伪代码和汇编代码来理解每一个函数在做什么,当然,既然是题目,那肯定有答案,为了考察你是否理解了这个程序流,题目一般会对一些数据进行一些复杂处理(一般是对你的输入进行处理),最后将其与给定的值strcmp,一般你的输入可能就是flag。

最近又正好看到了jyy的新视频jyy(科普向),正好又讲到符号执行以及约束求解(太巧啦),这些正好又可以利用到逆向工程中。

原理大概是可以把我的输入变成一个符号,不是一个具体的值,让这个符号去走各种路径,并且要让其走到我需要的路径(也就是最终strcmp成功的路径),这样会得到关于这个符号的一系列的约束条件,再使用z3-solver求解这个解,就得到了flag,具体使用可看ctfwiki

但是,我好像又看到了一个新工具,叫做angr,这个工具好像可以自动化上述步骤,但是具体是啥样请参考我即将发出的下一篇文章:angr

最后,我觉得做一件事工具很重要,正如jyy说的,“只要有需求,就有人去实现它”,所以要为自己的每一项工作找到合适的工具。

ps:第一次听到符号执行时实在是有些震惊,计算机与数学竟然能如此深度的结合,感觉很神奇,特别是我之后看到用解方程一般的方式分析程序,amazing!

再ps:jyy太厉害啦,不仅仅是专业实力,还有奉献精神以及特别厉害的教育方式和理念,让我这样一个菜鸟都能受益良多。