程序功能是判断用户输入,如果是"burning",则输出"success",否则,输出"fail"。程序代码如下:
登录后复制
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
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
如果输入任何内容,都显示success,则说明test程序破解成功。
Radare2在逆向方面是可以比肩IDA Pro的,从学习的角度来说,更建议使用Radare2。因为IDA的F5功能具有反汇编的功能可以直接把汇编代码翻译成C语言,这样反倒不会关注汇编语言了,同时在Linux下,IDA破解版也不太好用。
在 这里对Radare2进行简单的介绍。
使用如下rabin2 -I test
命令查看test程序信息。
通过rabin2 -z test
查看来自数据段的字符串。
r2 -w test
aa
fs
fs strings;f
输出结果是:0x000008ef 8 str.successaxt @@ str.sucess
‘axt’ 命令用来在 data/code段里找寻某个地址相关的引用s 0x81c
pdf
v
jne 0x82a
为jne 0x81c
,则无论怎样,都会走success流程而不会走fail的流程。jne 0x82a
。 s 0x0000081a
wx 7500
pd 3
q
运行test程序,无论输入什么内容,都是会输出success的!!!!
rasm2 is an inline assembler/disassembler。在上面修改代码的时候,是通过wx 7500
来让所有的流程都走success流程的,这个机器码7500是怎么来的?通过如下的命令就可以获得,其中的0x02是0x81c和0x82a的偏移。
登录后复制
rasm2 -a x86 -b 32 "jne 0x02"
Radare2自带了内嵌的Web服务器,服务器提供了纯html/js接口可发送ajax请求。可以使用下面的命令进行启动:
登录后复制
r2 -c=H test
界面效果如下:
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删