标签: decompiler

什么是反编译器如何工作?

那么反编译器真的是一个给出编译/解释代码片段的源码吗?因为对我来说听起来不可能.如果编译它,你将如何得到函数,变量,类等的名称.还是我误解了这个定义?它是如何工作的?制作一个人的一般原则是什么?

decompiling decompiler

11
推荐指数
1
解决办法
4760
查看次数

如何查看Flash源代码?

我在网上发现了一个Flash程序,非常适合我正在进行的项目.显然,通过Web内容,您通常可以使用浏览器查看您可能正在查看的任何HTML,PHP等的源代码.但是当谈到Flash时,我们似乎在查看源代码方面处于黑暗状态.

有没有办法查看您下载的Flash swf的源代码?

注意:至于窃取Flash代码是否在道德上应该受到谴责,或许这更适合于另一个问题.

apache-flex flash decompiler swf-decompiler

10
推荐指数
2
解决办法
4万
查看次数

如何将32位编译二进制转换为64位

背景: 我们已经获得了一个在Visual Studio中构建为32位Windows应用程序的软件产品.我们希望将此应用程序移植到64位.

此代码的关键任务组件是最初由第三方使用gFortran构建的黑盒静态库(.a文件).原来的开发人员已经过世了,我们能够获得的Fortran源代码不完整,而不是该库构建的版本(并且包含编译库中不存在的关键错误).他们没有使用VCS.

问题: 我想创建一个64位静态库,其代码在功能上等同于我们拥有的32位静态库.

我试过的:

  • 使用Snowman反编译器获取C++源代码,以64位重新编译.这被证明是不可能的,因为生成的代码使用看似特定于gcc的低级内部函数.它可能无论如何都不会起作用,因为这样的内在函数会编译为在64位中功能不相同的代码.我可能需要一个更好的反编译器.
  • 显然x86程序集是有效的x86_64程序集,所以我简要介绍了为什么我不能通过64位汇编程序运行程序集.原来ABI在64位不同,所以调用约定不匹配.可能我可以手动将函数调用转换为正确的约定,其余部分保持不变,但这可能是一个棘手的问题.意见?

c++ assembly x86-64 decompiler 32bit-64bit

9
推荐指数
1
解决办法
2376
查看次数

什么是解析反编译器?

IntelliJ 结合了 Fernflower,一个由 JetBrains 制作的 Java 反编译器。

在其GitHub 页面上,您可以阅读以下内容:

Fernflower 是第一个实际工作的 Java 分析反编译器,一般来说可能是一种高级编程语言。

这是什么意思?什么是解析反编译器?它与其他类型的反编译器有何不同?

decompiling decompiler

9
推荐指数
1
解决办法
244
查看次数

是否有任何Java Decompiler可以正确反编译对重载方法的调用?

考虑这个(恕我直言)简单的例子:

public class DecompilerTest {
    public static void main(String[] args) {
        Object s1 = "The", s2 = "answer";
        doPrint((Object) "You should know:");
        for (int i = 0; i < 2; i++) {
            doPrint(s1);
            doPrint(s2);
            s1 = "is";
            s2 = new Integer(42);
        }
        System.out.println();
    }

    private static void doPrint(String s1) {
        System.out.print("Wrong!");
    }

    private static void doPrint(Object s1) {
        System.out.print(s1 + " ");
    }
}
Run Code Online (Sandbox Code Playgroud)

在没有调试信息的情况下用源/目标级别1.1编译它(即不应存在局部变量信息)并尝试对其进行反编译.我尝试过Jad,JD-GUI和Fernflower,他们都至少有一个错误的调用(即程序打印"错误!"至少一次)

真的没有java反编译器可以推断出正确的强制转换,以便它不会调用错误的重载吗?

编辑:目标级别1.1,以便不存在特定于Java6的快速验证信息.这可能会给反编译器一个线索,即s1已被声明为Object而不是String.即使没有这些信息,反编译器也应该能够反编译代码(不一定得到原始变量类型,但显示相同的行为),特别是因为许多混淆器也将它剥离.

反编译器出了什么问题:

  • 他们(Object)在第一次通话中错过了演员.
  • 他们推断的类型s1String …

java jad decompiler

8
推荐指数
2
解决办法
6611
查看次数

反编译混淆的java字节码

我在一个运行Java应用程序的平台上工作.这些应用程序经常被混淆,大多数都使用ProGuard,这使得我们平台的调试问题非常困难.

目前我正在使用JD(http://java.decompiler.free.fr/)对这些应用进行反编译.JD做得不错,但有时候生成的代码太难理解了.

这似乎主要是因为混淆工具利用较少约束的JVM字节码规范来生成有效的字节码,而不会映射回有效的Java代码(例如:积极的重载).

所以,我的问题是:是否有专门用于处理混淆字节码的反编译器?

java jvm bytecode proguard decompiler

8
推荐指数
2
解决办法
8654
查看次数

Eclipse条件断点坏了吗?

我试图在反编译代码中设置一个条件断点,但Eclipse不断给我错误:

条件断点有编译错误

原因:评估必须包含表达式或格式良好的语句块

我的情况非常简单,只是尝试与字符串值进行比较.我已经尝试了以下所有内容,但每个单独出错都会出错:

myObj.toString() == "abc123"
myObj.toString().equals("abc123")
if(myObj.toString() == "abc123"){ return true; }
true == true
Run Code Online (Sandbox Code Playgroud)

我也尝试过在行尾添加或不使用分号的每种组合,以及间距和换行符的每种组合以及包含或不包含{}的每种组合.基本上,我不知道为什么这不起作用......

我试图调试的代码是在一个用JD-Eclipse反编译的jar中.正常断点在此代码中正常工作.

有谁知道这里发生了什么?

java eclipse debugging breakpoints decompiler

8
推荐指数
1
解决办法
1万
查看次数

如果从java源编译的所有字节码都可以反编译为java源?

我看到一些java反编译器可以将字节码反编译成可读的java源代码,我想知道来自java(不是其他JVM语言)的所有字节码是否可以再次反编译为java源代码?


更新

对不起,让我更清楚地提出问题.

刚谈谈JVM上的普通Java代码(没有Android,没有字节码增强,没有AOP,没有混淆),我实际上希望字节码可以被反编译.但是我不知道是否有编译成字节码的java代码形式,永远不能被反编译成可读的java源代码.

java bytecode decompiler

8
推荐指数
1
解决办法
1841
查看次数

反编译器 - 如何构造循环

我正在为一种简单的脚本语言编写一个反编译器.这就是我所做的:

基本块

创建了一个基本块的集合,如下所述:

http://www.backerstreet.com/decompiler/basic_blocks.php

控制流图,支配树和循环集

由此我可以创建控制流图.

http://www.backerstreet.com/decompiler/control_flow_graph.php

从CFG我创建了支配树,这反过来允许我在CFG中找到循环集,如下所述:

http://www.backerstreet.com/decompiler/loop_analysis.php

这是一张包含我目前所有数据的图片:

控制流程图

构造循环

我的下一步应该是:

http://www.backerstreet.com/decompiler/creating_statements.php

这就是我的问题所在,因为我完全陷入困境.在我给定的数据中,结构化循环算法将如何应用?我不明白为什么它首先尝试将所有内容组织为do while循环 - 在我的示例中,这意味着块3中的"temp5_14 = temp5_14 + 16"将始终至少执行一次,这不是原始代码所执行的操作一点都不

这怎么可能,以及将它从do-while转换为while循环的下一步如何实际工作?对于在块6中结束的循环3,这看起来应该是一段时间(true) - 但是当它的head块是if语句时,它如何与算法一起工作?

TL; DR - 有人请举例说明"结构化循环"算法是如何工作的.

decompiler

8
推荐指数
2
解决办法
1350
查看次数

apktool 和 baksmali 的区别

据我所知,apktool 和 baksmali 都能够从 .apk (.dex) 文件中生成 smali 代码,而 apktool 使用了 dexlib2。它们都是APK打包/解包工具

但是我仍然不清楚apktool 和 smali/baksmali 之间主要区别是什么在 .dex 文件和扩展功能的功能方面?

PS:我刚刚发现的一个区别是 apktool 能够处理一个 apk 中的多个 dex 文件,而 baksmali 不能(至少目前是这样)

我确实尝试过阅读源代码,但由于缺乏经验,我无法真正理解这两个工具的工作流程。如果有人可以建议一些阅读材料或流程图等,我将不胜感激。

谢谢!

android decompiler smali apktool

8
推荐指数
2
解决办法
5578
查看次数