云影安全
YunYingSEC
RE
01
说在前面
阿巴阿巴阿巴……本菜鸟(黑鸟)终于给大家准时更新一篇了。今天我们来看一下逆向的工具使用。当然,本文只涉及基础操作,大佬勿喷。
02
正文
静态分析:
IDA软件界面:
快捷栏
返回上一界面(快捷键ESC)/回到下一界面
搜索,从左至右依次为“数值搜索”,“文本搜索”,“二进制搜索”。
转换为数组
视图菜单(View-Open subviews):
主窗口:
左侧为函数窗口,显示了程序中被IDA识别的所有段。在Segment一列中标注了这些段的类型,其中.text段为代码段,是逆向是重点关注的对象。Start一列是这些段的起始位置。在代码段中,有一个粗体显示的main,这是程序的主入口。逆向也从这里开始。
详细用法:
Disassembly(反汇编)
菜单栏-View-Open subviews-Disassembly
IDA加载程序后默认显示的窗口,在窗口标签上显示为“IDA View”。该窗口中显示的是程序的汇编码(Assembly)。下图是一个程序的主入口的汇编码。
在这里按空格,会切换至图形模式:
Generate pseudocode(生成伪代码):
菜单栏-View-Open subviews-Generate pseudocode
快捷键:选中函数后按F5(一定要在一个函数里面)
IDA中最常使用的功能,将难以看懂的汇编码转换为比较容易看懂的C语言代码。
双击函数,便会进入所点击函数的伪代码。
快捷键:
X:查看交叉引用
N:重命名函数或者参数
ESC:返回上一个窗口
……
IDA动态:
虽然IDA是一个静态分析工具,但是它同时具有动态调试功能,动态调试功能和下面要讲到的x64dbg的操作过程一样,所以我们留着,等一会说。
IDA是一个十分强大的工具,IDA有个一个比较全面的“手册”《IDA权威指南》。我们这里就只是把IDA最最简单的用法写出来,如果想要了解更多,可以看那本书或者再网上搜索更多资源
动态分析:
按道理来说,现在最著名的动态调试器应该是GDB和OD(OllyDbg),但是由于GDB的命令行操作和OD仅支持32位程序的缘故,这里我们动态调试主要是讲解x64dbg以及x32dbg的使用。但是x32dbg的使用与OD的使用大同小异,所以我们也就不单独讲解OD的使用了。
面板信息
反汇编面板窗口(Disassembler window):
反汇编面板窗口显示被调试的代码,一共四列:
地址(Address):显示双击行地址的“相对地址”,再双击显示标准地址
十六进制机器码(Hex dump):双击设置或取消断点
反汇编代码(Disassembly):显示汇编代码
注释(Comment):允许增加或编辑注释(快捷键“;”)
信息面板窗口(Information window):
在进行动态调试的过程中,显示与指令相关的各寄存器的值、API函数调用以及跳转信息、内存数据等
数据面板窗口(Dump window)
以十六进制显示内存数据。可以用“Ctrl + G”快速定位指定地址内存
寄存器面板窗口(Register window)
显示cpu各寄存器的值。
栈面板窗口(Stack window)
显示栈内容,即ESP指向地址的内容
基础操作:
快捷键 | 功能 |
F2 | 设置/取消断点 |
F7 | 单步步进(按一下,执行一句指令,遇到call函数,进入函数) |
F8 | 单步步进(按一下,执行一句指令,遇到call函数,不进入函数) |
F9 | 运行 |
F4 | 运行到所点击的指令 |
CTRL+ F9 | 直到出现ret指令中断 |
这里还有一个比较重要的内容就是“各种断点”,但这里就不展开讲解,大家可以看一下链接内容:
https://blog.csdn.net/qq_38684512/article/details/86615482
其他反编译工具:
我在入门指北的第一篇中就有提到,我们做题或者学习的过程中会遇到由各种各样的语言写的程序。他们往往就需要各自的工具进行反编译。
这里我只提供工具名称,具体用法大家还是看百度吧(太多了……偷个懒):
Java:jd-gui、jeb
python:uncomplye6
C# : C# REFLECTOR
Basic:VB Decompiler Pro
……
扫码关注我们
图文:云影安全
排版:云影安全