Android逆向:修改APK并重打包署名

天空闲话  金牌会员 | 2024-9-18 17:36:58 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 642|帖子 642|积分 1926

在Android逆向中,常常需要对APK修改,然后重新打包并署名。这篇文章中,介绍了如何利用各个工具来完成这个过程。
各个步调以及所需工具:

  • 解压APK文件;  工具:apktool
  • 进行修改;         工具:看修改需求
  • 重新打包APK;  工具:apktool
  • 将APK对齐;      工具:zipalign
  • 生成密钥文件,并对APK进行署名;  工具:keytool、jarsigner

小白鼠:demo.apk
目标:

将addThreeNum(1, 2, 3)改为addThreeNum(4, 5, 6),并且修改后可以或许成功运行。

   demo.apk下载: https://www.123pan.com/s/9j4Xjv-MMAhv.html?提取码:tgno
  用到的工具可自行从网上获取。
  
步调1:解压APK

利用apktool解压APK到output目录下
  1. E:\> apktool d .\demo.apk -o output\
  2. I: Using Apktool 2.7.0 on demo.apk
  3. I: Loading resource table...
  4. I: Decoding AndroidManifest.xml with resources...
  5. I: Loading resource table from file: C:\Users\aaaka\AppData\Local\apktool\framework\1.apk
  6. I: Regular manifest package...
  7. I: Decoding file-resources...
  8. I: Decoding values */* XMLs...
  9. I: Baksmaling classes.dex...
  10. I: Copying assets and libs...
  11. I: Copying unknown files...
  12. I: Copying original files...
  13. I: Copying META-INF/services directory
复制代码

步调2:修改

在output\smali\com\example\myapplication\MainActivity.smail中,把1 2 3改为4 5 6


步调3:重打包

解压的逆过程,将output目录打包为newdemo.apk
  1. E:\> apktool b output\ -o .\newdemo.apk
  2. I: Using Apktool 2.7.0
  3. I: Checking whether sources has changed...
  4. I: Smaling smali folder into classes.dex...
  5. I: Checking whether resources has changed...
  6. I: Building resources...
  7. I: Copying libs... (/lib)
  8. I: Copying libs... (/kotlin)
  9. I: Copying libs... (/META-INF/services)
  10. I: Building apk file...
  11. I: Copying unknown files/dir...
  12. I: Built apk into: .\newdemo.apk
复制代码

步调4:APK对齐

(留意:当用到NDK开发,含有.so库时,需要添加-p参数)
  1. E:\> zipalign -p -v 4 .\newdemo.apk .\newdemo-aligned.apk
  2. Verifying alignment of .\newdemo-aligned.apk (4)...
  3.       49 AndroidManifest.xml (OK - compressed)
  4.     1688 classes.dex (OK - compressed)
  5. 3296246 kotlin/annotation/annotation.kotlin_builtins (OK - compressed)
  6. 3296897 kotlin/collections/collections.kotlin_builtins (OK - compressed)
  7. 3298508 kotlin/coroutines/coroutines.kotlin_builtins (OK - compressed)
  8.                 ......(省略)......
  9. 3731560 resources.arsc (OK)
  10. 4709532 assets/dexopt/baseline.prof (OK)
  11. 4711368 assets/dexopt/baseline.profm (OK)
  12. 4711611 DebugProbesKt.bin (OK - compressed)
  13. Verification succesful
复制代码

步调5:生成.jks密钥文件

各个参数的含义可自行了解
  1. E:\> keytool -genkeypair -v -keystore key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias akakey
  2. 输入密钥库口令:
  3. 再次输入新口令:
  4. 您的名字与姓氏是什么?
  5.   [Unknown]:  aka
  6. 您的组织单位名称是什么?
  7.   [Unknown]:  Reverse
  8. 您的组织名称是什么?
  9.   [Unknown]:  Android
  10. 您所在的城市或区域名称是什么?
  11.   [Unknown]:  shenzhen
  12. 您所在的省/市/自治区名称是什么?
  13.   [Unknown]:  guangdong
  14. 该单位的双字母国家/地区代码是什么?
  15.   [Unknown]:  CN
  16. CN=aka, OU=Reverse, O=Android, L=shenzhen, ST=guangdong, C=CN是否正确?
  17.   [否]:  是
  18. 正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 10,000 天):
  19.          CN=aka, OU=Reverse, O=Android, L=shenzhen, ST=guangdong, C=CN
  20. [正在存储key.jks]
复制代码

步调6:重署名

  1. E:\> apksigner sign --ks key.jks --ks-key-alias akakey --out .\newdemo-aligned-signed.apk .\newdemo-aligned.apk
  2. Keystore password for signer #1:
  3. E:\>
复制代码

最后:尝试运行

可以成功运行,并且修改有效。


疑问:

既然APK可以二次署名,并且可以或许成功运行。那么,APK中署名机制所起到的作用是什么呢?就是资源文件中META-INF目录下的.RSA .SF .MF三个文件。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天空闲话

金牌会员
这个人很懒什么都没写!

标签云

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