1)static Type access$iii(Outer); 是JAVA编译器自动生成的十分重要的方法(该方法的个数由你的内部类要访问的外部类的变量个数相关),目的是:用于内部类访问外部类的数据成员时使用.
2)因此:JAVA编译器在生成内部类的访问外部类的数据成员时,会自动生成代码来调用这个方法.
以你的代码为例:内部类Inner中的方法
public int getDate() {
return xx;
}
生成的代码如下:(经javap 处理后)
1
2
3
4
5
6
7
8
9
10
11
12
|
public int getDate();
LineNumberTable:
line 12 : 0
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(...)了.
相关推荐
混淆是一种常用的方法,它通过改变代码结构、变量名和方法名,使反编译后的代码难以理解和分析。市面上有很多混淆工具,如Dotfuscator、Obfuscar等,它们可以增加逆向工程的难度。 2. **加密代码**: 将部分关键...
反编译工具能够将这些二进制代码转换回源代码形式,使得分析、修改和调试变得更加容易。 描述中提到"foxpro反编译工具,用于VFP6.0及以下",意味着这款特定的工具专门针对Visual FoxPro 6.0版本或更低版本。Visual ...
dnSpy是一款功能强大的.NET反编译工具,专为开发者和逆向工程爱好者设计。它提供了对.NET程序集的深入分析和编辑能力,使得用户能够查看并修改.NET应用程序的源代码,即使原始源代码不可用。这款软件的核心特性在于...
标题"android反编译工具全"指的是一个包含全面的Android反编译工具集合,而描述中提到了"包括dex2jar, apktool和JD-GUI",这些都是Android反编译流程中的关键工具。 1. **dex2jar**: 这是一个将Dalvik Executable ...
Access MDB是Microsoft Access数据库文件的格式,用于存储和管理数据。这种文件类型有时会被加密以保护数据的安全,但有时用户可能需要解密MDB文件以访问其中的信息或进行其他操作。以下是一些关于Access MDB解密...
这些文件可以被反编译和学习,以理解整个系统的运作机制。开发者可以借此研究如何处理用户交互、如何与Access数据库通信,以及如何实现特定的统计计算和报表生成功能。 总的来说,这个项目为学习VB编程和数据库管理...
定期查看Nginx的日志,分析访问行为,发现异常Access Key请求,及时调整策略。 4. **结合其他安全措施** 除了Access Key,还可以结合IP白名单、HTTPS、验证码等手段,进一步提升安全性。 综上所述,`nginx-...
1. 下载并安装反编译工具,例如解压dll反编译工具.zip并运行安装程序。 2. 打开反编译器软件,通常有一个“打开”或“加载”按钮,用于选择目标DLL文件,这里是AccessdbHeple.dll。 3. 工具会分析DLL的IL代码,并...
对于有能力的开发者来说,如果想要定制或改进软件,可能需要通过反编译或其他技术手段来理解软件的工作原理,这需要一定的技术背景和经验。 标签指出这是一款基于Access的软件,意味着它可能使用了Access的表、查询...
通过对这个反编译包的分析,开发者不仅能学习到Android应用的基础架构,还能深入了解如何在Android环境中高效、稳定地实现闹钟功能,这对于开发类似应用或者优化现有应用的性能都有极大的帮助。同时,这也是一次深入...
JSP最终会被编译为Servlet,由Java Web容器执行。 **Access数据库详解** Microsoft Access是一种关系型数据库管理系统,主要用于小型项目和个人数据管理。它支持SQL语言,可以创建数据库、表、查询、窗体、报表等...
9. **法律条款**:强调了使用该文档和软件的许可限制,包括对复制、分发和反编译/逆向工程的禁止,以及对任何间接或后果性损害的责任豁免。 10. **更改通知**:指出文档内容可能会随产品更新而变化,无需提前通知。...
- **Apktool反编译**:首先使用Apktool将APK文件反编译为Smali代码,以便于分析Android应用的元数据和源码。 - **权限信息分析**:检查`Manifest.xml`文件,了解应用所需的权限,如`INTERNET`、`ACCESS_NETWORK_...
文档明确指出,产品及其相关文档受到使用、复制、分发和反编译/逆向工程的限制。未经Veritas Technologies LLC及其许可方的事先书面授权,任何部分不得以任何形式通过任何方式复制。此外,文档明确声明,提供的是...
因此,开发者应关注代码的反编译防护,以防止恶意攻击。 8. **代码审查与调试**: 在寻找或修复密码相关问题时,Delphi的IDE提供了强大的调试功能,允许开发者逐步执行代码,检查变量状态,包括密码处理过程中的中间...
加壳分析结果显示,该应用使用了腾讯的Legu打包技术,可能存在一些保护措施,例如防止反编译和调试。此外,应用内部包含了dexlib 2.x编译器的痕迹,这可能是为了实现动态加载或者代码混淆,提高应用的安全性。同时,...
Nginx提供丰富的日志功能,可以通过`access.log`和`error.log`进行性能分析和问题排查。另外,通过调整配置参数,如worker_processes、worker_connections等,可以进一步优化Nginx性能。 10. **模块扩展与更新** ...
关于加壳分析,报告指出应用使用了dexlib 2.x进行编译,这可能是为了混淆代码,提高反编译的难度。然而,具体的壳列表详细情况并未在此次报告中提供。 总体而言,"营运车"应用在安全方面存在一些潜在风险,特别是...
【抓哇便捷word文档制作.apk 分析报告】 该报告主要对名为“抓哇便捷word文档制作”的Android应用进行了深入的分析,以下是基于提供的信息所提取的关键知识点: 1. **应用基本信息**: - 应用名称:抓哇便捷word...
【dex2jar-2.1.rar】是一款针对Android应用的反编译工具,主要用于将Dalvik Executable (DEX) 文件转换为Java字节码格式的JAR文件,从而便于开发者进行逆向工程分析。该压缩包包含了一系列与Android应用逆向工程相关...