【移动安全基础篇】——16、静态分析的概念与定位关键代码

静态分析:
不运行代码的情况下,阅读反汇编代码掌握程序功能

两种方法:
1. 阅读 Dalvik 字节码(通过 baksmali 反编译 dex 文件生成 samli 文件)
2. 阅读 java 代码(通过 dex2jar 生成 jar 文件,在 jd-gui 阅读 jar 文件)

常用步骤:
1. 反编译 apk
2. 通过 AndroidManifest.xml 查找主 Activity

3. 查看程序的入口函数:主 Activity 的 onCreate()
4. 查看 Application 类(全局类,早于其他类启动)的 onCreate()函数,该函数通常用作授权检测

定位关键代码常用方法:

1. 信息反馈发:运行时信息
2. 特征函数法:运行时行为
3. 顺序查看法:执行流程
4. 代码注入法:添加 Log

Smali  代码格式:

内部类的表示:
MainActivity$1.smali:匿名内部类,多用于程序中的响应
MainActivity$SNChecker.smali:成员内部类
MainActivity.smali:外部类
this$0 是内部类自动保留的一个指向所在外部类的引用。this 表示父类的引用,右边的 0 便是引用的层数,例如:ThirdInner 是 this

this$X 型字段都被指定了 synthetic(合成的、编译器生成的)属性,表明他们是被编译器合成的、虚构的、非 java 代码指定的字段。
构造函数执行步骤:
1. 保存外部类的引用到本类的一个 synthetic 字段中
2. 调用内部类的父类构造函数
3. 内部类初始化

总会有不期而遇的温暖. 和生生不息的希望。
原文地址:https://www.cnblogs.com/devi1/p/13486450.html