apk反编译以及脱壳记录

闲来没事干然后想看看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的逆向,对自己也有帮助,上面都是一些简单的操作,具体原理没有仔细去了解,要掌握的更多、更透彻,还得去了解一下原理,这个脱壳就是借用大神的工具去实现的,但是原理都没去看,整体下来还是不错的,自己会简单的逆向。但是反编译之后修改再打包还得研究一下。再次说明一下,该文章仅供学习用途、请勿用于非法用途。否则后果自负!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值