吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 456|回复: 2
收起左侧

[Android 原创] Mac上反编译Android的APK

[复制链接]
ipk2046 发表于 2025-3-28 15:08

从反编译到打包对齐签名全流程

在看安卓逆向教程时,发现工具和环境基本都是windows环境的,而我平时都用的是Mac来开发安卓,积累了一些Mac上的使用经验。这次先分享下Mac上反编译的基本流程。

一、流程命令

0.环境准备
  • 确定电脑上有android sdk

  • 在电脑上配置了apktool和keytool的全局环境路径

  • 操作时注意文件路径

1.反编译

apktool d test.apk --only-main-classes

  • 执行后会出现apk名字的文件夹,点进去可以看到清单文件、res、smali等资源。

点进去可以改清单文件里的内容。

2.打未签名的包

apktool b test

  • test为1步骤里生成的文件夹

  • 在test文件夹内会多出build和dist文件夹,dist内有刚才生成的未签名app

3.使用zipalign对齐包

~/Library/Android/sdk/build-tools/33.0.1/zipalign -p -f -v 4 test.apk test-zip.apk

  • apksigner签名的话就要用未签名的包来对齐,签名后不需要再对齐。

  • jarsigner签名的话则要用签名后的包来对齐,对齐后还要重新签名。但在新版本里这样做对齐没有效果,可能是不兼容了。建议用apksigner签名。

4.检验包是否对齐

~/Library/Android/sdk/build-tools/33.0.1/zipalign -c -v 4 test-zip.apk

  • 显示Verification succesful即为对齐成功
5.生成jks签名文件

keytool -genkey -alias test2 -keyalg RSA -keystore test2.jks

  • -alias test2 这里是别名,test2.jks是生成的文件名

  • 输入命令按开始以后,就要确认密码和一系列信息,这些信息一般随便写。

  • 如果在其他地方需要导出证书文件的话,可以执行下列命令

keytool -export -alias test2 -file test2_public_cert.cer -keystore test2.jk

其中,test2_public_cert.cer是要生成导出的证书文件名

6.用apksigner签名包

~/Library/Android/sdk/build-tools/33.0.1/apksigner sign --ks test2.jks --ks-key-alias test2 --out test-signed.apk test-zip.apk

  • --out后跟的是要输出的签名后的包,最后的apk是当前未签名的包

  • 输入命令按开始以后要求输入jks文件的密码,也就是上面生成jks时输入的密码。

7.检测签名包是否对齐

~/Library/Android/sdk/build-tools/33.0.1/zipalign -c -v 4 test-signed.apk

最后显示Verification succesful即为对齐成功。

  • 这一步是保险起见,因为用jarsigner签名后就可能会显示对齐失败。
8.将手机连接电脑,确定打开开发模式
  • adb devices可以看到设备
9.adb安装签名包

adb install test-signed.apk

  • 输入命令后开始后会在手机上弹窗,要及时点击同意安装

二、安装apktool流程

官网安装链接 https://ibotpeaches.github.io/Apktool/install/

一定注意别下载错了平台,否则一定安装不成功

上面的1-4都容易理解和执行,
第四步看不到文件的话需要执行隐藏文件可见的命令。
第5步要确认两个文件是有执行权限的,首先确认是在/usr/loacl/bin目录下。
执行上面的chmod +x可能看不到成效(我没有成功...),此时可以尝试执行
chmod 777 apktool
然后继续执行
./apktool
此时如果出现Permission denied的话说明文件是没有执行权限的。
第6步 可以执行
apktool -v

来查看是否安装成功

三、常用方法

反编译

在apk所在文件夹运行命令
apktool d hongbao.apk --only-main-classes

  • --only-main-classes可以防止编译已加密的dex文件
    执行后会出现apk名字的文件夹,点进去可以看到清单文件、res、smali等资源
回编译

在上面反编译的文件夹内运行命令
apktool b hongbao
在hongbao文件夹内会多出build和dist文件夹,dist内有刚才生成的未签名app

给APP签名

签名需要用到keytool,没有安装的请下载安装,很简单。
目前签名的方式有几种,此处先用最简单的一种来,后面再完善这部分

  • 生成签名

keytool -genkey -keystore test.keystore  -alias test -keyalg RSA -validity 10000
填写资料时基本是随便填的,记住密码和别名(如上面的test)就行

  • 为apk增加签名

jarsigner -verbose -keystore test.keystore -signedjar gaga1.apk app-cm-319-oppo.apk 'test'

可用于没有签名和已经签名的apk,再次签名。

jarsigner -verbose -keystore [keystorePath] -signedjar [apkOut] [apkin] [alias]

命令格式及参数意义:

-verbose -> 输出签名过程的详细信息

-keystore [keystorePath] -> 密钥的库的位置

-signedjar [apkOut] -> 签名后的输出文件名

[apkin] -> 待签名的文件名

[alias] -> 证书别名

示例:

D:\>jarsigner -verbose -keystore demo.keystore -signedjar jaq_demo_signed.apk jaq_demo.apk demo.keystore

注意:

需要签名的包和keystore要放在一个文件夹中,并且cmd也需要在这个文件夹路径下。否则失败。

生成jar文件并查看
  • 首先进入到刚才解压缩生成的dex2jar-2.0文件夹下,执行命令

./d2j-dex2jar.sh /Users/yanzi/apk/hongbao.apk

执行后会在当前文件夹下生成类似hongbao-dex2jar.jar的文件
如果提示执行sh文件没有权限的话同上面一样执行
chmod 777 d2j-dex2jar.sh

  • 进入到刚才解压缩生成的jd-gui-osx-1.4.0文件夹下,打开JD-GUI.app,将上面生成的jar文件拖进去打开看就可以看到java文件
查看APK签名信息
  1. 用jarsigner查看apk文件
    jarsigner -verify -verbose -certs <your_apk_path.apk>

  2. 用keytool直接查看签名文件(前提是有签名文件),到keystore文件所在目录下,
    keytool -list -v -keystore debug.keystore

  3. 查看三方应用或是系统应用签名用winrar打开待查看的apk,将其中META-INF文件夹解压出来,得到其中的CERT.RSA文件,通过keytool -printcert -file META-INF/CERT.RSA命令打印证书信息

四、可能遇到的问题

1. 缺少exported属性

Targeting S+ (version 31 and above) requires that an explicit value for android:exported be defined when intent filters are present

  • 在Android 12设备上将SDK API 31(android 12)设置为目标sdk的导出应用程序的明确声明必须在组件中明确声明导出,例如声明intent-filter的Activity。否则,会出现以下错误,安装失败。

  • 解决方法是反编译后在清单文件里添加android:exported="true或false" 即可

2. 4byte边界对齐问题

Targeting R+ (version 30 and above) requires the resources.arsc of installed APKs to be stored uncompressed and aligned on a 4-byte boundary

  • 如果以 Android 11(API 级别 30)或更高版本为目标平台的应用包含压缩的 resources.arsc 文件或者如果此文件未按 4字节边界对齐,应用将无法安装。

  • 解决方法:用高版本的zipalign对齐apk包后重新签名

3. jarsigner签名后出现4byte边界对齐问题
  • 可能是高版本的安卓工具不再兼容jarsigner

  • 解决方法:按官方推荐用apksigner签名

apktool命令报错
  • 可能是版本问题,需要升级

  • 参考链接:https://apktool.org/docs/install/

    • 需要先保存apktool的脚本文件,然后下载apktool.jar

    • 然后放置在/usr/local/bin目录下

    • 然后chmod +x为两个文件改变读写权限:chmod a+x apktool ``chmod a+x apktool.jar

    • 在命令行里用apktool -version查看命令是否生效,版本是否正确

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
qtfreet00 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

qixiaoqi88 发表于 2025-4-7 23:20
大佬能不能出一期视频教学
 楼主| ipk2046 发表于 2025-4-10 16:01
qixiaoqi88 发表于 2025-4-7 23:20
大佬能不能出一期视频教学

我不是大佬哈,就是个普通的程序员。没做过视频,这个反编译是有哪里你执行了没出结果或者没懂的吗
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-4-30 13:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表