「Debug」- 软件分析与调试方法

更新日期:2020年09月11日
@IGNORECHANGE

strace

Reverse Engineering

软件分析技术整理

为了CTF比赛,如何学习逆向和反汇编?

基于 x86 指令集的 Windows PC 平台

学习路线:
1)汇编:先学汇编!!必须学!!从 8086 汇编开始学,再到 32 位,有兴趣可以玩玩64位。
2)调试技能(OD、Windbg这些)
3)编程:编程技能(WinAPI多多少少要知道一点,MSDN文档一定要会看)
4)脱壳
5)漏洞分析

编程 => 密码学 => 软件工程 => 编译器

非编译型语言:逆向的难度要小很多

书籍推荐:
1)《汇编语言 第三版 王爽》
2)《x86 汇编语言 从实模式到保护模式》(可选)
3)《加密与解密》
4)《0day安全:软件漏洞分析技术》
5)Reverse Engineering for Beginners
1)Intel 微处理器
2)Windows 环境下 32 位汇编语言程序设计
3)Windows PE 权威指南
4)C++ 反汇编与逆向分析技术揭秘
5)加密与解密第三版
6)IDA Pro 权威指南

需要掌握的工具:
静态反汇编工具: IDA Pro
动态反汇编工具: ollydbg
内核调试工具: windbg (Windows)

实战操作:
1)逆向水平通过看书是无法提升的,唯一的捷径就是多练习
2)在逆向完后,尽量写分析文章整理思路,这属于学习总结的一个过程;
3)平时多看分析文章,吾爱,看雪,安全博客-阿里聚安全、百度安全应急响应中心、安全客 - 有思想的安全新媒体;

基于 ARM 指令集的 Android 平台

1)熟知多种编程语言
众所周知,Android 是基于 Linux 内核的,App大部分要用 Java 开发,小部分会用到jni,其中涉及到 Java、C/C++,意味着你需要学习多门“汇编”语言

2)学习 Smali 语法
Android App 大部分是基于 Java 开发的,实际上并不是用的Java的原生虚拟机,Android的解释器是Google自己开发的,叫做Dalvik(不谈ART), 名字由来很玄学,这里不过多探讨。Dalvik虚拟机跑的指令集是Dalvik指令集,一般反编译后用smali语法来表示。所以学习 Android 逆向的第一件事情就是学习 Smali 语法。

3)需要使用多种工具
如何反编译一个APK? 如果你去网上搜索的话,一般博客都会写各种命令行工具,一言以蔽之就是要用多种工具才能成功反编译一个 APK 文件。其实网上有很多集成化工具,比如:Android Killer,拖入Apk即可反编译。JEB也是一门不错的工具,拖入APK即可,在汇编区域按下Tab键就可以得到Java源码,JEB反编译出来的源码很美!

4)学习 ARM 汇编指令
学习完 Smali 逆向之后呢? 你如果想深入学习不想止步于破解几个小游戏,那就要去学习ARM汇编!ARM才是移动平台的老大!ARM是一种指令集,这种指令集的CPU普遍用于移动设备、嵌入式设备,也就是说,我们使用的手机绝大部分都是用ARM指令集的处理器,所以学习ARM钱途光明啊~实用性不多讲,ARM逆向能赚很多钱是真的,这个不多讲了。

编译型语言 C++ 的软件分析

编译型语言逆向最难的是 C++,可以学习:
1)《C++反汇编与逆向分析技术揭秘》
2)Reversing C++
3)Reversing Microsoft Visual C++ Part II: Classes, Methods and RTTI
4)【原创】RTTI结构详细分析(VC++)
5)【原创】易语言消息机制分析(消息拦截原理)
6)【原创】MFC消息拦截分析(+示例程序分析)
7)【原创】逆向分析 C++继承内存分布(带虚函数) 及动态绑定实现
5)【原创】UltraISO注册算法&keygen分析(已算出一组注册码)

编译型语言 Java 的软件分析

Static and Dynamic Reverse Engineering Techniques for Java Software Systems


ToC

软件分析技术整理

基于 x86 指令集的 Windows PC 平台

基于 ARM 指令集的 Android 平台

编译型语言 C++ 的软件分析

编译型语言 Java 的软件分析