划一波水,re1秒了,re2看起来挺有意思的就处理一下
main函数有一个花指令使得CreateFunction失败
190330 逆向-嘉韦思杯re2

jmp跳到了自己指令的中间部分,NOP掉即可
190330 逆向-嘉韦思杯re2

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

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

先看一下这个函数的CFG
190330 逆向-嘉韦思杯re2
比较像控制流平坦化或者说VM的效果

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

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

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

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

相关文章:

  • 2021-12-05
  • 2021-05-07
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-04-28
  • 2021-08-29
  • 2021-08-15
猜你喜欢
  • 2021-06-21
  • 2021-12-31
  • 2021-04-17
  • 2022-12-23
  • 2022-12-23
  • 2021-06-18
  • 2021-04-28
相关资源
相似解决方案