首页
社区
课程
招聘
[原创]编译,反编译,程序分析的推荐资料与备忘
发表于: 2019-3-21 19:31 10811

[原创]编译,反编译,程序分析的推荐资料与备忘

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直播授课

收藏
免费 4
支持
分享
最新回复 (4)
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
对计算机安全有兴趣的学生收藏。
2019-3-21 21:51
0
雪    币: 27
活跃值: (622)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
感谢楼主分享~ 正好对程序分析感兴趣
2019-4-7 15:08
0
雪    币: 514
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
6啊,正好需要,非常感谢
2019-4-19 20:39
0
雪    币: 35
活跃值: (1954)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
话说大佬,你之前的帖子自动挖掘漏洞思路很屌呀,咋删掉了呀
2019-7-22 00:48
0
游客
登录 | 注册 方可回帖
返回
//