静态逆向简单的ELF
来源:互联网 发布:python popen pipe 编辑:程序博客网 时间:2024/06/05 11:20
看到csdn中一篇文章:http://blog.csdn.net/fisher_jiang/article/details/6783922,该文章使用动态调试进行破解找到密码。由于自己对linux不熟悉需要学习段时间,就使用ida静态反汇编进行逆向。
要破解的文件链接:hackme
1、运行该程序,查看运行效果:
运行之后屏幕打印出:Password,Please?
随便输入字符串:123、111
可以确认错误提示为:Oops..
2、根据以上执行逻辑,我们可以判断输入密码前面的逻辑为显示字符串“Password,Please?”,通过快捷键"Alt + T" 搜索字符串"please",如下图:
搜索结果如下图:
3、查找对变量aPasswordPlease的引用,使用快捷键"Ctrl + x",如下图:
如上图只有一处引用,双击改行跳转调用处,如下图:
为了方便查看代码逻辑,光标放到该行之后按空格键跳转到ida调用逻辑图,如下图所示:
查看这个调用图可以分析函数sub_8048591()就是判断密码是否正确。
4、为了能够更方便分析代码,点击tab键切换到伪代码窗口,如下图所示。
通过以上伪代码可以分析代码逻辑:
(1) v10保存输入字符数组;
(2) byte_804869c为校验字符串,如下图:
(3) 随机10次选取一个位置index,进行index+1次的1828812941 * v4 + 12345运算,元算结果与输入数组中的index位进行异或运算,运算结果与byte_804869c中index对应元素对比,不同则失败。
5、通过的逻辑分析,写一个程序计算出密码。逻辑如下:
#include <stdlib.h>#include <stdio.h>void test(){char check_array[] = {0x6A, 0xFB, 0x4C, 0x8D,0x58, 0x0F, 0xD4, 0xE8,0x94, 0x98, 0xEE, 0x6B,0x18, 0x30, 0xE0, 0x55,0xC5, 0x28, 0x0E, 0x90};char input[124] = { 0 };__int32 index = 0;int count = 19;char v5;int v9;int v7;do {int v4 = 0;v5 = check_array[index];v7 = 0;while (v7 < index + 1){++v7;v4 = 1828812941 * v4 + 12345;}printf("%c", ((unsigned __int8)v5 ^ (unsigned __int8)v4));} while (index++ < 19);}int main(){test(); return 0;}
6、校验密码是否为"SesameOpenYourself!",结果如下图所示:
总结:破解密码用的关键思想是:
a = b^c
b = a^c
c = a^b
- 静态逆向简单的ELF
- CTF 【每日一题20160627】简单的ELF逆向
- ELF文件逆向IDA的使用
- ELF可执行文件的静态注入
- 静态库的逆向
- 逆向ELF文件
- ELF文件-逆向工具
- 一个简单的逆向
- ELF格式文件特点的简单说明
- 最简单的elf文件分析
- 题目:最简单的逆向
- 一个简单的c#逆向
- 记一次简单的逆向
- 简单赋值语句的逆向
- elf静态链接实例
- 静态库,共享库,动态库 elf格式的
- 逆向工程-对native层的一次简单逆向实践
- 简单逆向
- caffe源码学习
- Java的super关键字
- Python开发Kettle做大数据ETL(前期准备)
- java.sql.SQLException: ORA-03115: 不支持的网络数据类型或表示法
- hdu1864(简单的01背包)
- 静态逆向简单的ELF
- linux下查看下操作系统位数和发行版本
- 指向类成员的指针
- 二叉树遍历
- 字符串流
- resteasy 与spring集成
- 前端开发总结(五)
- 6月13号——Java的语言基础
- opencv2 使用鼠标绘制矩形并截取和保存矩形区域图像