190330 逆向-嘉韦思杯re2

83 篇文章 3 订阅

划一波水,re1秒了,re2看起来挺有意思的就处理一下
main函数有一个花指令使得CreateFunction失败
在这里插入图片描述

jmp跳到了自己指令的中间部分,NOP掉即可
在这里插入图片描述

然后重新在开头按P或者右键CreateFunction就可以F5了

main函数里没啥好说的,这个花不去也无所谓,反正汇编也看得出来call 8048580要返回1才可Correct

先看一下这个函数的CFG
在这里插入图片描述
比较像控制流平坦化或者说VM的效果

简单阅读了一下代码,发现它逐个取值,然后switch取出的值,并判断下标,如果不一致则直接return 0;否则对新的下标赋值并进行循环

跟以前见到的OLLVM中的控制平坦化有一些区别,似乎像在每次取值后又做了语句块的分发…
没有什么好的反混淆思路,简单扫了一下代码由于取值是逐字符的、并且当字符不符合要求时会直接return 所以可以直接上pintools

由于并没有对输入长度进行校验,所以并无法获知长度 于是只能逐字符硬干
这里存在一个多解的情况
当index=12时可以直接通过字符k来return 1,后可以接任意字符
当s[12]=‘6’时可以通过结尾字符’\n’来return 1
在这里插入图片描述

之后去队里讨论了下,pizza觉得应该视作虚拟机然后把每个handler搞出来,最后把自己输入的字符串视作机器码来求解
我觉得是个思路但不太好处理…因为对于这个题目来说handler大多都是一次性的,没有必要挨个去看_(:з」∠)等一个讨论

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值