标签:
题目:Crackme
类型: Reverse
分数: 120
难度:中(难中易三个级别)
描述: We found this binary, but we lost the password. Please retrieve it for us.
题目链接:https://github.com/ctfs/write-ups-2015/tree/master/cyber-security-challenge-2015/reverse-engineering/reverse-that-binary
?
?
?
解题思路:
看一下文件格式,linux 64位的程序
放到IDA里面找到main函数,可作出如下的分析,1.需要带参数运行程序 2.参数长度为20
通过分析汇编代码可以发现ida分析const_return函数少了一个参数。
接下来我们可以分析出整个程序的框架:
将输入字符串转化为bit
按照预定的长度从后往前取出并换算成int
调用const_return进行校验
通过校验则输出flag
?
因为const_return里面调用的函数较多,逐个分析过于麻烦,这里可以通过编写so库来调用const_return函数,从而知道对于不同的输入可以获得对应返回值
从这里我们可以依次获取被调用的12个函数的地址,因此可以编写如下的inject.c文件
将inject.c 编译成inject.so
通过设置LD_PRELOAD让Crackme加载inject.so库
Crackme执行了我们的init函数并成功输出了满足条件的值。考虑到字符串中01的个数比,这里我们选取最大的值来计算flag,python脚本如下
运行即可得到flag
?
?
@Reference Bluecake
@Reference https://github.com/ctfs/write-ups-2015/tree/master/cyber-security-challenge-2015/reverse-engineering/reverse-that-binary
?
标签:
原文地址:http://www.cnblogs.com/windcarp/p/4452286.html