安卓逆向之apk重打包

在学习《Android 软件安全权威指南》第二章对apk文件反编译后修改smali文件跳转指令实现程序无条件注册时遇到了一些问题

APK重打包流程

重新编译APK

修改apk反编译的smali文件后利用apktool重新编译成apk文件。执行apktool b <apk反编译的文件夹路径>,执行之后生成一个bulid文件夹和dist文件夹,其中dist文件夹中存储的是重新编译的apk文件

对apk做4字节对齐

在使用命令行打包apk时,由于命令行打包直接将resources.arsc进行压缩,还需要使用android sdk的build-tools中的zipalign.exe对apk做4个字节对齐,执行zipalign -v -p 4 infile.apk outfile.apk

对apk进行V2签名

未签名的apk文件无法在android系统上运行,通过使用android sdk的build-tools目录的lib中的apksigner.jar对对齐后的apk进行V2签名(因为签名的时候是对apk文件每1mb为单位进行hash,所以需要先对齐后再进行签名)。通过keystore签名文件

/ --ks [签名证书路径]
// --ks-key-alias [别名]
// --ks-pass pass:[KeyStore密码]
//  --key-pass pass:[签署者的密码]
//  --out [output.apk] [input.apk]

java -jar apksigner.jar sign --ks keystore路径 --ks-key-alias keystore别名 --ks-pass pass:keystore密码 --key-pass pass:keystore密码 --out output.apk input.apk

安装并运行重打包的apk

利用adb指令,安装apk:adb install apk路径,运行apk:adb shell am start -n packagename/launch activityname(packagename是包的名字,lauch activityname是activity的名字)

利用signapk进行V1签名和利用apksigner进行V2签名

android 7.0及其以上的android系统apk通常采用v2签名,而使用signapk进行V1签名的apk通常只在android7.0以下的系统中使用。

先对齐再签名

因为

posted @ 2022-04-09 02:09  怎么可以吃突突  阅读(1172)  评论(0编辑  收藏  举报