二进制安全学习笔记(1)

2022-3-8 二进制安全学习笔记(1)

学习的导师是油管的LiveOverflow先生,他的二进制安全课程是真的不错,想学习这方面的话可以去看他的课程,我马上就看完了,这是基于我自己的理解而做成的笔记
二进制安全学习笔记(1)_第1张图片

二进制安全入门题目下载链接为:https://github.com/LiveOverflow/liveoverflow_youtube
使用的工具为radare2,下载链接:https://github.com/radareorg/radare2
还有gdb linux动态调试工具,下载方式为 apt install gdb

题目为:0x05_simple_crackme_intro_assembler
运行文件:./license_1
在这里插入图片描述
提示需要密钥
接下来我会用四种种工具共七种方法来破解题目

GDB

方法一

首先用gdb打开文件并查看汇编代码

二进制安全学习笔记(1)_第2张图片

set disassembly-flavor intel 参数让汇报代码美观一点
disassemble main  显示所有的汇编程序指令

二进制安全学习笔记(1)_第3张图片
汇编代码的结构和调用的过程非常的简单易懂,这里附上LiveOverflow讲解这些汇编指令的图

不用专业术语来分析,由图可知,如果运行文件,但不指定参数的话,会直接跳到0x400623的地址然后调用puts函数,打印提示的字符并退出程序。运行文件,并输入参数的话,在0x400607的地址会比较密钥与你输入的值是否一致,如果不一样,则跳到0x400617地址调用puts函数并打印出提示输入错误的字符,然后跳到0x400623地址并退出程序。如果输入正确,则跳到0x400670的地址,调用puts函数并打印出提示输入正确的字符,然后退出程序。

关键的地方就在0x400607的地址,这里是比较密钥和你输入的值的地址

我们在0x400607的地址下一个断点,这样程序在运行到这个地址时会停止继续运行下一步操作。

b *0x400607

在这里插入图片描述
然后随便输入参数并运行程序

r 123456

在这里插入图片描述
我们停在了断点处
二进制安全学习笔记(1)_第4张图片
最直接的方法是改变对比的值,使rax寄存器的值为0,因为你输入的值在前面被加加减减,如果最终rax寄存器的值为0,则程序会认为输入的值与密钥相同,最后可以拿到正确的提示字符
我们先查看所有寄存器的值

info registers

二进制安全学习笔记(1)_第5张图片
顺便提一句,在32位的程序里是eax,在64位程序里是rax,我们是64位程序,所以要修改rax的值
我们看到rax寄存器的值很大,肯定是错误的,我们修改rax的值试试

set $rax=0

二进制安全学习笔记(1)_第6张图片
修改成功了,然后我们一步一步运行程序

ni  

二进制安全学习笔记(1)_第7张图片
成功破解程序,这里只用输入一次ni即可,然后按回车键一步一步运行

方法二

在汇编语言里,指针就是寻找地址的,指到什么地址,就会运行该地址的参数,32位的程序指针存放在eip寄存器里,64位的程序指针存放在rip寄存器里
我们顺便下一个断点

b *0x400607

然后看看所有寄存器的值

info registers

二进制安全学习笔记(1)_第8张图片
我们指针指在0x400609的地址,我们程序就在0x400609的地方,我们可以修改指针的地址,来指向我们想指的地址
我们修改一下rip寄存器里的值,改成能成功破解程序的地方,地址为0x40060b
为何知道成功破解程序的地方就在0x40060b,请向上阅读我分析汇编语言的地方就知道了

set $rip = 0x40060b

二进制安全学习笔记(1)_第9张图片
成功修改了rip寄存器的值
然后我们继续运行程序

ni

二进制安全学习笔记(1)_第10张图片
成功破解程序

之后会更新其他软件来破解程序的方法,写了1个小时,求关注

你可能感兴趣的:(二进制安全笔记,网络,安全,经验分享,学习)