标签: decompiling

为什么反编译.NET IL代码这么容易?

与反编译本机x86二进制文件相比,为什么将.NET IL-code反编译为源代码如此容易?(Reflector在大多数情况下都会生成相当好的源代码,而反编译C++编译器的输出几乎是不可能的.)

是因为IL包含大量元数据吗?或者是因为IL是比x86指令更高的抽象?我做了一些研究,发现了以下两篇有用的文章,但它们都没有回答我的问题.

.net cil decompiling bytecode intermediate-language

16
推荐指数
2
解决办法
4396
查看次数

如何从.so文件中提取C源代码?

我正在研究以前开发的软件,源代码编译为linux共享库(.so),源代码不存在.有没有可以从linux共享库中提取源代码的工具?

谢谢,拉维

c linux decompiling extract shared-libraries

16
推荐指数
3
解决办法
5万
查看次数

良好的软件工程与安全性

安全性和设计准则去大篇幅概述的各种方法,使之更加难以攻击者危及应用内结算的实施.

特别值得注意的是.apk,即使通过Proguard进行模糊处理,对文件进行反向工程也是多么容易.因此,他们甚至建议修改所有示例应用程序代码,尤其是"已知入口点和出口点".

我发现缺少的是在单个方法中包含某些验证方法的任何引用,例如Security.verify()返回的静态boolean:一个好的设计实践(减少代码重复,可重用,更容易调试,自我记录等)但是所有攻击者现在需要做的就是找出那种方法并让它始终返回true......所以无论我使用它多少次,延迟或不延迟,随机或不随意,它都无所谓.

另一方面,Java没有像C/C++那样的宏,它允许减少源代码重复,但没有verify()函数的单个退出点.

所以我的问题:

众所周知的软件工程/编码实践与所谓安全设计之间是否存在内在争用?(至少在Java/Android /安全交易的背景下)

可以采取哪些措施来缓解"安全设计"的副作用,这种副作用似乎是"在脚下拍摄"过度复杂的软件,这些软件本来可以更简单,更易于维护和更容易调试?

你能推荐一些好的资料来进一步研究这个课题吗?

java encryption android decompiling reverse-engineering

15
推荐指数
2
解决办法
759
查看次数

dex2jar和jd-GUI的替代品?

似乎dex2jar和/或jd-GUI即使对于最简单的if-else条件代码也会给出错误的去混淆(它们显示了while(true)一个return;在其第一行上有一个循环的循环.

有没有其他免费软件应用程序做同样的去混淆工作?也许还可以使用proguard的映射文件?

java android decompiling dex2jar

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

如何对使用ProGuard进行模糊处理的Android APK进行逆向工程/反编译?

不幸的是,我丢失了我使用ProGuard混淆的一个应用程序的源代码.
我仍然有.apkProGuard生成的文件和一些配置文件:

  1. dump.txt
  2. mapping.txt
  3. seeds.txt
  4. usage.txt

到目前为止我做了什么?

  1. 使用apktool解码资源文件.
    是的,我已经回来了!

  2. 提取.apk文件并使用dex2jarclasses.dex文件转换为.jar文件.

如果我现在使用JD-Gui查看源代码(.jar文件),我会看到我的混淆代码.像这样的东西:

class c {
  TextView a;
  TextView b;
  TextView c;
  TextView d;
  CheckBox e;
}

protected List a(Uri[] paramArrayOfUri) { ... }

protected void a(List paramList) { ... }
Run Code Online (Sandbox Code Playgroud)

还有一些循环看起来有点奇怪.我不写无限循环:

while (true) {
     if (!localIterator.hasNext())
        return localArrayList;
     ProviderInfo[] arrayOfProviderInfo = ((PackageInfo)localIterator.next()).providers;
     if (arrayOfProviderInfo == null)
        continue;
     int i = arrayOfProviderInfo.length;
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用任何ProGuard的.txt文件将混淆的代码重新映射到我的原始源代码?我想看看我自己的变量名称/方法签名.
或者这些文件只能用于跟踪崩溃报告堆栈跟踪?

android decompiling reverse-engineering proguard apk

15
推荐指数
1
解决办法
9995
查看次数

用于反编译Lua字节码的最佳工具?

我真的很难找到一个好的工作Lua字节码反编译器.我正在尝试反编译我在游戏中发现的一些脚本文件,但它们似乎是编译的,但似乎无法解码.反编译Lua二进制文件的最佳工具是什么?

scripting lua decompiling bytecode

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

Java 7 String switch反编译:意外指令

我已经反编译了一个使用新的Java 7字符串切换功能的非常简单的类.

班级:

public class StringSwitch {

    public static void main(String[] args) {

        final String color = "red";
        switch (color) {
            case "red":
                System.out.println("IS RED!");
                break;
            case "black":
                System.out.println("IS BLACK");
                break;
            case "blue":
                System.out.println("IS BLUE");
                break;
            case "green":
                System.out.println("IS GREEN");
                break;
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

针对此类运行Java 7"javap",会生成一组有趣的指令(完整的反汇编代码可在此处获得):

public static void main(java.lang.String[]);
    flags: ACC_PUBLIC, ACC_STATIC

    Code:
      stack=2, locals=4, args_size=1
        ...
        12: lookupswitch  { // 4

                  112785: 56

                 3027034: 84

                93818879: 70

                98619139: 98
                 default: 109
            }
        56: aload_2       
        57: ldc …
Run Code Online (Sandbox Code Playgroud)

java decompiling switch-statement java-7

14
推荐指数
1
解决办法
1176
查看次数

Java反编译器如何从while循环中识别for循环?

考虑这两种方法:

public static void forLoop(int start, int limit) {
    for (int i = start; i < limit; i++) {

    }
}

public static void whileLoop(int start, int limit) {
    int i = start;
    while (i < limit) {
        i++;
    }
}
Run Code Online (Sandbox Code Playgroud)

编译时,它们会产生字节码(这是详细的输出javap):

  public static void forLoop(int, int);
    descriptor: (II)V
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=3, args_size=2
         0: iload_0
         1: istore_2
         2: iload_2
         3: iload_1
         4: if_icmpge     13
         7: iinc          2, 1
        10: goto          2
        13: return
      LineNumberTable:
        line …
Run Code Online (Sandbox Code Playgroud)

java decompiling

14
推荐指数
1
解决办法
186
查看次数

如何保护移动应用程序的 API REST?(如果嗅探请求给了你“钥匙”)

这可能是一个新手问题,但我会尝试创建一个有趣的辩论。

我知道有一些用于 API 基本身份验证、API 密钥、OAuth 2.0 的身份验证方法……所有这些方法都会在请求中添加标头或 formData 参数。

尽管您使用 SSL,但破解移动应用程序“通常很容易”(我现在正在考虑使用 Android:反编译应用程序、更改清单以允许自定义 SSL、再次编译并通过 SSL 代理嗅探所有请求)。

在这些请求中,我发现了很多身份验证密钥,我可以在控制台的其他调用中使用它们,毫无问题地模拟应用程序。

所以,现在我已经在移动应用程序中破解了一些 API,我的问题是:有没有办法保护移动应用程序中的 API?

我想知道一个安全层会限制每个“密钥”的请求数量。

我错了吗 ?我错过了什么吗?这是一个愚蠢的问题吗?

java api rest mobile decompiling

14
推荐指数
1
解决办法
4651
查看次数

BAML反编译器/查看器

任何人都可以推荐一个好的BAML反编译器/查看器,除了反射器的BAML Viewer插件,它不处理路径几何/数据?

wpf decompiling baml

13
推荐指数
1
解决办法
9719
查看次数