171121 逆向-静态分析安卓(特殊类)

来源:互联网 发布:孙可望 知乎 编辑:程序博客网 时间:2024/05/21 09:28

1625-5 王子昂 总结《2017年11月21日》 【连续第417天总结】
A. 静态分析安卓程序-Android程序中的特殊类
B.

内部类

Java语言允许在一个类的内部定义另一个类,这种在类中定义的类被称为内部类。内部类可分为成员内部类、静态嵌套类、方法内部类、匿名内部类。
内部类也会生成独立的smali文件,命名方式为外部类$内部类.smali

内部类中存在一种实例字段thisxthis0)
它是内部类自动保留的一个指向所在外部类的引用。左边的this表示为父类的引用,右边的数值0表示引用的层数。
eg:

public class Outer {       //this$0 public class FirstInner {   //this$1  public class SecondInner {  //this$2   public class ThirdInner {   }  } }}

每向内一层,右边的数值就加一
例如当ThirdInner类中访问FirstInner类的引用就为this$1
(这种引用方式使得任意一个内部类访问外部类的引用都是一致的,而不会因为内部类改变而改变引用变量)

监听器

由于监听器通常不会被复用,所以一般使用匿名内部类的形式实现:
btn.setOnClickListener(new android.view.View.OnClickListener(){xxx}

监听器的实质是接口。
另外注解和构造函数都是编译器自动生成的,通常只需要关注onClick()方法即可

自动生成的类

使用Android SDK默认生成的工程会自动添加一些类。这些类在发布后仍然保留在apk文件中。

R

R类中定义了res资源的ID值和变量名
工程res目录下的每个资源都会有一个id值,这些资源的类型可以是字符串、图片、样式、颜色等。
每个类型会作为R的一个内部类独立生成一个smali文件。

BuildConfig

这个类是在Android SDK r17版本中添加的,之后一直存在
这个类中只有一个布尔类型的名为DEBUG的字段,用来标识程序发布的版本类型
默认值为True。如需更改需要关闭自动构建后使用右键导出程序

注解类

如果代码中使用了SuppressLint或TargetApi注解,程序中将会包含

C. 明日计划
android