BUUCTF之[GUET-CTF2019]--RE

老样子,先查壳,ELF64而且发现Upx壳. Tips:现在只会最基本的upx -d 脱壳,虽然现在不会OEP定律法,以后还是要面对的捏

丢kali里面进行脱壳即可

丢IDA继续分析

首先看字符串窗口发现有input your flag字样

跟进函数继续查看

整体函数的逻辑很简单,就是对多个变量输入字符串,然后通过sub_4009AE函数来判断是否正确或者错误,跟进sub_4009AE.

所以逻辑就是每个大数乘另一个大数都要为另一个大数,但是不管用C或者python写,都很反人类,人麻了。

不过之前做过新生赛的题目,做过这种大数的题目可以用Z3求解器来解决,哈哈哈哈哈哈

下面是关于Z3求解器文章的讲解

引用:https://www.cnblogs.com/hetianlab/p/13685260.html

总体来说分为一下几个步骤:

先设置变量-->然后设置限制条件 -->然后判断是否有解 -->求解并输出

设置变量:

Int - 整数

x = Int('x')

Solver对象:

我们需要先实例化一个对象,方便我们添加更多的约束对象

solver = Solver()

然后添加约束条件:

譬如:solver.add(a + 999999999 = 8888888888888)等等条件,一行添加一个约束条件,这里的约束条件就是方程等式.

具体想了解Z3的师傅直接看上面引用的文章即可.

而且这里的函数还有坑,一定要注意,一定要注意!!!

第一个坑就是,a[6]没有,第二个坑就是a[16],a[17]出现了顺序颠倒,hhhh

下面附上脚本

手写的我麻了,有没有大佬能搞个一键dump图片数据的脚本,一个一个写真的好麻烦唉-_-~~~

然后写个for循环去转换字符即可

但是你以为这就是结束了?放屁,还有a[6]字符没有搞出来,后面听别的师傅说,flag写个限制0-9,小写字母,和大写字母的爆破脚本就行,爆破第6位

然后a[6]爆破出来后,a[6]=1.

最终答案 flag{e165421110ba03099a1c039337}

解毕!!!

总结:z3yyds!!!!

 

posted @ 2022-11-18 21:09  Qsons  阅读(191)  评论(0编辑  收藏  举报