radare2高阶玩法

关于Radare2:

radare2是一个开源的逆向工程和二进制分析框架,包括反汇编、分析数据、打补丁、比较数据、搜索、替换、虚拟化等等,同时具备超强的脚本加载能力,它可以运行在几乎所有主流的平台(GNU/Linux, .Windows *BSD, iOS, OSX, Solaris…)并且支持很多的cpu架构以及文件格式。 radare2工程是由一系列的组件构成,这些组件可以在 radare2 界面或者单独被使用–比如我们将要在接下来实验中使用到的rahash2, rabin2, ragg2三个组件,所有这些组件赋予了 radare2 强大的静态以及动态分析、十六进制编辑以及溢出漏洞挖掘的能力。

Kali已经自带radare2
在这里插入图片描述
通过radare2来解决GameBoy ROM挑战的一个项目:simple.gb

Kali:
首先我们在radare2打开二进制文件,检查它的架构、格式
在这里插入图片描述
(i命令给出关于二进制文件的信息,~是r2内部的grep命令)

由上图可以看出这是一个GameBoy的ROM,那么在阅读了它的一些指令集之后我们该去完成这次挑战了
Win:
第一件事情就是在GameBoy模拟器中打开这个ROM
首先需要安装模拟器
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

这是一个简单的游戏,通过使用箭头键,可以分别增加/减少5位数。我们只需要找到正确的密码就可以了
随机选择数字,然后按回车键,会发现提示fail
在这里插入图片描述
接下来我们开始分析代码并搜索检查输入的函数

分析二进制文件
切换到kali

在这里插入图片描述
(izzq会打印出存在于整个二进制文件中的字符串)
在这里插入图片描述
现在我们知道了fail的地址,接下来我们找到引用它的地方。我们使用grep搜索查找
在这里插入图片描述
(pd代表打印出反汇编代码print disassembly)
我们可以看到在0x2e4引用,所以我们搜索这个地址,并打印该函数:
在这里插入图片描述
(s用于搜索地址,pdf用于打印出反汇编函数)

我们可以看到,radare2识别出我们的函数从0x274开始。在底部有一些比较操作,然后跳转到失败的消息或者其他消息(字符串在0x02ee),我们去那儿看看。
在这里插入图片描述
(ps意思是打印字符串,@是一个临时搜索)

我们找到了win

那么我们给0x274重命名为check_input,然后开始分析
依次输入
在这里插入图片描述
(afn意思是分析函数名称,VV将会打开视图图形化模式)
进入视图界面
在这里插入图片描述

可以看到,函数结合了很多跳转和if条件语句

我们发现函数检查每个数字,并将其与正确的比较。在左边我们可以看到有效数字。让我们快速查看这些块。我们使用p在不同视图之间再次切换,直到达到常规图形模式。
在这里插入图片描述
简单地看了一下,大概地明白程序的意思了:二进制程序检查是否每个位置上的数字都与特定的值相等。使用cmp imm命令按照这个顺序:3,7,5,1,9检查。

切换到win:
我们在模拟器中输入看看
在这里插入图片描述
或者
在这里插入图片描述
都不行
那我们还是仔细看看函数吧
切换到kali:
在这里插入图片描述
我们分析下在第一个块中的汇编代码:
在第一个块中,0x4被移动到hl(ld指令),而hl又移动到寄存器bc,然后bc中引用的值与0x3进行比较。bc指向我们的输入,因此此处的检查功能检查bc+4是否等于0x3。在下一个块中,我们可以看到返回到其原始值的bc现在增加了两次(Inc)(bc+2),它所引用的值与0x7进行了比较。在示例的最后一个块中,bc返回其初始值,然后递增一次,其引用值与0x5比较。
那么逻辑就应该是这样的:
def check_password (guess):
if guess[4]==3 and guess[2]==7 and guess[1]==5 andguess[3]==1 and guess[0]==9:
print “WIN!”
else:
print “FAIL!”
由上述代码代码逻辑可以看出,输入的数字作为数组排列的话,应该为95713

切换到win,输入95713,可以看到成功输出win

在这里插入图片描述

参考链接:
radare2官网:
www.radare.org
r2高阶玩法:
https://www.megabeets.net/reverse-engineering-a-gameboy-rom-with-radare2/

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值