闲来没事干然后想看看apk文件能不能看到代码逻辑,然后就尝试着进行的反编译。反编译之后发现有的apk被加固了,然后又尝试着对apk脱壳。下面就是一些实现步骤,原理的话可以自行去了解。该文章仅供学习用途、请勿用于非法用途。否则后果自负!
一、apktool反编译
工具:apktool
官网下载地址:https://apktool.org/docs/install/
配置:下载安装之后配置环境变量PATH中,如:C:\xxx\xxx,该路径是你放apktool.jar(C:\xxx\xxx\apktool.jar)的路径
检查:命令行输入apktool -version,返回对应的版本号就说明配置成功
执行:
命令行输入下面的命令就行,我就单边的反编译了一下,没深入理解,是还有别的参数的,有兴趣可以自己去查一下;
apktool d xxx.apk
输入上面的命令之后会在当前目录下生成一个和apk名一样的文件夹,里面就是我们需要的内容
文件夹对应的内容(从别的地方复制过来的,哈哈哈)
assets:资源文件 lib:jni相关的so包
original:原始的AndroidManifest.xml文件和签名文
res:xml和图片资源
smail:反编译出来的代码,smail文件夹中目录结构和源代码的包一样
AndroidManifest:就AndroidManifest.xml
然后就可以去用你喜欢的编译器去看对应的代码,搜索查找对应的内容进行修改
修改之后执行下面的命令进行打包,xxx就是刚刚上面反编译生成的一个文件夹,也是有参数的,有兴趣可以自己去查询了解
apktool b xxx
执行成功之后会在你的这个xxx文件下生成一个dist文件夹,里面就是你刚刚生成的apk,这个时候你进行安装大概率会出问题,接着往后看
二、对齐
参考文档:https://developer.android.google.cn/tools/zipalign?hl=zh-cn
工具:zipalign
下载地址:https://www.androiddevtools.cn/index.html这个地址能下载很多安卓的工具,可以去查找下载,直接下载AndroidSDK就行
配置:下载安装之后配置环境变量PATH中,如:C:\AndroidSDK\build-tools\29.0.3,在C:\AndroidSDK\build-tools\29.0.3你会看到一个zipalign.exe,我们要用的就是它
它的一些对应命令
#对齐,input.apk代表你对齐的apk,output.apk就是对齐之后输出的apk
zipalign -v 4 input.apk output.apk
#检查是否对齐,in.apk就是要检查的apk
zipalign -c -v 4 in.apk
对齐完了,就是签名了
三、签名
工具:keytool 和apksigner
下载:keytool 是JDK里面的工具,只要之前安装了JDK就可以直接用了;apksigner是AndroidSDK里面的,就在版本号的文件里面,也是直接用就行;
配置:JDK和AndroidSDK环境变量配置好之后直接可以用
要先生成一个签名,签名的时候会让你输入一些内容,随便填就行,my-release-key.keystore就是你生成的签名文件
keytool -genkeypair -v -keystore my-release-key.keystore -alias my-alias -keyalg RSA -keysize 2048 -validity 10000
查看签名文件,my-release-key.keystore就是要查看的对应签名文件
keytool -v -list -keystore my-release-key.keystore
进行签名,input-unsigned.apk就是你要签名的apk,就是上面已经对齐的apk,output-signed.apk就是签名之后输出的apk
apksigner sign --ks my-release-key.keystore --out output-signed.apk input-unsigned.apk
还有一些其它的名,也行会用到,in.apk就是你要查看的apk
#查看签名情况,详细
apksigner verify -v --print-certs in.apk
#查看签名情况,简单
apksigner verify -v in.apk
签名完成就可以安装了,有时也会遇到安装不可用等问题,都是安装包做了安全校验的
还有其它命令可以使用
aapt dump badging in.apk
小结:
我闲来无聊使用的步骤就是
#解包
apktool d xxx.apk
#打包
apktool b xxx
#对齐
zipalign -v 4 input.apk output.apk
#生成签名文件
keytool -genkeypair -v -keystore my-release-key.keystore -alias my-alias -keyalg RSA -keysize 2048 -validity 10000
#签名
apksigner sign --ks my-release-key.keystore --out my-app-signed.apk my-app-unsigned.apk
需要注意一个问题,就是生成签名的工具的jdk版本和你使用的jdk版本不一致,这样有可能会出问题
四、逻辑修改
工具:dex2jar(下载地址:https://sourceforge.net/projects/dex2jar/)和JD-GUI(下载地址:http://java-decompiler.github.io/)
配置:下载之后解压就能使用的,不用进行什么配置
使用方法:
1.就是把需要操作的apk改下后缀为zip或者rar就行,然后解压,会得到class.dex文件
2.然后把这些dex文件使用命令进行解析,就可以生成一个对应的jar包,有时会有多个class.dex文件
d2j-dex2jar.bat class.dex
3.再JD-GUI解压文件里面的jd-gui.exe,然后打开要查看的jar文件就行,也可以直接把jar文件拖到启动的jd-gui.exe里面,如果需要修改就需要改成java包进行修改,选中保存就是转为java文件了
上面操作,就是修改逻辑文件的一些情况。修改java文件后的再继续打包我没有试过,有兴趣的同学可以试试。
smail文件和jar里面的文件是一样的,我只是在找到对应的代码之后到smail文件里面找到对应的地方简单修改再打包,如果你懂的smail文件就不用这么麻烦了,直接改smail文件就行
五、脱壳
1.脱壳的话有大神的方法可以学习一下,简单粗暴,就是有点可惜停止了这个项目,原因同学们可以自行了解,地址https://github.com/CodingGay/BlackDex?tab=readme-ov-file
2.还有别的方法就是麻烦一些
首先先安装一些工具
pip3 install frida
pip3 install frida-tools
安装好之后在安装一个frida-dexdump,大神写的一个工具https://github.com/hluwa/FRIDA-DEXDump
pip3 install frida-dexdump
再去下载安卓的frida-server,地址https://github.com/frida/frida/releases
下载对应的之后解压,然后给传到你的手机上,注意,这里的安卓frida-server要下载你的frida对应版本的,要不然后面会报错,如果后面报错可以检查一下这个版本是否一致,检查frida版本号的命令frida --version
#查看你的手机是否正常连接了电脑
adb devices
#给root权限,需要到手机确认一下
adb root
#将解压后的安卓frida-server传给手机上
adb push frida-server-14.2.18-android-x86_64 /data/local/tmp
#进入手机
adb shell
#进入到对应的安卓frida-server目录
cd /data/local/tmp
#给这个服务提权
chmod 777 frida-server-14.2.18-android-x86_64
#启动这个服务
./frida-server-14.2.18-android-x86_64
启动之后这样不报错就行了
然后转发一下端口,转发的是frida-server默认端口
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043
这个可以检查frida-server是否正常,正常的话就会展示Android进程列表
frida-ps -R
出现这个错误一般就是没有端口转发
Failed to enumerate processes: unable to connect to remote frida-server
出现这个错误就是电脑的frida和安卓的frida-server版本号不一致
Failed to enumerate processes: connection closed
然后在电脑的命令行输入下面的命令,获取app对应的包名,需要启动app
frida-ps -U -a
然后在输入这个命令,就能在执行这个命令的目录下生成一个包名的文件夹,里面就是所需要的dex文件,需要自己筛选哪些是有用的,一般看文件大小吧,具体我也不太清楚。出现这个All done…就说明成功了
frida-dexdump -U -f com.app.pkgname
小结
1.有可能会出现的错误
如果在操作过程中途出现下面这个报错
[!]load_script Exception: need Gadget to attach on jailed Android; its default location is: C:\Users\XXX\AppData\Local\Microsoft\Windows\INetCache\frida\gadget-android-arm64.so
只需找到在https://github.com/frida/frida/releases中找到
Frida Gadgets下载,下载对应的版本就行,最好版本都一致,避免出现一些问题
然后按照报错的提示找到对应的文件夹,没有就创建一个,我的是这样的C:\Users\Administrator.PC-201907240902\AppData\Local\Microsoft\Windows\INetCache\frida
然后把下载的文件解压,改名为gadget-android-arm64.so,就是保存对应的名字,放到上面这个目录下就行了
2.如果用的mumu模拟器有时需要抓包分析apk的接口,这里需要配置一下ca文件,mumu模拟器配置ca文件的话,可以参考官方文档https://mumu.163.com/help/20221018/35047_1047210.html
3.检查是否加固的工具,朋友分享给我的,直接打开就可以用,可以在这里
下载链接:https://pan.baidu.com/s/1plYLCD6FJ4fI1lxDKNbX5g
提取码:cpv8
4.如果遇到一些别的问题,自行百度一下就能解决,大神还是很多的
总结
了解一下apk的逆向,对自己也有帮助,上面都是一些简单的操作,具体原理没有仔细去了解,要掌握的更多、更透彻,还得去了解一下原理,这个脱壳就是借用大神的工具去实现的,但是原理都没去看,整体下来还是不错的,自己会简单的逆向。但是反编译之后修改再打包还得研究一下。再次说明一下,该文章仅供学习用途、请勿用于非法用途。否则后果自负!