BUU re easy strcmp wp

这道题很有意思

解题很简单,但是里面有一个小hook

解题

逻辑十分简单 就是将命令行输入的字符串参数比较

字符串直接显示 一看就没这么简单 运行输入果然显示Wrong
在这里插入图片描述

估计是存在加密,main函数中没有调用其他函数,想到可能存在hook

gdb动调单步调试的时候可以发现调用strcmp函数直接跳入了函数——0x6ea
在这里插入图片描述

在这里插入图片描述

0x6ea就是加密函数

在这里插入图片描述

第一个参数是输入值 第二个参数是

zer0pts{********CENSORED********}

猜想201090是hook之后的cmp函数 加密过程就是将输入值减去字符串201060

再与第二个参数比较 dump出数据后反过来加就能推出输入

要注意有的字节大于127 是以补码形式存在的负数 需要另行还原

a=[66, 9, 74, 73, 53, 67, 10, 65, 240, 25, 230, 11, 245, 242, 14, 11, 43, 40, 53, 74, 6, 58, 10, 79]
b=[42, 42, 42, 42, 42, 42, 42, 42, 67, 69, 78, 83, 79, 82, 69, 68, 42, 42, 42, 42, 42, 42, 42, 42]
f=''
for i in range(24):
    if a[i]<127:
        f+=chr(a[i]+b[i])
    else:
        f+=chr(b[i]-(((~(a[i]))&0xff)+1))
print(f)

得到结果

zer0pts{l3ts_m4k34DDSOUR_t0d4y}

原理

接下来瞧一瞧这个hook是如何实现的

main函数十分朴素 加密函数也没有任何交叉引用

还好程序规模不大 挨个函数看一看发现函数795有戏
在这里插入图片描述

这里看到201090地址直接赋值为strcmp函数的地址

这个函数存在于函数表889中

在这里插入图片描述

而889被函数init调用

在这里插入图片描述

这就说得通了 init是再main函数之前运行的初始化函数 程序在这里进行了hook

init函数对函数表889遍历 第一个函数6e0没有对相关变量进行更改

重新看下函数795
在这里插入图片描述

201090是我们刚刚在函数EA0中看到的最后return的函数 这里把他地址改变为strcmp的地址

201082双击跟进发现他是库函数表中strcmp函数的地址 将其改变为6EA函数的地址 实现hook

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值