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” free book
https://beginners.re/RE4B-CN-partial/html/RE4B-CN-partial.html%20
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? 如果你去网上搜索的话,一般博客都会写各种命令行工具,一言以蔽之就是要用[……]