跟羽夏学 Ghidra ——导航
写在前面
此系列是本人一个字一个字码出来的,包括示例和实验截图。本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正。 如有好的建议,欢迎反馈。码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作。如想转载,请把我的转载信息附在文章后面,并声明我的个人信息和本人博客地址即可,但必须事先通知我。
你如果是从中间插过来看的,请仔细阅读 跟羽夏学 Ghidra ——简述 ,方便学习本教程。请认准 博客园 的 寂静的羽夏 ,目前仅在该平台发布。
前言
导航浏览是逆向者的基本能力,在源码完全未知的情况下,该能力是十分重要的。在介绍完如何导航分析二进制之后,我们会以逆向的角度,来审视crakeMe
这个函数。
来回横跳
在我们在不同的函数之间进行切换的时候,有时候错过想回去看看的时候,再重新点回去一是麻烦,二是不准,那么咋办呢?
图中,高亮的两个按钮就是负责这个事情的。向左的箭头是回到上一次的位置Alt + 左方向键
,向右的反之Alt + 右方向键
。这两个功能会在之后经常用到。
搜索
搜索和搜集信息的能力是在逆向中最常用也是最重要的能力之一。
在程序中,我们可以搜索字符串,定位函数位置:
里面有很多选项,英文不会的话翻译一下,然后记住,因为专业常用的单词就几个,会了就会了。
其次,我们还可以搜内存的数据,来进行定位:
当然,这些功能应该不会特别常用,不过在特殊的场合还是有用的,比如通过特征码搜索指定函数、字符串等等。这所有的功能全部在Search
菜单当中。
搜集信息
在逆向过程中,搜集信息也是十分重要的,比如字符串。
在Search
菜单中选中For Strings...
,将会弹出窗体:
这个是设置搜索属性的,如果有特殊的自行设置,如果没有,直接默认搜索,在本示例会得到如下内容:
Ghidra
也能搜索常量,在Search
菜单中选中For Scalars...
:
选好常量范围后,然后点击搜索,会得到如下结果:
不过,搜索常量似乎用处不大。
对于某个位置的引用,我想获得分析得到的所有直接引用,并选择跳转到哪一个,在Search
菜单中选中For Direct Reference...
:
不过查引用的时候一般不会用这个,我们更偏爱使用这种方式查找:
我们既可以获取该地址的引用,如果是函数地址,也能获取到函数的引用。
Ghidra
与此同时也支持指令模式搜索,在Search
菜单中选中For Instruction Patterns...
:
不过,要使用这个,首先需要要点击编辑按钮(笔的图标),输入硬编码之后确认,然后点击搜索即可:
其他
不知道你有没有注意到工具栏上几个小小的字母图标:
这几个图标有自己的作用,不过通过工具英文提示也明白啥作用,这里就总结一下(从左到右依次):
- 设置方向:通过该按钮可以更改跳转的方向,这个仅对图上的按钮有效,方向指示和图标一致。
- 下一条指令:跳转到下一条指令。通过实验得知,它会跳转到匹配到非上一条为指令的指令。
The Ghidra Book
并没有解释清楚。 - 下一条数据:跳转到下一条数据。
- 下一个未定义:跳转到下一个未定义类型的数据。
- 下一个标签:跳转到下一个标签。
- 下一个函数:跳转到下一个函数。
- 下一个非函数指令:跳转到下一个不属于函数内部的指令。
- 下一个不同字节值:跳转到下一个不同的字节的值。
- 下一个书签:跳转到下一个书签。
实验
学习了这些,我们开始从逆向者的角度,来开始分析。
在开始破解实验的时候,我们看到显示了一个字符串请输入密钥:
,这个是我们的一个关键突破口,如果能找到,会有一定的概率破解(不排除有假的)。
然后,我们开始菜单Search
-For Strings...
,开始搜索,最终我们定位到位置:
跳转到这个位置:
s__004021ff XREF[2]: getKey:004014b4(*),
getKey:004014b4(*)
004021ff e8 af ds u8"请输入密钥:"
b7 e8
be 93
//
// .eh_frame_hdr
// SHT_PROGBITS [0x402214 - 0x40228f]
// ram:00402214-ram:0040228f
//
************************************************
* Exception Handler Frame Header *
************************************************
__GNU_EH_FRAME_HDR XREF[2]: 00400210(*),
_elfSectionHeaders::00000
00402214 01 1b eh_fra Exception Handler Frame H
03 3b
我们看到这里有交叉引用,是从getKey
函数来的,跟过去:
int getKey(void)
{
int local_c;
puts("请输入密钥:");
__isoc99_scanf("%d",&local_c);
return local_c;
}
根据反编译结果,理解了该函数的功能,我们需要分析一下该函数的引用:
通过简单的分析,我们推测CALL getKey
这个地址最有嫌疑,我们跟过去:
bool crackMe(void)
{
int iVar1;
iVar1 = getKey();
return iVar1 == 0x123456;
}
可以看出,拿到返回值之后,会判断是否和0x123456
相等,并将比较结果返回。
我们如法炮制,最终跟到了这个位置(局部):
iVar1 = crackMe();
if (iVar1 == 0) {
puts("抱歉,没成功哦,再试一次!");
}
else {
puts(">> 祝贺破解成功!");
}
此时,我们明白了结果。只要输入的值与0x123456
相等就通过,由于是十进制输入,就是1193046
。输进去就是下面的结果:
至此,该实验结束。
小结
本篇博文我们介绍了如何导航并搜集自己所需要的信息。不过逆向并没有这么简单,该示例并不难,且有源码,有前面教程分析的基础上,看起来相当简单,不信?你直接搜字符串都不一定搜得到。
下一篇
跟羽夏学 Ghidra ——导航的更多相关文章
- 跟羽夏学 Ghidra ——引用
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...
- 跟羽夏学 Ghidra ——窗口
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...
- 跟羽夏学 Ghidra ——工具
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...
- 跟羽夏学 Ghidra ——初识
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...
- 跟羽夏学 Ghidra ——数据
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...
- 跟羽夏学 Ghidra ——调试
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...
- (二)羽夏看C语言——容器
写在前面 由于此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇 ...
- 羽夏看Win系统内核——保护模式篇
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...
- 羽夏看Win系统内核——系统调用篇
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...
随机推荐
- 论文阅读 GloDyNE Global Topology Preserving Dynamic Network Embedding
11 GloDyNE Global Topology Preserving Dynamic Network Embedding link:http://arxiv.org/abs/2008.01935 ...
- C# 11 的新特性和改进前瞻
前言 .NET 7 的开发还剩下一个多月就要进入 RC,C# 11 的新特性和改进也即将敲定.在这个时间点上,不少新特性都已经实现完毕并合并入主分支 C# 11 包含的新特性和改进非常多,类型系统相比 ...
- javaWeb,web服务器
一. 1.ASP 国内最早最流行的语言就是ASP:微软研发 在HTML中嵌套了VB脚本,ASP+COM(网页元素) 在ASP开发中,基本一个业务就有几千行代码,页面机器混乱 维护成本高 <h1& ...
- 1 什么是Zookeeper 能干什么
1 Zookeeper 概述 美团,饿了么,淘宝,58 同城等等应用都是 zookeeper 的现实生活版 博主我开了个饭店,如何才能让大家都能吃到我们的饭菜?需要入驻美团,这样大家就可以在美团 ap ...
- 我为 Netty 贡献源码 | 且看 Netty 如何应对 TCP 连接的正常关闭,异常关闭,半关闭场景
欢迎关注公众号:bin的技术小屋,本文图片加载不出来的话可查看公众号原文 本系列Netty源码解析文章基于 4.1.56.Final版本 写在前面..... 本文是笔者肉眼盯 Bug 系列的第三弹,前 ...
- GitLab:Your account has been blocked.
使用git pull 出现"GitLab:Your account has been blocked."错误 背景 多人使用服务器同一用户,在~/.ssh 目录下的公私钥是之前一个 ...
- 一文搞定Vue2组件通信
vue 组件通信方式 父组件将自己的状态分享给子组件使用: 方法:父组件通过子标签传递数据,子组件通过 props 接收 子组件改变父组件的状态; 方法:父组件在子标签上通过@abc 提供一个改变自身 ...
- Windows环境下部署MySQL主从并模拟升级到8.0
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 一.部署实例 1.下载2个软件 http://ftp.kaist.ac.kr/mysql/Downloads/MySQL- ...
- JavaScript 里三个点 ...,可不是省略号啊···
摘要:Three dots ( - ) in JavaScript. 本文分享自华为云社区<JavaScript 里三个点 ... 的用法>,作者: Jerry Wang . Rest P ...
- Redis 14 发布订阅
参考源 https://www.bilibili.com/video/BV1S54y1R7SB?spm_id_from=333.999.0.0 版本 本文章基于 Redis 6.2.6 概述 Redi ...