patch apk后重打包重签名
有很多时候想要逆向分析一个apk文件,单纯的静态分析不能解决我们的需求,我们需要patch一下apk的库文件(比如patch反调试),或是修改java源码等,我们希望修改之后重新打包成apk,然后装入实机调试,那么就需要将其重打包重签名。
工具
java环境
java环境是必不可少的,后面的所有工具都依赖java环境。
apk tools
下载apk tools:
https://ibotpeaches.github.io/Apktool/install/
以windows平台来讲,需要下载的内容有两个,分别是途中画红框的,bat 脚本和apktool.jar 将bat脚本拷贝下来保存为apktool.bat并与apktool.jar放在一个目录下,我连测试用apk也放在了一起:
Android Studio
生成签名文件用,官网下载即可:https://developer.android.com/studio
然后一顿下一步安装即可,没什么坑。
解包
.\apktool.bat d .\test.apk
运行上述脚本进行解包:
解包好之后会出现test文件夹,里面都是apk包中的内容:
patch文件
这里我是patch了一下库文件,原本库文件中有ptrace反调试,被我nop掉了,然后将patch后的so文件与原文件替换:
重打包
patch之后我们想重新做成apk文件,首先要进行重打包。
再返回apktool目录,运行下面指令重打包:
.\apktool.bat b test -o new_test.apk //test:文件夹名 new_test.apk重打包后的名字
发现多了一个new_test.apk,这就是重打包好的apk文件:
但目前还无法正常安装,因为还没有为其签名。
生成签名文件
想要重打包成可以正常安装的apk文件,我们还需要为其签名,这时我们需要准备一个签名文件,可以使用Android Studio来生成
首先用Android Studio打开apk,然后头部菜单中的build->Generate Signed APK
选择apk:
新建一个key store password:
然后输入秘钥信息,选择保存路径,下面的密码设置一下(我两个密码设置的一样,反正我也分不清哪个是干啥的),之后签名的时候会用到,alias是秘钥别名,起了别名之后也记住了,之后会用到,下面的certificate 中至少写一行就可以了(参照网上攻略所说,并不是专业搞Android的,马马虎虎吧):
新版的Android studio会报这个错:
不用管 ,直接ok,会自动给你改成新的秘钥格式,然后什么都不用碰,直接下一步,然后完成即可:
生成的秘钥文件:
给apk签名
给apk签名用到java环境中的jarsigner,如果java环境安装没有问题的话,是自动有的,使用命令如下:
jarsigner.exe -verbose -keystore .\testSign.jks -signedjar test_finish.apk .\new_test.apk cat -digestalg SHA1 -sigalg MD5withRSA
//.\testSign.jks 签名文件
//test_finish.apk 给签名玩生成的apk起个名
//.\new_test.apk 要签名的apk
//cat 之前生成签名文件时设置的别名
然后还需要输入一下之前设置的密码:
之后就自动申城了签名好的apk:
安装测试
安装成功,并且成功将反调试patch调了。
参考资料
Android Studio生成签名文件:https://m.imooc.com/article/details?article_id=73361
重打包重签名:https://www.jianshu.com/p/792a08d5452c
https://www.jianshu.com/p/db709a280d9a