在對(duì)某個(gè) APP 進(jìn)行逆向時(shí),最后一步將修改應(yīng)用到 APK 中往往會(huì)生成未簽名的 APK,而 Android 要求每個(gè) APK 都必須要有簽名才能被安裝,因此我們需要對(duì)未簽名的 APK 進(jìn)行簽名
1. 生成數(shù)字證書(shū)
在 keytool 所在的文件夾下(通常是 C:\Program Files\Java\jdk1.8.0_101\bin 之類(lèi)的)以管理員身份執(zhí)行如下命令
-keystore? reverse_engineer.keystore 表示生成的數(shù)字證書(shū)的文件名為 "reverse_engineer.keystore";
-alias? rekeystore 表示證書(shū)的別名為 "rekeystore",可以與 keystore 一樣;
-keyalg RSA 表示生成密鑰文件所采用的算法為 RSA;
-validity 10000 表示該數(shù)字證書(shū)的有效期為10000天,意味著10000天之后該證書(shū)將失效;
然后根據(jù)提示輸入密鑰、地區(qū)等信息。最終,這條命令將生成名為 reverse_engineer.keystore 的數(shù)字證書(shū)
2. 重簽名
將數(shù)字證書(shū)拷貝到需要簽名的 apk 的目錄下,在 jarsigner 所在的文件夾下(通常是 C:\Program Files\Java\jdk1.8.0_101\bin 之類(lèi)的)以管理員身份執(zhí)行如下命令執(zhí)行如下命令
-keystore 表示使用當(dāng)前目錄中的 reverse_engineer.keystore 簽名證書(shū)文件;
-storepass 密鑰口令;
-signedjar crackme02_release.apk表示簽名后生成的APK名稱(chēng);
crackme02.apk 表示未簽名的APK;
rekeystore 表示 reverse_engineer.keystore 的別名
3. 重新安裝 APP
如果你不是被逆向的 APP 的作者,那么你重簽名時(shí)使用的私鑰在絕大多數(shù)情況下不會(huì)和逆向前的 APP 相同。在 Android 的安全策略下,這樣的 APP 是不能被安裝的,因此需要將之前的 APP 卸載掉,才能將重新打包后的 APK 重新安裝到 Android 設(shè)備上
參考文章: