您的当前位置:首页正文

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

2024-11-01 来源:个人技术集锦

在Android逆向中,经常需要对APK修改,然后重新打包并签名。这篇文章中,介绍了如何使用各个工具来完成这个过程。

各个步骤以及所需工具:

小白鼠:demo.apk

目标:

addThreeNum(1, 2, 3)改为addThreeNum(4, 5, 6),并且修改后能够成功运行。

步骤1:解压APK

E:\> apktool d .\demo.apk -o output\
I: Using Apktool 2.7.0 on demo.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: C:\Users\aaaka\AppData\Local\apktool\framework\1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
I: Copying META-INF/services directory

步骤2:修改

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

步骤3:重打包

E:\> apktool b output\ -o .\newdemo.apk
I: Using Apktool 2.7.0
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
I: Checking whether resources has changed...
I: Building resources...
I: Copying libs... (/lib)
I: Copying libs... (/kotlin)
I: Copying libs... (/META-INF/services)
I: Building apk file...
I: Copying unknown files/dir...
I: Built apk into: .\newdemo.apk

步骤4:APK对齐

(注意:当用到NDK开发,含有.so库时,需要添加-p参数)

E:\> zipalign -p -v 4 .\newdemo.apk .\newdemo-aligned.apk
Verifying alignment of .\newdemo-aligned.apk (4)...
      49 AndroidManifest.xml (OK - compressed)
    1688 classes.dex (OK - compressed)
 3296246 kotlin/annotation/annotation.kotlin_builtins (OK - compressed)
 3296897 kotlin/collections/collections.kotlin_builtins (OK - compressed)
 3298508 kotlin/coroutines/coroutines.kotlin_builtins (OK - compressed)
                ......(省略)......
 3731560 resources.arsc (OK)
 4709532 assets/dexopt/baseline.prof (OK)
 4711368 assets/dexopt/baseline.profm (OK)
 4711611 DebugProbesKt.bin (OK - compressed)
Verification succesful

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

各个参数的含义可自行了解

E:\> keytool -genkeypair -v -keystore key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias akakey
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
  [Unknown]:  aka
您的组织单位名称是什么?
  [Unknown]:  Reverse
您的组织名称是什么?
  [Unknown]:  Android
您所在的城市或区域名称是什么?
  [Unknown]:  shenzhen
您所在的省/市/自治区名称是什么?
  [Unknown]:  guangdong
该单位的双字母国家/地区代码是什么?
  [Unknown]:  CN
CN=aka, OU=Reverse, O=Android, L=shenzhen, ST=guangdong, C=CN是否正确?
  [否]:  是
​
正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 10,000 天):
         CN=aka, OU=Reverse, O=Android, L=shenzhen, ST=guangdong, C=CN
[正在存储key.jks]

步骤6:重签名

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

最后:尝试运行

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

疑问:

显示全文