实践是知识的母亲,知识是生活的明灯。这篇文章主要讲述APP安全_Android反编译相关的知识,希望能为你提供帮助。
反编译
android的反编译工具:apktool,JEB等。
- Apk 文件的结构,如下:
- META-INF:签名文件
- res:资源文件,里面的 xml 格式文件在编译过程中由文本格式转化为二进制的 AXML 文件格式
- AndroidManifest.xml:android 配置文件,编译过程依然被转换为 AXML 格式
- classes.dex:java 代码编译后产生的类似字节码的文件(dalvik 字节码,核心逻辑)
- resources.arsc:具有 id 值资源的索引表(asserts 文件夹中的资源不会生成索引)
- 其他文件:可由开发者自己添加,诸如 assets 等,或者 lib(native so 代码)等目录
- 【APP安全_Android反编译】一般APK破解过程:
文章图片
- 逆向破解Android小技巧
- 信息反馈:通过界面的一些弹出信息,界面特点寻找突破点。
- 特征函数:比如搜Toast,Log,getSignature等。
- 代码注入:把toast或者log函数注入到程序中,跟踪位置。
- 打印堆栈:插入new Exception(“定位”).printStackTrace()。
- 网络抓包:通过抓包得到的关键字段,在代码中定位。
- 推荐资料书
- Android软件安全与逆向分析
- Android Security Internals
- Apktool
- signapk.jar【apk签名工具】
java -jar signapk.jartestkey.x509.pem testkey.pk8 old.apk new.apk
- dex2jar
- jd-gui
- JEB
apktool安装(MacOS)
- 点击下载地址,在看雪学院网站下载相应的apktool包;
- 解压,将包中的三个文件复制到/usr/local/bin下;
文章图片
- 执行apktool,查看安装情况。
文章图片
- 点击下载地址
- 点击下载地址
- 进入存放apk目录;
- apktool d XX.apk;【编译apk:apktool b app文件】
- 在同级目录中出现与包名一样的文件,生成的文件如下:
文章图片
各文件简单介绍如下:反编译classes.dex文件
AndroidManifest.xml:清单文件,非二进制。
apktool.yml:apk属性。
original:原始数据,应用的二进制清单和签名。
res:资源文件。
smali:dex解析的代码。smali是dex虚拟机的解析格式,在dex2jar中也包含smali格式的转换。
- 将需要反编译的apk重命名后缀为zip,解压,解压后的文件夹中有个classes.dex文件,获取该文件的路径 ;
- 输入命令cd xxx/xxx/dex2jar,进入下载的dex2jar文件夹中 ;
- 输入命令sh dextool.sh xxx/xxx/xxx/classes.dex,进行反编译classes.dex文件;
- 操作完成后,会在dex2jar文件夹中生成一个classes-dex2jar.jar文件 ;
- 打开jd-gui工具,将classes-dex2jar.jar拖入jd-gui界面上,就能够看到Java文件。
- 反编译apk包报错
文章图片
执行反编译apk包时,提示Could not decode arsc file;JEB
产生原因:apktool.apk版本太低,下载最新的版本,将旧的apktool.jar替换。
安装
- 下载地址
- 解压,将JEB根目录配置到环境变量中;
- 运行jeb_macos.sh,启动JEB窗口;
- File-> open,选择*.apk。
- mac下运行jeb_macos.sh报错
文章图片
报错原因:jeb包中的swt是win版本
解决办法:下载mac版本的swt,swt-3.6.1-cocoa-macosx-x86_64.jar.zip,存放到Jeb/bin下,将swt-3.6.1-cocoa-macosx-x86_64.jar修改成swt.jar。
推荐阅读
- 远程桌面 虚拟打印 到本地打印机(虚拟化 终端 远程接入 RemoteApp)
- 数据库: 安装配置数据库,使用Navicat for MySQL和手机APP 连接测试(如果上一节碰到问题可参考这一节)
- BeanWrapper
- 数据库: 安装配置数据库,使用Navicat for MySQL和手机APP 连接测试
- centos安装bWAPP环境
- 趣步app软件模式开发
- Java——包装类(Wrapper)
- windows上Appium安装和使用
- 使用validate进行表单验证时土方法(appendTo)改变error显示的位置