`

反编译出现access$分析

 
阅读更多

1)static Type access$iii(Outer); 是JAVA编译器自动生成的十分重要的方法(该方法的个数由你的内部类要访问的外部类的变量个数相关),目的是:用于内部类访问外部类的数据成员时使用.

2)因此:JAVA编译器在生成内部类的访问外部类的数据成员时,会自动生成代码来调用这个方法.
以你的代码为例:内部类Inner中的方法
public int getDate() { 
return xx; 

生成的代码如下:(经javap 处理后)

Java code
 
?
1
2
3
4
5
6
7
8
9
10
11
12
public int getDate();
  LineNumberTable:
   line 120
 
 
 
  Code:
   Stack=1, Locals=1, Args_size=1
   0:   aload_0
   1:   getfield        #1//Field this$0:LOuter;
   4:   invokestatic    #3//Method Outer.access$000:(LOuter;)I
   7:   ireturn


代码第4行:通过Outer.access$000(Outer o)来获取外部类对象o中的private型的数据成员(请注意:这可是从另外一个类中访问其它类的private型数据成员--不是通过反射技术)

3)进一步:
若外部类定义了两个private 数据成员如下:
private int xx=12;
private float yy=12.4f;
这两个数据成员在内部类中都要访问,则编译器会自动生成两个access方法:
static int access$000(Outer);  用于内部类访问private int xx;
static float access$100(Outer);  用于内部类访问private float yy;

4)这种内部类访问外部类中private数据成员的技术(不是通过反射!) 给安全留下了可能的小隐患(因为有些private数据成员是不提供外界访问它的所谓的getter()的).为此,编译器对自己自动生成的这些access$000()方法,在编译时进行检查,是不允许程序员直接来调用的.

但是:我们可以利用JAVA编译器对类的编译特性来绕过这个检查:目的是,达到在自己的其它类中直接来调用这些access$000()方法.
这样,我们可采用这个技术(即:在自己的类中--注意不是内部类,而是外部类中直接来调用这个access$000(Outer);)来访问其它类的private的数据成员了.

具体技术演示如下:
第一步:定义如下的类:
class Outer { 
private final int xx = 123;  
//由于是final,故不再自动生成access$000(Outer);

public Inner getInner() { 
return new Inner(); 

public class Inner { 
public int getDate() { 
return xx; 

} //class Inner

 static int access$000(Outer)//这个是自已定义的!
 {
  return  1;
 } 


第二步:定义你的其它类,来直接调用这个access$000()方法
public class Test1
{
 public static void main(String[] args)
 {

  System.out.println(Outer.access$000(new Outer()));  //这个调用是没有问题的,因为是自己定义的!
 }

}

将上述两个JAVA文件编译成class,成其是第二步的 Test1.class

第三步:这是变戏法的一步:
将第一步的类Outer改为如下:
class Outer { 
private  int xx = 123;  
//由于不是final,故自动生成access$000(Outer);

public Inner getInner() { 
return new Inner(); 

public class Inner { 
public int getDate() { 
return xx; 

} //class Inner
/*将这个第一步中自己定义的access$000去掉,因为编译器会自动生成它!
 static int access$000(Outer {
  return  1;
 } */

重新编译第三步中的这个类,而第二步中的类Test.class不动它. 此时,我们达到了这样一个目的:在类Test1中调用了Outer类中编译器自动生成的这个access$000(...)了.

分享到:
评论

相关推荐

    NET 防止反编译

    混淆是一种常用的方法,它通过改变代码结构、变量名和方法名,使反编译后的代码难以理解和分析。市面上有很多混淆工具,如Dotfuscator、Obfuscar等,它们可以增加逆向工程的难度。 2. **加密代码**: 将部分关键...

    foxpro反编译工具

    反编译工具能够将这些二进制代码转换回源代码形式,使得分析、修改和调试变得更加容易。 描述中提到"foxpro反编译工具,用于VFP6.0及以下",意味着这款特定的工具专门针对Visual FoxPro 6.0版本或更低版本。Visual ...

    dnspy .net反编译软件

    dnSpy是一款功能强大的.NET反编译工具,专为开发者和逆向工程爱好者设计。它提供了对.NET程序集的深入分析和编辑能力,使得用户能够查看并修改.NET应用程序的源代码,即使原始源代码不可用。这款软件的核心特性在于...

    android反编译工具全

    标题"android反编译工具全"指的是一个包含全面的Android反编译工具集合,而描述中提到了"包括dex2jar, apktool和JD-GUI",这些都是Android反编译流程中的关键工具。 1. **dex2jar**: 这是一个将Dalvik Executable ...

    最好用的access mdb解密工具

    Access MDB是Microsoft Access数据库文件的格式,用于存储和管理数据。这种文件类型有时会被加密以保护数据的安全,但有时用户可能需要解密MDB文件以访问其中的信息或进行其他操作。以下是一些关于Access MDB解密...

    VB+access成绩分析统计系统(论文+源代码).rar

    这些文件可以被反编译和学习,以理解整个系统的运作机制。开发者可以借此研究如何处理用户交互、如何与Access数据库通信,以及如何实现特定的统计计算和报表生成功能。 总的来说,这个项目为学习VB编程和数据库管理...

    nginx-accesskey-2.0.3

    定期查看Nginx的日志,分析访问行为,发现异常Access Key请求,及时调整策略。 4. **结合其他安全措施** 除了Access Key,还可以结合IP白名单、HTTPS、验证码等手段,进一步提升安全性。 综上所述,`nginx-...

    AccessdbHeple.dll与dll反编译器

    1. 下载并安装反编译工具,例如解压dll反编译工具.zip并运行安装程序。 2. 打开反编译器软件,通常有一个“打开”或“加载”按钮,用于选择目标DLL文件,这里是AccessdbHeple.dll。 3. 工具会分析DLL的IL代码,并...

    access进销存库存管理软件,功能强大,界面友好

    对于有能力的开发者来说,如果想要定制或改进软件,可能需要通过反编译或其他技术手段来理解软件的工作原理,这需要一定的技术背景和经验。 标签指出这是一款基于Access的软件,意味着它可能使用了Access的表、查询...

    android点心闹钟反编译包

    通过对这个反编译包的分析,开发者不仅能学习到Android应用的基础架构,还能深入了解如何在Android环境中高效、稳定地实现闹钟功能,这对于开发类似应用或者优化现有应用的性能都有极大的帮助。同时,这也是一次深入...

    JSP和Access做的BBS.r

    JSP最终会被编译为Servlet,由Java Web容器执行。 **Access数据库详解** Microsoft Access是一种关系型数据库管理系统,主要用于小型项目和个人数据管理。它支持SQL语言,可以创建数据库、表、查询、窗体、报表等...

    access_appliance_ev_solutions_81_lin.pdf

    9. **法律条款**:强调了使用该文档和软件的许可限制,包括对复制、分发和反编译/逆向工程的禁止,以及对任何间接或后果性损害的责任豁免。 10. **更改通知**:指出文档内容可能会随产品更新而变化,无需提前通知。...

    [软件安全作业]1

    - **Apktool反编译**:首先使用Apktool将APK文件反编译为Smali代码,以便于分析Android应用的元数据和源码。 - **权限信息分析**:检查`Manifest.xml`文件,了解应用所需的权限,如`INTERNET`、`ACCESS_NETWORK_...

    access_appliance_admin_743_lin.pdf

    文档明确指出,产品及其相关文档受到使用、复制、分发和反编译/逆向工程的限制。未经Veritas Technologies LLC及其许可方的事先书面授权,任何部分不得以任何形式通过任何方式复制。此外,文档明确声明,提供的是...

    Access Look pasword source

    因此,开发者应关注代码的反编译防护,以防止恶意攻击。 8. **代码审查与调试**: 在寻找或修复密码相关问题时,Delphi的IDE提供了强大的调试功能,允许开发者逐步执行代码,检查变量状态,包括密码处理过程中的中间...

    照片文字识别助手.apk 分析报告1

    加壳分析结果显示,该应用使用了腾讯的Legu打包技术,可能存在一些保护措施,例如防止反编译和调试。此外,应用内部包含了dexlib 2.x编译器的痕迹,这可能是为了实现动态加载或者代码混淆,提高应用的安全性。同时,...

    nginx编译文件及说明

    Nginx提供丰富的日志功能,可以通过`access.log`和`error.log`进行性能分析和问题排查。另外,通过调整配置参数,如worker_processes、worker_connections等,可以进一步优化Nginx性能。 10. **模块扩展与更新** ...

    营运车.apk 分析报告1

    关于加壳分析,报告指出应用使用了dexlib 2.x进行编译,这可能是为了混淆代码,提高反编译的难度。然而,具体的壳列表详细情况并未在此次报告中提供。 总体而言,"营运车"应用在安全方面存在一些潜在风险,特别是...

    抓哇便捷word文档制作.apk 分析报告1

    【抓哇便捷word文档制作.apk 分析报告】 该报告主要对名为“抓哇便捷word文档制作”的Android应用进行了深入的分析,以下是基于提供的信息所提取的关键知识点: 1. **应用基本信息**: - 应用名称:抓哇便捷word...

    dex2jar-2.1.rar

    【dex2jar-2.1.rar】是一款针对Android应用的反编译工具,主要用于将Dalvik Executable (DEX) 文件转换为Java字节码格式的JAR文件,从而便于开发者进行逆向工程分析。该压缩包包含了一系列与Android应用逆向工程相关...

Global site tag (gtag.js) - Google Analytics