[Zer0pts2020]easy strcmp细节探究

这道题大多数的wp不知道这个程序是怎么跑的。

这道题是由一个知名的日本战队zer0pts出的,还是挺新颖,挺有意思的

总体感知

首先来看看ida里的情景

这就是main函数的所有了,很简单,感觉啥也没有,输入那串用于比较的字符当然是没用的。

那就看看a1是不是在之前有加密,调交叉引用到start函数

但是从这里找也没找到加密,所以,此题暗藏玄机呀。

函数挺少的,注意看下来不难发现下面这个函数绝对是加密函数

很多wp做到这里就结束了,但这不够!

 

实现细节分析

交叉引用说明,这个函数没有被引用,但是按照ida反编译的机制,不执行的代码理应不反编译,这么说,这个代码一定是通过某种方式运行了!

这个函数看似平平无奇,但是正是这个程序这么奇怪的关键。

它做了几件非常少见的事情,就是把strcmp这个函数的地址给某个参数了,还把它附给了qword_201090这个变量

另外还把另一个函数附给了off_201028这个参数。

跟随这些交叉引用,去看看这个程序到底是怎么隐藏自己的动机的。

竟然一下子到start里面的init函数了,有点迷惑,还是看汇编吧。

这里调用了一个函数,这后面的funcs_......就是这个函数的地址了,根据之前交叉引用的结果,这应该就是我们上面分析的那个函数了

也就是说,在系统调用start的时候,在这里隐秘地调用了这个函数,执行了上面一系列函数地址的赋值操作。

然后回来看我们上面找到的奇怪函数究竟干了什么?先看qword_201090的交叉引用表。

6eA这个函数就是一开始我们找到的疑似加密的函数。也就是说,那个没有交叉引用的函数,实际上是在程序运行过程中连上主函数的

进入加密函数

由于qword_201090已经装上了strcmp的地址,那么此时返回qword_201090实际上就是在调用strcmp函数了。

再看看off_201028的交叉引用表

点进去看汇编

发现这个_strcmp其实并非真正的strcmp,里面暗藏玄机呀!运行_strcmp的时候就会跳转到off_201028也就是其中装上的6EA函数(即加密函数)

现在逻辑全了

整个程序运行的流程

所以你输入的内容,就这样不知不觉的进行了加密,还是挺巧妙的~

最后答案虽然不重要,但是都做到这一步了,也就给了吧

答案

flag{l3ts_m4k3_4_DETOUR_t0d4y}

 

 

 

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值