我试图在我们正在使用的第三方框架中稍微扩展一个未记录的类.我用jd-gui反编译了.class文件,看到一个像这样定义的内部类:
private class DeactivateAction extends AbstractAction {
public DeactivateAction() {
super("Deactivate");
}
public void actionPerformed(ActionEvent paramActionEvent) {
if (MyContainingType.this.someBoolean) {
MyContainingType.access$102(MyContainingType.this, false);
MyContainingType.this.add(MyContainingType.this.interceptor);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道如何解释"访问$ 102"这一行.MyContainingType扩展了javax.swing.JLayeredPane.这不能为我编译,所以如何解释这个并在我的扩展类中正确转换它?
是否可以将.NET 2.0二进制文件(*.exe)反编译为某种可读代码?或者如果没有,只需从中提取一些信息(例如方法名称,调试信息等)?
由于SWF非常容易反编译,如果我使用内部安全密钥分发SWF或者代码有一些有价值的代码,我应该如何保护它?
编辑:我认为反编译SWF非常容易,因为它是字节编码为SWF然后jitted运行.Java编译和执行也是如此.这是否意味着即使java代码也不够安全?
那么,为什么Java更加可靠和可靠,并且SWF在任何地方都不被认为是安全的?
伙计们,我今天使用了一个反编译器jd-gui,发现了一些非常奇怪的东西.
假设我有一个jar文件,lib.jar,我反编译它.结果是在同一个包下有一些名为A.class,B.class,a.class等的类文件.当我试图将反编译的源文件粘贴到eclipse项目中时,但IDE表示它不会接受同一文件夹下的A.class和a.class.怎么会这样?我猜没有人从a到z命名他/她的类文件.但反编译器告诉了我.
我还尝试在我的项目中导入lib.jar,发现我无法触及a.class和A.class所在的那个包下的任何公共类或接口.当我输入该包时没有提示,例如,"进口公司.工具."
谁能告诉我原因?在此先感谢,祝新年快乐!
我已经从一个不再可用的人那里获得了一个网站.在已部署的文件夹中,我有Config.aspx(请参阅代码).但我找不到codebehind文件.配置页面有效.我在哪里可以找到.cs文件?
谢谢
<%@ page language="C#" masterpagefile="~/Master/StaffPortal.master" autoeventwireup="true"
inherits="Admin_Config" title="Configuration" codebehind="Config.aspx.cs" %>
<asp:content id="Content1" contentplaceholderid="PageBody" runat="Server">
<div style="width: 405px; height: 25px" class="GeneralCaption">
Configuration Parameters
</div>
<asp:Table ID="Table" runat="server" Style="width:100%">
</asp:Table>
<asp:Button ID="OKButton" runat="server" CssClass="GeneralButton" Text="OK" OnClick="OKButton_Click" />
<asp:Button ID="CancelButton" runat="server" CssClass="GeneralButton" Text="Cancel" OnClick="CancelButton_Click" />
</asp:content>
Run Code Online (Sandbox Code Playgroud) 我喜欢c#用于编程应用程序(我认为自己用c#中间,用C/C++稍微少一点,但我只是在学习,在竞技场中还没有真正的东西),而且我曾经喜欢它,直到我发现"有人"了解它MSIL(不是一个容易学习的任务)可以反编译我的代码.我真的不关心有人反编译我的代码,但我最关心的是我最终程序用户的安全性.我知道混淆器存在,我甚至知道一两个非常好,我听说(即使他们只是延迟反编译).
例如,如果我想使用c#解密某些内容,那么密钥应该在代码中的某些位置,使得使用我的程序的任何人都有危险(知道有人使用我的程序加密文件的人可以通过研究解密它我的MSIL代码,找到我的密钥).然后,由于这个原因,我认为开发加密/解密东西(或OpenSSL)的大量应用程序是疯狂的c#.
我的意思是,大多数用户不会知道用什么语言制作那个exe,但是很多人都可以编写nc#,这个人的精英可以阅读MSIL,而这个精英中的少数人想要破解什么是可能的黑客攻击.在那些喜欢破解的人中,有些人可以用不正当的意图来做这件事(在我们生活的无价值的世界里,任何人都不应该感到惊讶).
因此,如果我想制作一个从互联网上下载文件的程序,有人可能会干扰传输并做一些恶事,即使我使用OpenSSL和c#,因为c#文件中的某个地方是关键.我知道避免黑客攻击可能是不可能的,但看起来c#是一种非常不安全的方式.
它会发生在Java吗?(Java与C#具有相同的"解释"和"反编译"结构); 我的意思是,密钥在Java中可见(有一些受过教育的眼睛)在构建文件中的某些位置?或者Java是否使用了一些基于C/C++的API,这使得对密钥进行反编译的文件变得更难(更难),从而难以获得密钥?
我是用c/c ++编写程序的唯一选择吗?因为如果是这样的话,我唯一的选择就是C++ Builder,因为它甚至可以尝试观察(并且更少学习)MFC/OWL代码; 我的意思是:我几乎无法想到有人喜欢MFC/OWL编程.事实上,我认为大会可能对今天的编程世界更感兴趣.
所以,在这里,我想找到一个可以更好地解释我的方法来安全地加密密钥以加密/解密或者使用OpenSSL和c#.甚至是Java.我想确认C/C++是真正使用这些功能的唯一方法,其中一些安全性用于反编译原因(如其他编译编程语言,即Delphi).
如果有人知道一个网站,我可以找到关于我所做的微妙推理的精确信息(特别是在我的分析中显示错误的那个),请告诉我.如果有人能确认我的分析,请确认.如果有人在我的分析中找到任何漏洞,请再次告诉我,以及在哪里可以找到更多信息来统治我以更好地理解这一切.
很抱歉这个哲学计算机编程问题很长.
谢谢,
McNaddy
我用反编译器来获取C#中某些库的来源.它产生的一个未知(对我来说)构造如下:
Action action = null;
<>c__DisplayClass9 class2;
action = new Action(class2, (IntPtr) this.<OptimizeVisuals>b__6);
Run Code Online (Sandbox Code Playgroud)
之类的东西<>c__DisplayClass9或者(IntPtr) this.<OptimizeVisuals>b__6我只是不能神交.更重要的是,这个表达式不能用C#编译器编译,所以我需要提出更友好的东西.尝试谷歌这部分,但没有运气.你能给我一些提示吗?它似乎与匿名方法有关,但这是我最好的猜测.
提前致谢.
编辑:也许我最初的问题不是很清楚我需要实现什么.所以重新强调:我需要将提到的代码转换为普通的C#代码,执行与反编译之前相同的操作.我的任务是改变我正在反编译的库中的某些东西,同时保持其他功能(如上面提到的)完好无损.这对我来说非常重要,所以如果有人能帮助我,我真的很感激.
我使用ILSpy反编译了一个程序集,特别是一个类引起了我的注意:
public class CustomTextStream : NetworkStream
{
private EventHandler<CustomEventArgs> someEvent;
public event EventHandler<CustomEventArgs> SomePublicEvent
{
add
{
EventHandler<CustomEventArgs> eventHandler = this.someEvent;
EventHandler<CustomEventArgs> eventHandler2;
do
{
eventHandler2 = eventHandler;
EventHandler<CustomEventArgs> value2 =
(EventHandler<CustomEventArgs>)Delegate.Combine(eventHandler2, value);
eventHandler =
Interlocked.CompareExchange<EventHandler<CustomEventArgs>>(
ref this.someEvent, value2, eventHandler2);
}
while (eventHandler != eventHandler2);
}
remove
{
// similar stuff...
}
}
}
Run Code Online (Sandbox Code Playgroud)
在代码中,似乎私有委托用于触发实际事件:
if (something != null && somethingElse != 0)
{
this.someEvent(this, new CustomEventArgs(someArg));
}
Run Code Online (Sandbox Code Playgroud)
问题:假设某些"编译/反编译魔法"没有发生,有人可以猜出这个自定义访问器背后的想法是什么吗?我对IL不是很熟悉,顺便说一下......
(旁注:应用程序是多线程的,显然利用网络.)
我正在尝试为x86可执行文件构建一个反编译器,并且想知道我是否可以安全地假设函数前导/序言将保持不变.是否有可能编译器可以将它们优化出组件?
我试图通过反编译.class文件来了解Java编译器的工作原理.我使用了Java反编译器(http://jd.benow.ca/)和showmycode(http://www.showmycode.com/)它们在.java文件中显示了不同的源代码.为什么?我应该相信哪一个.
.java文件
class HelloWorld{
public static void main(String[] args){
System.out.println("Hello, World!");
}
}
Run Code Online (Sandbox Code Playgroud)
.class文件由java反编译器解编译:
import java.io.PrintStream;
class HelloWorld
{
public static void main(String[] paramArrayOfString)
{
System.out.println("Hello, World!");
}
}
Run Code Online (Sandbox Code Playgroud)
.class文件由showmycode解编译
import java.io.PrintStream;
class HelloWorld {
HelloWorld() {
}
public static void main(string args[])
{
system.out.println("Hello, World!");
}
}
Run Code Online (Sandbox Code Playgroud) decompiling ×10
c# ×4
.net ×3
java ×3
decompiler ×2
security ×2
actionscript ×1
apache-flex ×1
asp.net ×1
assembly ×1
encryption ×1
events ×1
flash ×1
ilspy ×1
x86 ×1
x86-64 ×1