首页
社区
课程
招聘
[原创]动态调试与静态反汇编合一,运用虚拟机技术创建可逆向运行的调试器
发表于: 2010-8-22 21:00 139245

[原创]动态调试与静态反汇编合一,运用虚拟机技术创建可逆向运行的调试器

2010-8-22 21:00
139245
收藏
免费 7
支持
分享
最新回复 (124)
雪    币: 1776
活跃值: (69)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
76
看过这篇文章后觉得自己把困难估计得过低了。尤其是在循环的识别和高级数据结构的恢复上。

65eK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3k6A6M7$3R3^5z5o6S2Q4x3X3g2U0L8$3#2Q4x3V1k6Q4x3X3c8@1x3e0M7I4z5e0x3%4

http://bbs.pediy.com/showthread.php?t=77108

但是用反汇编记录来帮助调试,用数据流来分开壳和可执行程序,这个思路也是对的,只是现在理论不成熟的情况下,要靠污点传播,凭经验,靠人肉,肯定是免不了的。

呵呵,接下来方向不变,目标可以降低一点。当个小助手用。
2010-8-28 22:22
0
雪    币: 1776
活跃值: (69)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
77
哇,我知道了!原来问题要这么去解决。
2010-8-29 08:46
0
雪    币: 1776
活跃值: (69)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
78
我的方法和他有不同,但原理是一样的。

6deK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4m8S2M7r3g2J5i4K6u0W2k6h3c8#2i4K6u0W2j5$3&6Q4x3V1k6A6L8X3c8W2P5q4)9J5k6i4m8Z5M7q4)9J5c8X3c8W2k6X3q4#2L8s2c8Q4x3V1k6B7L8%4g2J5L8X3q4D9i4K6u0r3k6r3!0%4L8V1y4G2N6h3&6@1i4K6u0r3x3e0j5%4x3g2)9J5k6o6f1@1z5e0N6Q4x3U0R3J5x3o6l9&6i4K6t1&6x3o6q4Q4x3X3b7H3x3e0b7K6i4K6u0V1x3o6f1`.

一定要用到统计哦:

ea4K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3c8E0i4K6u0W2N6r3S2K6M7#2)9J5k6i4c8K6K9h3&6Y4K9s2g2S2i4K6u0W2k6h3c8#2i4K6u0W2j5$3&6Q4x3V1k6H3N6h3u0D9K9h3y4S2N6r3W2G2L8W2)9J5c8W2)9J5y4f1f1^5i4K6t1#2b7f1g2Q4x3U0g2m8x3g2)9J5y4f1f1%4i4K6t1#2b7f1g2Q4x3U0f1&6y4#2)9J5y4f1f1$3i4K6t1#2z5f1y4Q4x3U0g2n7b7g2)9J5y4f1f1#2i4K6t1#2b7U0N6Q4x3U0g2m8y4g2)9J5y4f1f1%4i4K6t1#2b7e0S2Q4x3U0f1^5b7U0l9#2i4K6u0V1i4K6u0V1i4K6t1#2c8e0g2Q4x3U0f1&6b7#2)9J5y4f1p5^5i4K6t1#2c8e0g2Q4x3U0g2m8y4q4)9J5y4f1p5%4i4K6t1#2c8e0g2Q4x3U0f1&6c8g2)9J5y4e0S2n7i4K6t1#2c8e0k6Q4x3U0f1&6y4g2)9J5y4f1t1H3i4K6t1#2c8e0k6Q4x3U0f1^5c8q4)9J5y4f1q4q4i4K6t1#2c8e0W2Q4x3U0f1&6b7W2)9J5y4e0R3$3i4K6t1#2c8e0c8Q4x3U0g2n7z5q4)9J5y4e0S2m8i4K6t1#2c8e0k6Q4x3U0f1^5c8W2)9J5y4e0V1H3i4K6t1#2c8e0W2Q4x3U0g2m8b7W2)9J5y4e0V1^5i4K6t1#2c8e0g2Q4x3U0g2n7b7g2)9J5y4e0S2r3i4K6t1#2c8e0g2Q4x3U0f1^5z5q4)9J5y4e0V1%4i4K6t1#2c8e0k6Q4x3U0f1^5b7#2)9J5y4e0V1$3i4K6t1#2c8e0k6Q4x3U0f1^5c8g2)9J5y4e0V1^5i4K6t1#2c8e0k6Q4x3U0f1&6y4g2)9J5y4e0R3^5i4K6t1#2c8e0N6Q4x3U0f1^5c8g2)9J5y4e0R3%4i4K6t1#2c8e0N6Q4x3U0f1&6b7g2)9J5y4e0R3@1i4K6t1#2c8e0N6Q4x3U0g2n7b7W2)9J5y4e0W2r3i4K6t1#2c8e0S2Q4x3U0g2m8c8g2)9J5y4f1p5I4i4K6t1#2c8e0k6Q4x3U0f1&6y4W2)9J5y4f1t1&6i4K6t1#2c8e0k6Q4x3U0g2n7x3#2)9J5y4e0V1#2i4K6u0W2f1p5c8r3

一样的想法,不一样的用途

b3aK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3W2T1L8g2)9J5k6h3y4G2L8g2)9J5c8X3c8W2N6X3g2D9L8%4m8W2M7Y4N6G2M7X3E0K6i4K6u0r3j5$3&6Q4x3V1k6%4k6h3u0K6M7r3S2W2M7X3g2Q4x3V1k6D9K9h3u0J5j5i4u0&6i4K6u0r3N6r3g2U0K9r3q4J5N6r3W2U0L8r3g2K6i4K6u0r3x3e0l9H3x3W2)9#2k6X3k6J5j5h3&6C8i4K6u0r3x3e0l9H3x3W2)9#2k6X3k6J5j5h3&6C8i4K6u0W2K9s2c8E0L8l9`.`.

一个ARM的实现

利用RealView Profiler工具进行软件代码优化

b85K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4u0W2j5h3I4$3K9h3g2%4i4K6u0W2j5$3!0E0i4K6u0W2j5$3&6Q4x3V1k6K6K9r3!0H3M7r3W2U0i4K6u0r3K9i4q4Q4x3X3b7H3y4#2)9J5c8W2)9J5y4f1f1#2i4K6t1#2z5o6S2Q4x3U0g2m8z5g2)9J5y4f1f1%4i4K6t1#2z5e0c8Q4x3U0g2m8z5q4u0W2j5h3I4h3K9h3g2%4i4K6g2X3f1s2u0G2k6X3W2D9k6i4u0Q4x3U0g2q4y4W2)9J5y4e0R3&6i4K6t1#2b7V1g2Q4x3U0g2q4y4g2)9J5y4f1q4r3i4K6t1#2b7V1u0Q4x3U0g2q4y4q4)9J5y4f1u0n7i4K6t1#2b7e0y4Q4x3U0g2q4y4#2)9J5y4f1p5H3i4K6t1#2z5o6q4Q4x3U0g2q4y4q4)9J5y4f1u0o6i4K6t1#2z5e0S2Q4x3U0g2q4y4g2)9J5y4e0S2o6i4K6t1#2z5e0k6Q4x3U0g2q4z5q4)9J5y4e0R3&6i4K6t1#2b7f1k6Q4x3U0g2q4y4W2)9J5y4e0W2o6i4K6t1#2b7V1q4Q4x3X3g2H3k6r3j5`.

相关理论的最新进展

基于命题演算的高级控制结构恢复

903K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3g2U0K9h3y4W2x3o6k6Q4x3X3g2U0L8$3#2Q4x3V1k6q4e0W2)9J5c8X3q4J5N6r3W2U0L8r3g2Q4x3V1k6V1L8%4N6F1L8r3!0S2k6p5q4J5N6r3W2U0L8r3g2r3K9h3I4W2i4K6u0W2k6r3!0Q4x3@1k6S2N6s2c8S2j5$3S2f1P5i4m8W2i4K6y4p5f1p5c8r3i4K6t1$3K9h3c8Q4x3@1b7I4z5e0l9#2z5l9`.`.

我的程序中可以获得的信息要比以上的论文的前提条件更丰富,我们有一个完整的动态调试记录,虽然没有遍历分支,但是可以用符号计算来遍历,我们不仅可以命题演算,还可以用扫描和统计来了解实际到底是怎样的流程。因此,程序的理论基础虽然很薄弱,但还是有希望的。

找到的资料真不少,又是一篇简介,他们要是能结合动态调试的结果调整对控制流的分析,那么结果就更精确了

面向二进制代码安全分析的反编译关键技术研究(二进制,代码分)

6b7K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3A6A6K9X3W2F1P5Y4g2Q4x3X3g2U0L8$3#2Q4x3V1k6Y4P5q4)9J5c8U0V1J5y4U0p5&6y4U0m8Q4x3X3g2Z5N6r3#2D9
2010-8-29 08:52
0
雪    币: 1776
活跃值: (69)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
79
经过今天一天的思考,我得到了一个很好的主意,表面上看混淆代码拉长了分析的线路,隐藏了真正的信息。

但实际上从另一方面来看,它们同时正在把更多的信息暴露出来。关键是如何去解读了。今天完成了对解读控制流的基本思路,明天搞数据流在控制流上的映射了。
2010-8-29 18:52
0
雪    币: 46
活跃值: (38)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
80
,.....不懂。只想知道代码已经写了多少了,能切张图, 让我开心一下么。
2010-9-5 16:14
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
81
如果我打这么多字
我一定没力气写代码
2010-9-5 17:29
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
82
文是好文,但是看得头大,收获有一点,表示感谢!
2010-9-10 10:47
0
雪    币: 598
活跃值: (206)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
83
都是很深奥的东西..看着很有希望的感觉..
但是就是实现起来...还是很漫长的道路.
2010-9-17 23:20
0
雪    币: 1776
活跃值: (69)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
84
这几天我试了很多调试器和反编译器,最后发现都不是很理想,目前的决定是要用 gdb ,然后通过 gdb/mi 的接口让被调试的程序运行,然后读取一段内存,送到 beaengine 的引擎进行反汇编,当反汇编遇到跳转时,就停止,通知 gdb 在跳转指令处下断,然后执行到断点处,再反汇编下一段。还可以在执行中对我们感兴趣的地方下断,获取指令执行后的结果,这样就避免了单步执行的低效率,同时也不会遗漏任何真正有价值的信息。

那么,为什么不使用调试器本身的反汇编功能呢?

因为 beaengine 的反汇编有个很有用的特点,它可以输出反汇编的中间结果,就是一个描述指令具体细节的数据结构,这比给出一条指令的助记符格式更好,省得先把指令翻译到助记符,再从助记符翻译到数据结构了。
为了支持更多的调试器后端,这个分析引擎和调试器要做到模块上的分离。

数据库我选 postgresql。

对于循环,我只反汇编第一次,然后在出口语句和关键信息处理语句上下断,这样又可以节省时间了。争取到循环结束时,是提供这个循环处理的结构化数据视图和处理框架。

图形界面的话,我想了想,还是用 gtk 来做,比 QT 更开源,比 wxwidget 更有自由度。

欢迎更多的建议。
2010-9-19 06:21
0
雪    币: 7
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
85
测试一下回帖
2010-9-19 09:39
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
86
我一直默默等待神器的出现
2010-9-19 10:20
0
雪    币: 171
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
87
搞得火热,大牛们
2010-10-23 03:57
0
雪    币: 163
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
88
很强大的说,谢谢楼主分享
2010-11-1 18:45
0
雪    币: 427
活跃值: (488)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
89
想法是美好,现实是惨酷的。
我也在想:如果能有一位顶级的调试大师来回答下这一命题,就好了。
2010-11-1 22:16
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
90
拜读,楼主的想法相当学术,期待更多的好点子
2011-1-4 14:25
0
雪    币: 193
活跃值: (1183)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
91
很多东西 都很模糊 看的头大
2011-1-9 22:04
0
雪    币: 82
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
92
刚学混淆,楼主给了一个好的思路,支持下!
2011-1-11 10:54
0
雪    币: 599
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
93
这个难度有点大。
2011-1-11 11:14
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
94
这是一个很大的工程,以一个人的力量要做完真的是很难
2011-1-11 11:57
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
95
何时能看到楼主的大作......期待中
2011-6-13 01:43
0
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
96
膜拜fg, 那么早就知道BitBlaze了,不愧为是博览群书啊。

Symbolic Execution 可以解决大部分问题。

另外metasm 里面用到的backtrace,也比较有意思,实际上这也是Symbolic Execution的一种形式。

Optimization能够帮助理解虚拟机,但是最终要化整为零,要花很多工夫,而且最后也要特化处理。这两种形式网上都有相关论文和例子(我记得是7bbK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3!0H3k6h3&6J5j5$3g2Q4x3X3g2G2M7X3N6Q4x3V1k6T1L8r3!0Y4i4K6u0r3N6X3W2W2N6#2)9J5c8U0p5J5x3K6S2Q4x3V1k6h3e0g2m8J5L8%4c8W2j5%4c8Q4x3V1y4Q4y4h3k6b7j5i4u0@1i4K6g2X3x3q4)9K6b7g2)9#2k6W2)9#2k6V1u0S2M7$3W2U0M7#2)9J5z5g2)9J5k6g2)9J5y4X3&6T1M7%4m8Q4x3@1u0Q4x3U0k6F1j5Y4y4H3i4K6y4n7i4@1f1%4i4K6R3$3i4K6W2r3i4@1f1%4i4@1u0n7i4K6R3K6i4@1f1%4i4K6V1@1i4@1p5^5e0$3y4S2L8h3I4Q4c8e0N6Q4z5f1q4Q4z5o6c8Q4c8e0c8Q4b7V1q4Q4b7V1q4Q4c8e0g2Q4b7U0m8Q4b7U0q4Q4c8e0c8Q4b7U0S2Q4z5p5c8Q4c8e0g2Q4b7e0c8Q4z5f1q4Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0N6Q4z5o6k6Q4z5f1k6Q4c8e0N6Q4b7V1u0Q4z5o6y4Q4c8e0k6Q4z5e0y4Q4z5p5c8Q4c8e0c8Q4b7V1c8Q4z5f1y4Q4c8e0N6Q4b7V1y4Q4z5e0k6Q4c8e0S2Q4b7f1k6Q4z5e0q4Q4c8e0g2Q4z5e0W2Q4b7e0S2Q4c8e0k6Q4z5p5q4Q4z5o6m8Q4c8e0k6Q4z5f1y4Q4b7f1k6Q4c8e0N6Q4z5f1q4Q4z5o6c8Q4c8e0W2Q4z5o6u0Q4b7e0y4Q4c8e0g2Q4b7U0m8Q4b7U0q4Q4c8e0k6Q4z5f1u0Q4b7U0c8Q4c8e0k6Q4z5e0S2Q4b7f1k6Q4c8e0g2Q4b7f1k6Q4b7e0g2Q4c8e0g2Q4b7f1k6Q4b7e0g2Q4c8e0k6Q4z5e0N6Q4b7e0m8Q4c8e0g2Q4z5o6N6Q4b7e0m8Q4c8e0y4Q4z5o6m8Q4z5o6t1`.

期待fg分享其他宝贵的信息。
2011-6-13 02:37
0
雪    币: 2322
活跃值: (573)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
97
膜拜forgot,foxabu
今天才知道BitBlaze,下了src看了下。受益匪浅,好好学习
2011-6-13 11:26
0
雪    币: 357
活跃值: (4518)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
98
膜拜 fg 和 BitBlaze, 这帖子历史真久
2011-6-13 15:49
0
雪    币: 1988
活跃值: (1566)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
99
和我的想法不谋而和
2011-6-14 11:35
0
雪    币: 220
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
100
嗯 看了看 获益
2011-6-14 11:55
0
游客
登录 | 注册 方可回帖
返回