-
-
[原创]编译,反编译,程序分析的推荐资料与备忘
-
发表于:
2019-3-21 19:31
10811
-
如题,不说废话,不求全,不求最好,只推荐我学习过程中感觉对我有帮助的资料。
程序分析大概是两个方法:静态分析,动态分析。然后动态分析还需要结合一些虚拟化相关的东西。
学习过程无非也就是把这两个方法学会,再加以练习。
学完了可以用来挖洞,逆向算法,分析样本,等等等等。
静态分析
静态分析的基础用的主要是编译器理论那套东西,个人感觉比较好的是
《编译器设计之路》(我不是托)
https://book.douban.com/subject/5907794/
重点是类型分析,控制流分析,数据流分析,ast到IL的过程。
另外一定要看一看 SSA (Static single assignment)这种分析方法,哪怕你看不懂完整的算法,了解一下思路,也是非常有用的。
参考 http://ssabook.gforge.inria.fr/latest/book.pdf 。虽然我也没看明白全部。
有个之前常用的C#反编译器的算法,就是某种形式的SSA。
推荐看看 yinwang 的 pysonar 的思路。
严重建议不要把龙虎鲸书作为入门书籍,一方面是内容过时,一方面是写的太难懂了。
动态分析
动态数据流分析——污点分析。污点分析这玩意的思路太简单了,简单到甚至都不需要专门写一篇文章来说明,就是一个解释器。
坑其实都是在实现上。
一些动态逆向相关思路的博客
http://blog.sciencenet.cn/blog-544280-433085.html
看个思路。
反编译
https://yurichev.com/mirrors/DCC_decompilation_thesis.pdf
作者似乎还有其他论文,也推荐看一看。
我就是根据里面的方法,写了一个最简单的C#反编译器。
练习
推荐自己设计一个类似C语言的语法(直接参考C就好了),然后编译成C#的IL,再反编译回去。
虚拟化
虚拟化某种程度上是动态分析的基础。
这里只说windows上的。
R3程序用dynamorio。
dynamorio的好处是:
1. 编译简单。例子多,改改总有能满足你需求的
2. 可以输出指令的src和dst操作数,这在写污点分析或其他分析工具的时候,是非常有用的特性
(pintool我甚至都无法编译跑起来,就不推荐了)。
R0程序用bochs。
bochs自带 instrument 接口,可以方便记录指令,还能截获网卡的所有数据包,等等等等。
唯一缺点是慢。
bochs离线调试永恒之蓝还挺方便的,相当于开了上帝视角,比winddbg爽多了。
当然如果你只是想马上体验一下记录指令,可以试试CE(cheat engine)的指令记录功能。
最后
这条路其实并不好走,随便找个开发的工作比这轻松多了,工资又高。好饿,早知道不做安全了.jpg
不过如果以网络战的角度来看,又非常值得(太赛博朋克了)。
静态分析的基础用的主要是编译器理论那套东西,个人感觉比较好的是
《编译器设计之路》(我不是托)
https://book.douban.com/subject/5907794/
重点是类型分析,控制流分析,数据流分析,ast到IL的过程。
另外一定要看一看 SSA (Static single assignment)这种分析方法,哪怕你看不懂完整的算法,了解一下思路,也是非常有用的。
参考 http://ssabook.gforge.inria.fr/latest/book.pdf 。虽然我也没看明白全部。
有个之前常用的C#反编译器的算法,就是某种形式的SSA。
推荐看看 yinwang 的 pysonar 的思路。
严重建议不要把龙虎鲸书作为入门书籍,一方面是内容过时,一方面是写的太难懂了。
动态分析
动态数据流分析——污点分析。污点分析这玩意的思路太简单了,简单到甚至都不需要专门写一篇文章来说明,就是一个解释器。
坑其实都是在实现上。
一些动态逆向相关思路的博客
http://blog.sciencenet.cn/blog-544280-433085.html
看个思路。
反编译
https://yurichev.com/mirrors/DCC_decompilation_thesis.pdf
作者似乎还有其他论文,也推荐看一看。
我就是根据里面的方法,写了一个最简单的C#反编译器。
练习
推荐自己设计一个类似C语言的语法(直接参考C就好了),然后编译成C#的IL,再反编译回去。
虚拟化
虚拟化某种程度上是动态分析的基础。
这里只说windows上的。
R3程序用dynamorio。
dynamorio的好处是:
1. 编译简单。例子多,改改总有能满足你需求的
2. 可以输出指令的src和dst操作数,这在写污点分析或其他分析工具的时候,是非常有用的特性
(pintool我甚至都无法编译跑起来,就不推荐了)。
R0程序用bochs。
bochs自带 instrument 接口,可以方便记录指令,还能截获网卡的所有数据包,等等等等。
唯一缺点是慢。
bochs离线调试永恒之蓝还挺方便的,相当于开了上帝视角,比winddbg爽多了。
当然如果你只是想马上体验一下记录指令,可以试试CE(cheat engine)的指令记录功能。
最后
这条路其实并不好走,随便找个开发的工作比这轻松多了,工资又高。好饿,早知道不做安全了.jpg
不过如果以网络战的角度来看,又非常值得(太赛博朋克了)。
动态数据流分析——污点分析。污点分析这玩意的思路太简单了,简单到甚至都不需要专门写一篇文章来说明,就是一个解释器。
坑其实都是在实现上。
一些动态逆向相关思路的博客
http://blog.sciencenet.cn/blog-544280-433085.html
看个思路。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课