> For the complete documentation index, see [llms.txt](https://tommy-3.gitbook.io/my_reverse_book/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tommy-3.gitbook.io/my_reverse_book/my_reverse_notes/0.-zhe-ge-bi-ji-xie-le-shen-me.md).

# 0. 这个笔记写了什么

## 开篇故事

开篇，我要先讲一个记忆深处的故事：

好多好多年前，在一个风和日丽的晚上；我们一群人走在黑漆漆的校园里，这时候丘比龙学长说： "你们知道吗，至今为止，我只见过三个人肉逆向机，一个是我的学长 monster，一个是清华的xxx, 一个是...."

那时懵懵懂懂的我啥也不懂，不理解"人肉逆向机"的含义。

"那怎么才能成为人肉逆向机呢？"

"我也不知道，但是我知道，无一例外，这几个人在十几岁开始就研究逆向了"

“那时候我还在玩泥巴咧！”

这个故事到现在已经10多年了，至今我也不知道怎么成为"人肉逆向机"。

也许是天赋的问题？就好像“我看懂了，因此我知道我学不会”，这种类型兵种的根本没有重复批量生产的方法论？每个人都独一无二。

这个系列的文章是我对逆向工作的一些简单的总结，以及“我理想中的逆向世界”，

**祝各位大佬人人都能成为究极人肉逆向机，看到汇编后源代码就从脑子往外冒。**

## 与同类作品有啥区别？

**“我觉得，琢磨源码与二进制的对应关系是有乐趣的”**

国内的几个解放军工程学院的老师也有出版反编译器设计的old-school书籍，看着真是熟悉的感觉，回到了学习什么《信号与系统》、《通信原理》的时候。

这些教材“与其说是一本教学用的书籍，更像是博士毕业论文”

大量的程序分析算法，配合上学术论文的引用，很难看得下去。对于我这种不算学术界的人，学起来体验十分困难。

对于我们平时的工作生活，这不会直接使用这些定理与算法，明白反编译器为什么这么做，明确好输入与输出，确认使用的场景，更加重要。

因此，进阶的反编译教学或许应该长这样：

* 最重要的，一定要有IDA的真实案例
* 用提出问题 + 解决问题的方法叙述
* 不要复杂的算法，不要学术语言，要有乐趣
* 小白也能看懂+学到知识（嗯～会尽最大的能力做到的）
* 学到的知识在实战中有意义！

## 为啥要学习这些知识？

当我还是一个小白的时候，只会用IDA的F5进行逆向；一旦F5趴窝了那我也歇菜了。

什么Angr，中间语言，OLLVM ，VMP等等，看的我是一脑袋浆糊。这还不是最麻烦的，最麻烦的是不知道自己哪里不懂。也不知道怎么接下去学习。

我希望通过这本书提供一个过渡的桥梁，通过理解IDA的F5或者其它反编译器类似的技术的核心，以此来逐渐脱离对F5的依赖，掌握静态逆向的核心技术—> 反“编译器”。

通过对反编译理论的学习，理解程序为什么编译成这个样子，怎么还原回去；

熟悉反编译器的架构，最终当F5出问题了，能够分析情况并解决问题，甚至写出自己的F5来。

同时，实践的章节还将一步一步的教会基于ida、ghidra、angr等工具自己开发自己的逆向能力+逆向插件。

## 其它的？

除了关于反编译技术的理论补充，也会加入一些深度混淆对抗的讨论章节。

随着反编译混淆技术的发展，变种OLLVM，高强度VMP等技术的进一步发展，逆向对抗的难度逐渐越来越深。

因此需要从最基本的混淆，到复杂的OLLVM/VMP等；去设计一些针对不同的变种强混淆的深度定制还原技术，寻找更好的解决方案。
