wsxk / wsxk.github.io

MIT License
5 stars 0 forks source link

android 安全加固原理 #184

Open wsxk opened 3 months ago

wsxk commented 3 months ago

https://wsxk.github.io/androdi_shell/

前言

  1. Android加固原理

    5.1 Android原理图 5.2 dex文件格式 5.3 Application类 5.4 android加固流程 5.5 常见加固平台以及安全加固的优劣

    references

前言

老规矩,看这篇前,建议了解一下我之前写得内容( https://wsxk.github.io/android_vm/

  1. Android加固原理 5.1 Android原理图 目前大多安全加固的原理都如下图所示:

5.2 dex文件格式 说到安全加固,不得不了解dex的文件格式,先前的文章讲过,dex文件存放的是运行在Dalvik虚拟机内的字节码 其整体结构如下:

如果用010 editor查看某个dex文件的话,会发现如下结构:

基本对应

  数据名称
  功能解释

  dex_header
  dex文件头部记录整个dex文件的相关属性

  string_ids
  记录一些字符串常量的索引

  type_ids
  记录了android中的类的字符串名称索引

  proto_ids
  记录函数的返回值,参数等等信息的索引

  field_ids
  记录类的field名称的索引

  method_ids
  记录类的method名称的索引

  class_def
  记录类的定义及名称的索引

  data
  数据区,保存了各个类的真实数据

  link_data
  静态链接数据区

dex_header中,有几个字符需要重点关注:checksum、signature、fileSize

checksum: 使用alder32算法校验从该字段开始(不包括checksum本身)到文件末尾(即从文件的第12字节开始到文件末尾)的完整性
signature:使用SHA-1算法校验文件的完整性(checksum发现错误,就无需进行SHA-1校验,也算是双重保险)
fileSize : 记录dex文件大小

在使用加固技术对dex文件进行加固后,这三个字段是必须要修改的!!!

5.3 Application类 Application类比程序中的其他类启动的都要早,因此在分析Android程序中,需要先查看该程序是否具有Application类,如果有,就要看看它的oncreate()方法是否做了一些影响逆向分析的初始化工作 Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,用来存储系统的一些信息。Android系统自动会为每个程序运行时创建一个Application类的对象且只创建一个,所以Application可以说是单例(singleton)模式的一个类。 绝大部分加壳apk,都会在application类做些文章 通常我们是不需要指定一个Application的,系统会自动帮我们创建,如果需要创建自己的Application,创建一个类继承Application并在AndroidManifest.xml文件中的application标签中进行注册(只需要给application标签增加name属性,并添加自己的 Application的名字即可)。 <application android:name=