有人刚给我发了一个程序的反编译到C.这是一个非常好的反编译,产生了很好的,主要是可读的C代码(如果你忽略了没有变量或函数都有一个人类可读的名字的事实),大多看起来像它实际上会编译.
但是有一个大问题.我碰巧知道他反编译的程序是用Delphi编写的,其中充满了难以转化为C的概念.但我对反编译器的输出印象深刻,这让我很奇怪.德尔福有什么可以做到的吗?
我见过Delphi的最好的反编译工具是DeDe.它可以做很多事情,但它甚至不会尝试生成Object Pascal代码作为其输出,并且自Delphi 6以来它还没有更新.那里有什么更好的东西吗?
我之前听过"反编译"这个术语几次,我开始对它的工作原理感到非常好奇.
我对它是如何工作有一个非常笼统的想法; 对应用程序进行逆向工程以查看它使用的功能,但除此之外我不太了解.
我也听过" 反汇编程序 " 这个术语,反汇编程序和反编译程序有什么区别?
总结一下我的问题:反编译过程究竟涉及到什么?通常怎么做?流程有多复杂/简单?它可以产生确切的代码吗?反编译器和反汇编程序有什么区别?
我想用AKP-Studio反编译一个APK(它使用Apktool 2.0.0-Beta9),但在每个APK上我都会收到此错误:
May 05, 2015 5:38:30 PM brut.androlib.ApkDecoder decode
INFO: Using Apktool 2.0.0-Beta9 on com.****-1.apk
May 05, 2015 5:38:30 PM brut.androlib.res.AndrolibResources loadMainPkg
INFO: Loading resource table...
Exception in thread "main" brut.androlib.AndrolibException: Could not decode arsc file
at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:54)
at brut.androlib.res.AndrolibResources.getResPackagesFromApk(AndrolibResources.java:604)
at brut.androlib.res.AndrolibResources.loadMainPkg(AndrolibResources.java:74)
Run Code Online (Sandbox Code Playgroud)
我在不同版本的Windows(64和32位)的不同系统上检查了它
我的java版本是:"1.8.0_45"
如果有任何解决方案,请告诉我.
我需要反编译一个用.NET编写的小应用程序并将其转换为C++.我没有安装Windows,我知道有很多针对Windows的.NET反编译.由于我只有Mac和Linux,并且不想安装Windows只能运行反编译器,我想知道,有没有简单的方法在Mac或Linux中反编译.NET应用程序?我搜索它并没有找到任何东西.
让我们说:
>>> def test(a):
>>> print a
Run Code Online (Sandbox Code Playgroud)
现在,我想探索测试在编译形式中的样子.
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
Run Code Online (Sandbox Code Playgroud)
我可以使用dis模块获取反汇编的表单:
>>> import dis
>>> dis.dis(test)
2 0 LOAD_FAST 0 (a)
3 PRINT_ITEM
4 PRINT_NEWLINE
5 LOAD_CONST 0 (None)
8 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)
是否有一个开源和维护的反编译器,我可以用来将字节码重新转换成可读的python代码?
更新:感谢建议反编译,但它已过时(python2.3),没有人再维护它了.有没有python2.5或更高版本?
我目前正在研究不同语言的闭包实现.但是,当谈到Scala时,我无法找到关于如何将闭包映射到Java对象的任何文档.
有充分证据表明Scala函数映射到FunctionN对象.我假设对闭包的自由变量的引用必须存储在该函数对象的某处(例如,在C++ 0x中完成).
我还尝试使用scalac编译以下内容,然后使用JD反编译类文件:
object ClosureExample extends Application {
def addN(n: Int) = (a: Int) => a + n
var add5 = addN(5)
println(add5(20))
}
Run Code Online (Sandbox Code Playgroud)
在反编译的源代码中,我看到了一个匿名的Function1子类型,它应该是我的闭包.但是apply()方法是空的,并且匿名类没有字段(可能存储闭包变量).我想反编译器没有设法从类文件中获取有趣的部分......
现在问题:
在我的Java开发中,我从Jad/JadClipse反编译器中获益匪浅.它使人们有可能知道为什么第三方库失败而不是通常的猜测.
我正在为C#和Visual Studio寻找类似的设置.也就是说,我可以指向代码中的任何类或变量并获取该特定类的代码视图.
什么是最好的设置?我希望能够使用通常的"跳转到声明/实现"来导航我自己的代码.它不具有自由,但是这将是一个奖金如果是.
它应该支持Visual Studio 2008或Visual Studio 2005以及.NET 2和3(.5).
我创建了一个简单的应用程序,一个计数器应用程序,按下按钮会增加一个整数并更新文本视图.代码如下:
public class MainActivity extends Activity {
public static int count = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView textView = (TextView) findViewById(R.id.count);
textView.setText(Integer.toString(count));
final Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
count++;
textView.setText(Integer.toString(count));
}
});
}
...
}
Run Code Online (Sandbox Code Playgroud)
在使用dex2jar和jd-gui反编译同一个应用程序后,我收到了以下代码:
public class MainActivity extends Activity {
public static int count = 0;
protected void onCreate(final Bundle paramBundle) {
super.onCreate(paramBundle);
setContentView(2130903040);
paramBundle = (TextView)findViewById(2131296257);
paramBundle.setText(Integer.toString(count));
((Button)findViewById(2131296256)).setOnClickListener(new View.OnClickListener() {
public void …Run Code Online (Sandbox Code Playgroud) 与反编译本机x86二进制文件相比,为什么将.NET IL-code反编译为源代码如此容易?(Reflector在大多数情况下都会生成相当好的源代码,而反编译C++编译器的输出几乎是不可能的.)
是因为IL包含大量元数据吗?或者是因为IL是比x86指令更高的抽象?我做了一些研究,发现了以下两篇有用的文章,但它们都没有回答我的问题.
我丢失了所有.jrxml文件,但我有.jasper文件.我可以反编译开发文件文件的.jrxml文件?如果是,那对我来说将是一个很大的帮助.