黑客攻击-程序破解(1)
时间:2022-08-30 11:00:00
文章目录
-
-
- 一个简单的程序
- 生成可执行文件的过程
-
- 预处理过程
- 编译
- 汇编过程
- 链接过程
- 一步到位
- 破解test程序
-
- 运行程序
- 程序破解
- Radare2
- 查看程序信息
- 破解之旅
- 验证
- Rasm2
- web页面
- 公众号
-
一个简单的程序
如果是,程序功能是判断用户输入"burning",则输出"success",否则,输出"fail"。程序代码如下:
#include #include #include int main(){
char buff[1024]; char *password = "burning"; scanf("%s",buff); if (strncmp(password,buff,strlen(password)) == 0){
printf("success\n"); } else{
printf("fail\n"); } return 0; }
生成可执行文件的过程
预处理过程
以#开头的预编译指令主要处理源文件,经预编译处理后,得到预处理文件(如,test.i) ,它也是一个可读的文本文件 。
gcc –E test.c –o test.i
编译
预处理后获得的预处理文件(如 test.i)词法分析、语法分析、语义分析和优化后,生成汇编代码文件。编译后获得的汇编代码文件(如 test.s)或者可读的文本文件,CPU它无法理解和执行。
gcc -S test.i -o test.s
汇编过程
汇编程序(汇编器)用于将汇编语言源程序转换为机器指令序列(机器语言程序)。汇编结果是可重定位的目标文件(如 test.o),它包含不可读的二进制代码,必须使用相应的工具软件查看其内容。
gcc –c test.s –o test.o
预处理、编译和汇编三个过程针对一个模块(一个模块).c处理文件,获得相应的可重定位目标文件(一个.o文件)。
链接过程
合并多个可重定位目标文件生成可执行目标文件
一步到位
直接将.c文件转化为可执行目标程序(ELF)。
gcc test.c -o test
破解test程序
运行程序
程序破解
如果输入任何内容,都显示success,则说明test程序破解成功。
Radare2
Radare2在逆向方面是可以比肩IDA Pro的,从学习的角度来说,更建议使用Radare2。因为IDA的F5功能具有反汇编的功能可以直接把汇编代码翻译成C语言,这样反倒不会关注汇编语言了,同时在Linux下,IDA破解版也不太好用。
在这里对Radare2进行简单的介绍。
查看程序信息
使用如下rabin2 -I test
命令查看test程序信息。
通过rabin2 -z test
查看来自数据段的字符串。
破解之旅
- 打开Radare2。
r2 -w test
- 分析信息。
aa
- 查看所有的flag。Radare2会将所有有用的信息和特定的名字绑定在一起,比如区段、函数、符号、字符串,这些都被称作 ‘flags’, flags 被整合进 ,一个 flag 是所有类似特征的集合。
fs
- 查看字符串引用
1.fs strings;f
输出结果是:0x000008ef 8 str.success
2.axt @@ str.sucess
‘axt’ 命令用来在 data/code段里找寻某个地址相关的引用 - 地址跳转
s 0x81c
- 查看汇编代码
pdf
- 进入可视化页面,查看流程图。
v
- 通过流程图,很容易看出存在条件跳转,如果能够让所有的条件都走success流程,那么程序就算破解成功了。
- 修改
jne 0x82a
为jne 0x81c
,则无论怎样,都会走success流程而不会走fail的流程。 - 跳转到
jne 0x82a
。s 0x0000081a
- 修改指令,所有流程都走0x81c。
wx 7500
- 查看修改内容。
pd 3
- 退出。
q
验证
运行test程序,无论输入什么内容,都是会输出success的!!!!
Rasm2
rasm2 is an inline assembler/disassembler。在上面修改代码的时候,是通过wx 7500
来让所有的流程都走success流程的,这个机器码7500是怎么来的?通过如下的命令就可以获得,其中的0x02是0x81c和0x82a的偏移。
rasm2 -a x86 -b 32 "jne 0x02"
web页面
Radare2自带了内嵌的Web服务器,服务器提供了纯html/js接口可发送ajax请求。可以使用下面的命令进行启动:
r2 -c=H test
界面效果如下:
公众号
更多内容,欢迎关注我的公众号:无情剑客。