V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tyfulcrum
V2EX  ›  C

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

  •  
  •   tyfulcrum · 2016-04-15 19:19:50 +08:00 · 2755 次点击
    这是一个创建于 3170 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    9 条回复    2016-04-20 13:56:40 +08:00
    savebox
        1
    savebox  
       2016-04-15 19:24:36 +08:00
    IDA 有 hexray 插件,F5 一下就出来了,当然,价格喜人
    shippo7
        2
    shippo7  
       2016-04-15 19:37:33 +08:00 via iPhone
    玩玩 Minecraft Forge ,将不开源的 Minecraft 反编译成 Java 代码是可以实现的,变量名是编译器自动生成的
    h4x3rotab
        3
    h4x3rotab  
       2016-04-15 19:41:02 +08:00 via iPhone   ❤️ 1
    反编译只能做到半自动。因为编译的时候丢失了太多信息,只能在后期通过推导和人的辅助来还原这些信息。目前有 hexray 的插件和 snowman 两个民用级别的工具可以实现。
    billlee
        4
    billlee  
       2016-04-15 21:22:16 +08:00
    看 freeebuf 上那篇文章,这个反编译出来的变量名,都是通过 Windows API 补出来的吧。不是 Windows API 的,连分支语句都只能变成 goto.
    kirisetsz
        5
    kirisetsz  
       2016-04-15 21:54:57 +08:00
    CPU 跑的机器码,直译就是汇编,好,那我们再教计算机一点技巧,让它翻译出条件语句、赋值语句、函数签名、结构体、类定义、重载…… 所以看反编译出来的代码和看机翻是差不多的感觉,翻译质量好不好的问题。(不如来个机器学习反编译……)
    Mutoo
        6
    Mutoo  
       2016-04-15 22:57:20 +08:00
    机翻后可以通过一些重构工具把猜测出来的变量名取得可读性高一些。
    e2real
        7
    e2real  
       2016-04-15 23:33:40 +08:00
    shit 吃多了就知道什么味道了不是,
    做病毒分析的,肯定也可以写病毒不是,
    同理可以写病毒,加上犀利的工具,也可以分析的出来不是,
    就是一堆 Win32 API 而已, IDA pro 的 F5 插件可以帮助翻译成伪码,加上自己的经验还原作者的程序 so easy.
    shyling
        8
    shyling  
       2016-04-16 19:23:45 +08:00 via Android
    根据逻辑仔细看看代码还是能写出来的吧
    eliteYang
        9
    eliteYang  
       2016-04-20 13:56:40 +08:00
    反编译出来的基本是正常人不能识别的,所以没啥用,当然了,市面上还是有一些工具的,但是价格很贵。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   995 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:31 · PVG 05:31 · LAX 13:31 · JFK 16:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.