首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有难以反编译的代码示例?

是否有难以反编译的代码示例?
EN

Stack Overflow用户
提问于 2009-07-20 08:14:19
回答 6查看 2K关注 0票数 4

有时候,当反编译Java代码时,反编译程序无法正确地对其进行反编译,最后输出中会出现少量字节码。

反编译器的缺点是什么?是否有将Java源代码编译成困难到反编译字节码的示例?

更新:

请注意,我知道利用这些信息在代码中隐藏秘密并不是一种安全的方法,将来可以改进反编译器。

尽管如此,我仍然感兴趣的是找出哪种类型的代码,狐狸,今天的反编译。

EN

回答 6

Stack Overflow用户

发布于 2009-07-20 08:18:57

任何通过混淆器的Java字节代码都会有来自反编译器的“荒谬”输出。另外,当您有其他语言(如Scala )编译为JVM字节码时,没有任何规则可以轻松地用Java表示字节代码,而且很可能不是。

随着时间的推移,反编译器必须跟上新的语言特性和它们生成的字节码,因此新的语言特性不容易被您使用的工具逆转是合理的。

编辑:作为.NET中的一个示例,下面的代码如下:

代码语言:javascript
运行
复制
lock (this)
{
    DoSomething();
}

为此汇编如下:

代码语言:javascript
运行
复制
Monitor.Enter(this);
try
{
    DoSomething();
}
catch
{
    Monitor.Exit(this);
}

反编译程序必须知道,C# (与任何其他.NET语言相反)都有专门用于这两个调用的特殊语法。否则,您会得到意想不到的(冗长的)结果。

票数 3
EN

Stack Overflow用户

发布于 2009-07-20 08:28:03

JDBC 4驱动程序是DB2连接的经典。每件事都叫一个或两个字母的名字,不相关的代码,最终没有效果,等等。有一次,我试着去调试一个特别烦人的问题,结果基本上放弃了。我希望(但绝不相信)这是通过混淆器传递的,而不是代码实际上是这样的。

另一个最受欢迎的技巧(尽管我不记得产品)是重命名所有要从集合{'0','O','l','1'}构建的对象,这使得阅读变得非常困难。

票数 3
EN

Stack Overflow用户

发布于 2009-09-04 04:04:15

假设您可以反编译回一种合理的源代码样式(您不能总是这样做),那么在不熟悉的问题域中操作的算法很难“反向工程”。如果您不了解快速傅立叶变换,那么如果您能够返回实现FFT蝴蝶的代码,那么这并不重要。(如果这个短语你不熟悉的话,如果我编码一个,我已经赢了。如果你对它很熟悉,那么你是一个相当好的工程师,可能对逆向工程代码没有任何兴趣)。你和朝鲜人的里程可能会不同。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1152261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档