请问反编译的时候是怎么得到源代码的?

2016-04-15 19:19:50 +08:00
 tyfulcrum

今天看到 http://www.freebuf.com/articles/system/101447.html 里面对木马的分析中展示了木马的代码,可是反编译不是只能得到汇编代码么,作者难道是人肉翻译成 C 再自己补上注释的么?我 Google 了一下好像并没有从二进制文件反汇编出源代码的工具,想了想从编译的角度讲也不可能啊……

2629 次点击
所在节点    C
9 条回复
savebox
2016-04-15 19:24:36 +08:00
IDA 有 hexray 插件,F5 一下就出来了,当然,价格喜人
shippo7
2016-04-15 19:37:33 +08:00
玩玩 Minecraft Forge ,将不开源的 Minecraft 反编译成 Java 代码是可以实现的,变量名是编译器自动生成的
h4x3rotab
2016-04-15 19:41:02 +08:00
反编译只能做到半自动。因为编译的时候丢失了太多信息,只能在后期通过推导和人的辅助来还原这些信息。目前有 hexray 的插件和 snowman 两个民用级别的工具可以实现。
billlee
2016-04-15 21:22:16 +08:00
看 freeebuf 上那篇文章,这个反编译出来的变量名,都是通过 Windows API 补出来的吧。不是 Windows API 的,连分支语句都只能变成 goto.
kirisetsz
2016-04-15 21:54:57 +08:00
CPU 跑的机器码,直译就是汇编,好,那我们再教计算机一点技巧,让它翻译出条件语句、赋值语句、函数签名、结构体、类定义、重载…… 所以看反编译出来的代码和看机翻是差不多的感觉,翻译质量好不好的问题。(不如来个机器学习反编译……)
Mutoo
2016-04-15 22:57:20 +08:00
机翻后可以通过一些重构工具把猜测出来的变量名取得可读性高一些。
e2real
2016-04-15 23:33:40 +08:00
shit 吃多了就知道什么味道了不是,
做病毒分析的,肯定也可以写病毒不是,
同理可以写病毒,加上犀利的工具,也可以分析的出来不是,
就是一堆 Win32 API 而已, IDA pro 的 F5 插件可以帮助翻译成伪码,加上自己的经验还原作者的程序 so easy.
shyling
2016-04-16 19:23:45 +08:00
根据逻辑仔细看看代码还是能写出来的吧
eliteYang
2016-04-20 13:56:40 +08:00
反编译出来的基本是正常人不能识别的,所以没啥用,当然了,市面上还是有一些工具的,但是价格很贵。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/271417

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX