0%

app安全测试-逆向工程

说明

  • 了解移动平台上的漏洞,因为越来越多的用户正在使用个人智能手机,而这类设备操作复杂,我们可能无法理解其背后的漏洞。今天的课程将以OWASP TOP 10(web也有对应的top 10)提供的十大移动漏洞为指导。

  • 阅读这个网站,里面对这个top 10 都有介绍

OWASP Mobile Top 10

  • M1 - 平台使用不当
  • M2 - 不安全的数据存储
  • M3 - 不安全的通信
  • M4 - 不安全的身份验证
  • M5 - 弱加密
  • M6 - 不安全的授权
  • M7- -客户端代码质量
  • M8- -代码篡改
  • M9– 逆向工程
  • M10- 无关功能

环境准备

  • 这里使用这个网站提供的apk安装包
    • 这个github上面提供的安全测试的资料文档可以仔细研读

M9– 逆向工程

工具介绍

  • ApkTool是主要查看res文件下xml文件、AndroidManifest.xmlclasses.dex。(注意:如果直接解压.apk文件,xml文件打开全部是乱码)
    • dex = Dalvik Executable format
    • dex文件:逻辑类似于javaclass文件
    • 安卓系统中,用Dalvik虚拟机(DVM = Dalvik Virtual Machine)去把java源代码编译为dex可执行文件(Dalvik Executable
  • dex2jar 作用:将apk反编译成Java源码(classes.dex转化成jar文件)
  • jd-gui 作用:查看APKclasses.dex转化成出的jar文件,即源码文件

工具安装

  • 安装apktool,本机安装好java 1.8+,打开安装网页我亲自测试过了,apktool解压后的文件没有发现classes.dex,所以后面还是采用改后缀名解压

image-20220331114419613

  • 前三个步骤分别是,下载一个apktool.bat文件,下载apktool_version.jar文件后,并重命令为apktool.jar,然后把apktool.batapktool.jar 放在同一个目录下

  • 打开dex2jar,下载最新的版本为:dex2jar-2.1

  • 打开jd-gui,下载最新的版本为:jd-gui-windows-1.6.6.zip

开始工作

  • 看下我提前准备好的工具

image-20220331145737635

  • 执行命令
1
D:\appsafetest>apktool d diva-beta.apk
  • 成功把apk解压,到res目录发现居然没有classes.dex

image-20220331155618163

  • 还是换成改后缀名为.zip,然后解压的方式得到了classes.dex

  • 使用dex2jar 进行反编译(下载jdk7,修改环境变量),提前把解压中的classes.dex放到dex-tools-2.1目录中

1
2
3
4
D:\appsafetest\dex-tools-2.1>java --version
java 17.0.2 2022-01-18 LTS
Java(TM) SE Runtime Environment (build 17.0.2+8-LTS-86)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.2+8-LTS-86, mixed mode, sharing)
  • 使用d2j-dex2jar 执行反编译命令,在当前文件夹会出现一个classes-dex2jar.jar
1
2
D:\appsafetest\dex-tools-2.1>d2j-dex2jar.bat classes.dex
dex2jar classes.dex -> .\classes-dex2jar.jar
  • 使用 jd-gui 打开classes-dex2jar.jar

image-20220331165030082

其他

  • 常见的破解app的流程,这里是最基础也是最关键的:

  • 得到classes.dex

    • 解压apk得到classes.dex,用传统的unzipapktool
    • 如果涉及到加固方面的东西,有普通加固商家收费的加固,如果是普通加固可以采用:夜神模拟器+FDex2+Xposed
  • dex文件反编译出jar包,比如用的这个工具dex2jar

  • jar包反编译出java源代码,比如反编辑器工具jd-gui

  • 使用jd-gui反编译出来查看的可能是smali文件,所以要学习一些smali基本的语法,这里修改代码

  • 修改完代码后,就要重新打包成APK文件了,可以采用apktool 来打包得到新的apk

  • 然后就是签名操作,打包得到的apk文件无法安装,需要签名,可以采用keytool -genkey -keystorejarsigner -verbose -keystore ,签名成功后,apk包就可以安装成功

  • 当然网络上也有一些工具把这些集成在一起了,比如改之理ApkToolkit