【CTF】Reverse CSC2015 120

来源: Cyber Security Challenge 2015

题目: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

答案: TnVrZSB0aGUgV2hhbGVz

 

 

 

解题思路:

看一下文件格式,linux 64位的程序

【CTF】Reverse CSC2015 120_第1张图片

放到IDA里面找到main函数,可作出如下的分析,1.需要带参数运行程序 2.参数长度为20

【CTF】Reverse CSC2015 120_第2张图片

通过分析汇编代码可以发现ida分析const_return函数少了一个参数。

接下来我们可以分析出整个程序的框架:

将输入字符串转化为bit

按照预定的长度从后往前取出并换算成int

调用const_return进行校验

通过校验则输出flag

 

因为const_return里面调用的函数较多,逐个分析过于麻烦,这里可以通过编写so库来调用const_return函数,从而知道对于不同的输入可以获得对应返回值

【CTF】Reverse CSC2015 120_第3张图片

从这里我们可以依次获取被调用的12个函数的地址,因此可以编写如下的inject.c文件

【CTF】Reverse CSC2015 120_第4张图片

将inject.c 编译成inject.so

通过设置LD_PRELOAD让Crackme加载inject.so库

【CTF】Reverse CSC2015 120_第5张图片

Crackme执行了我们的init函数并成功输出了满足条件的值。考虑到字符串中01的个数比,这里我们选取最大的值来计算flag,python脚本如下

【CTF】Reverse CSC2015 120_第6张图片

运行即可得到flag

 

 

@Reference Bluecake

@Reference https://github.com/ctfs/write-ups-2015/tree/master/cyber-security-challenge-2015/reverse-engineering/reverse-that-binary

 

你可能感兴趣的:(sc)