joydo / ReversingNotes

Personal Notes for Reversing Research(sometimes for Security)
MIT License
23 stars 2 forks source link

Binary Reversing Engineering Summary

Basics

编程语言要求

基础底层研究

Application 高级语言研究

英语水平要求

​ 口语,听力基本没啥要求,但是Reading一定要达标哦,至少也得是CET6以上的水准吧,虽然CET6也是很水的存在,因为这篇文章涉及到的资料90%都是英文资料呢,别怪我没提醒你哦!!

能力要求

​ 我是通信专业毕业,说实话大学期间也就学了点加减密与PKI的相关概念,原本是想从事C++开发的,后来误打误撞干起了逆向这个活,嗯,怎么说呢,这类活钻研精神是要有的,因为接触的很多代码都是偏底层,而且很多都需要结合软件涉及理念才能猜出来当时设计者的部分意图。不要害怕入门,看起来很难(的确深入进去很难),但是乐趣还是有的,而且能提升自身的能力,因此愿意进来的就好好干。但是还是要泼冷水先,没有钻研精神, 学个皮毛的,慎入,真的没啥意思。

Platforms

​ 本人从事Mobile移动逆向比较多,因此着重介绍下,Linux和MacOSX也会附带介绍

​ 移动端OWASP撰写的APP Security安全指南:

备注: 关于移动端安全审计,建议时间充沛的可以将OWASP(https://github.com/OWASP/owasp-mstg)该目录下所有文章都看看,会让你对整个移动端安全有个大体的认识和熟悉

Android

备注:可能部分内容会和Linux逆向重合,但是不影响知识总结

介绍

​ 要进入这个领域,必要的正向开发知识是要有的,了解开发者正向开发思维与Scheme,才能更好的逆向出来相关的设计思路与系统框架设计,包括算法设计等

​ 进入Android逆向之前,你需要搞清楚几个事情:

  • 什么是Android?
  • 什么是Android APK? 什么是Android APP Bundle?(2021版本)
  • Android APP 的Activity LifeCycle(生命周期)?
  • Android App主程序及extension?
  • Android Studio的使用
  • Android APP 可获取的设备权限?
  • 什么是Java反编译,什么是smali?
  • Android ART vs Android Dalvik?
  • Linux ELF so加载流程
  • Online 数据交互(流量定位,数据流格式,加减密)
  • Offline数据处理(核心处理算法,数据流deserialization)
  • Android 软件加壳保护?一代壳,二代壳?

入门资料

工具使用

反编译相关

Hooking相关

调试相关

备注:新版本Android在逆向过程中,大多数情况下调试主程序比较困难,即使借助IDA或 Smali字节码调试也不是很理想,因此大多数情况下会选择Hooking或者tracing处理与分析相关逻辑

其他常用工具或者解析库

IOS&MACOSX

介绍

​ 因为本人大多数情况在研究IOS相关逆向任务,因此这块篇幅会相对较长,同时会涉及到内核分析,因此谨慎参考,在进入IOS逆向之前,你需要了解如下信息:

  • 什么是IOS
  • 什么是IOS IPA文件,什么是Plist文件
  • MachO文件
  • IOS APP LifeCycle?
  • IOS主程序结构及Framework设计?
  • Xcode的使用
  • IOS APP 授权机制
  • IOS APP 签名算法及证书
  • ObjC语言的学习,ObjC Runtime的分析与学习
  • App 热备份,热Patch原理
  • Swift语言的学习
  • ObjC 反编译程序
  • Swift(强静态类型语言,深受C++印象)反编译程序
  • IOS APP调试(源码&非源码)
  • Online数据(同Android)
  • Offline数据(同Android)

入门资料

深入版

优秀的blog和学习资源列表

备注说明: IOS&MACOSX相关的CVE分析以及exploits暂时没有放入相关整合中,部分信息不好做归纳,有兴趣的可以私聊或者自行查验,Kernel Exploits属于高级研究了,目前我也是刚入门而已,有兴趣的可以一起学习

工具使用

反编译相关

Hooking相关

调试相关

其他常用工具及解析库

IOS软件保护

反调说明:

解析库

备注: Android&IOS 代码保护(混淆,VM方面会在高级逆向中提及)

其他工具

Linux

说明:

Linux能说的东西暂时不多,目前围绕的就是调试与符号分析,代码hook为主,主要讨论x86/x64版本,arm版本参考frida(https://frida.re/)

备注:Linux研究的内容一般偏向服务端,如果研究客户端,上述的内容+IDApro 大多数情况下都能解决相关问题

Go语言程序逆向:

备注: 正向开发是要有一定基础的,不然无法理解语言特性及其内存保护设计,分析起来会略显尴尬

Senior Reverse Engineering

反汇编-Tools

概念(https://en.wikipedia.org/wiki/Disassembler)

工具

反编译-Tools

概念(https://en.wikipedia.org/wiki/Decompiler)

DBI(二进制动态调试组件)-Tools

有时候静态分析总会有点力不从心,尤其是分析C/C++底层代码时,Object、Pointer、Class、vtable的设计,结构体的嵌套,符号的极度丢失,这个时候有必要借助动态调试框架或者工具能极大帮助我们定位相关功能模块,同时做好反调,反跟踪也是很重要的保护措施

备注:针对不同的分析应用,选用最合适的DBI,毕竟不是所有的都是完美支持的,可以尝试做customize

研究领域(非用心者,勿扰该领域)

符号执行框架

理论:

Toolsets:

备注;选用符号执行时,一定要选择最合适的,目前我这边用的最多的是miasm和angr,z3

反编译研究

反混淆、VM执行(主要利用symbolic execution&Taint Analysis)

说明:为了尽可能加大Hacker的逆向难度,往往关键代码,算法会尝试使用相关混淆技术,甚至定制VM-Code执行相关逻辑,以保护其中的逻辑,这里需要以OLLVM为开拓者为基础的相关混淆,以及VMProtect 进行VM虚拟化保护,开源社区提供了一部分references供大家参考,比如上面的符号执行方案就是其中之一。

备注: 既然OLLVM是基于LLVM的,因此 LLVM编译组件是要好好学的,这个是编译组件,clang/clang++,lldb等

LLVM公共网站(https://llvm.org/) - 目前本人研究领域之一

对抗混淆历史:

关于反编译的研究分析(主要基于开源项目): 说明: 目前分析市面上的反编译工具(RetDec,Ghidra,IDA),结果显示IDA效果是最好的,IDA 7.2后面引入 microcode机制,相较于之前的基于CTree机制的反编译,效果更加,而且对抗混淆效果最好,由于现有 市面的混淆代码越来越多(抖音,SnapChat(ollvm作者目前就职于该公司))(主要是基于LLVM IR的混淆较多)(开源框架:OLLVM,Hikari,基于二者的魔改等),给逆向与安全研究员带来不少 的困扰,因此有必要对相关反混淆机制进行研究,先将业界的目前的研究成功共享一下,有心学习编译器 相关以及IR相关的同学可以参考学习(难度较高)

IDA microcode 使用分析 IDA 创始人关于microcode的介绍:
https://recon.cx/2018/brussels/resources/slides/RECON-BRX-2018-Decompiler-internals-microcode.pdf

 * 2018年: 
    作者:Rolf Rolles(使用microcode首次对抗基于LLVM混淆)
    Blog:https://www.hex-rays.com/blog/hex-rays-microcode-api-vs-obfuscating-compiler/
    开源的插件地址:https://github.com/RolfRolles/HexRaysDeob(C++版本)
    因为是基于ida7.2的,因此需要逆向的版本ida反编译插件(见以下)

 * 2019年:
    作者:chrisps ida7.0 microcode的逆向版本(C++版本),与作者沟通过几次,详情参见GitHub issues内容,这个版本目前正是我们使用的版本,可以用这个版本编译上面的插件
    开源地址:https://github.com/chrisps/Hexext
       作者: Nadège Duval分享的microcode内部机制
       Blog: https://blog.amossys.fr/stage-2019-hexraysmicrocode.html

* 2020年:
    作者:ESET(研究机构)分享新型挖矿病毒遇到的混淆分析    Blog:https://www.welivesecurity.com/2020/03/19/stantinko-new-cryptominer-unique-obfuscation-techniques/
    开源地址:https://github.com/eset/stadeo(基于python与miasm框架)
    缺点:没有相关的sample,看代码实现有点点费劲
    作者:gaasedelen 2020年IDA contest获奖插件,基于ida7.2以上版本的microcode可视化分析
    开源地址:https://github.com/gaasedelen/lucid
    作者:eShard(研究机构)分享的可扩展式microcode插件(基于python接口)
    blog:https://eshard.com/posts/d810_blog_post_1/
    开源地址:https://gitlab.com/eshard/d810
    该版本有相关sample可供分析:https://gitlab.com/eshard/d810_samples
    国内情况:       
       目前的分析结论只是针对特定的混淆方案,如果多重分析方案共同起作用,国内目前开源的方案效果不明显

TODO:

  • ida 7.0逆向的microcode需要convert to python接口版本
  • ida 7.0逆向版本的接口亟待继续分析+优化(公司买不起正版的ida后果)
  • z3 符号执行继续深入分析
  • 布尔-算术bit级运算分析
  • LLVM IR 深入分析

对抗混淆Toolsets(只能作为思路分析,具体的还是要具体分析,不能生搬硬套):

VMProtect 研究:

1) VMProtect2-Detailed Analysis of the Virtual Machine Architecture-Part01(https://back.engineering/17/05/2021/)

2) VMProtect2-Complete Static Analysis-Part2(https://back.engineering/21/06/2021/)

3) VMProtect 2 Reverse Engineering-GitLab总结(https://githacks.org/vmp2)

4) static devirtualizer for VMProtect x64 3.x(VTIL-Core-based)(https://github.com/can1357/NoVmp)

5) VTIL-Core(Virtual-machine Translation Intermediate Language)(说实话,设计还是蛮新颖的,建议看看)(https://github.com/vtil-project/VTIL-Core)

6)VMP3逆向分析虚拟机指令(看雪论坛)(https://bbs.pediy.com/thread-266206.htm)

7) VMP3.X Introduction and Analysis

研究(目前研究领域一,主要涉及编译器,反编译器,布尔理论,混淆机制深究):

编译器组件研究:

References