不记下来是真的会忘……
创建 Prilo APK 时要做的各种事情:
(1)准备好原始的 9.10.1 版本 apk。
(2)apktool.bat d “klb.android.lovelive.9.10.1.apk” -o temp(这个以后大概不用重复了)
(3)修改 temp/AndroidManifest.xml,修改包名,修改 root 相关的地方(这个以后大概不用重复了)。
(4)修改 temp/apktool.yml,修改版本号。
(5)修改 temp/smali/klb/android/GameEngine/GameEngineActivity.smali,修改 root 相关的地方(这个以后大概不用重复了)。
(6)(追记)在 temp/smali/klb/android 目录下对 *.smali 进行全文查找,替换包名(约 133 处)。这个目录下的一个子目录也相应地替换包名(这个以后大概不用重复了)。
(7)(追记)修改 res/values/strings.xml,修改 app_name,并且将一些 url 替换为 404。
(8)修改 lib/*/libGame.so,修改 RSA 公钥(这个以后大概不用重复了)。
(9)解压 temp/assets/AppAssets.zip:
(10)替换 common/datetime.lua(这个以后大概不用重复了)。
(11)替换 MTLmr3m.ttf(这个以后大概不用重复了)。
(12)修改 config/*_info.json。
(13)重新打包 AppAssets.zip,修改 temp/assets/version 内的校验码。
(14)apktool.bat b temp -api 31 -o prilo_1.0.0.60.0_unsigned.apk
(15)(参考资料:https://phpseclib.com/docs/x509)
<?php
use phpseclib3\File\X509;
use phpseclib3\Crypt\RSA;
require __DIR__.'/../vendor/autoload.php';
$CAPrivKey = RSA::createKey();
$CAPrivKey = $CAPrivKey->withHash('sha256')->withMGFHash('sha256')->withPadding(RSA::ENCRYPTION_PKCS1 | RSA::SIGNATURE_PKCS1);
$CAPubKey = $CAPrivKey->getPublicKey();
$CASubject = new X509;
$CASubject->setDN([
'CN' => 'eisIF Prilo',
'O' => 'eis',
]);
$CASubject->setPublicKey($CAPubKey);
$CAIssuer = new X509;
$CAIssuer->setPrivateKey($CAPrivKey);
$CAIssuer->setDN($CASubject->getDN());
$x509 = new X509;
$x509->makeCA();
$x509->setStartDate('2023-03-14 00:00:00 +0000');
$x509->setEndDate('2039-05-06 23:59:59 +0000');
$x509->setExtensionValue('id-ce-keyUsage', ['digitalSignature', 'nonRepudiation'], false, true);
$result = $x509->sign($CAIssuer, $CASubject);
echo "private key for CA cert (can be discarded):\r\n\r\n";
echo $CAPrivKey;
echo "\r\n\r\nCA cert to be imported into browser:\r\n\r\n";
echo $x509->saveX509($result);
echo "\r\n";
setExtensionValue(‘id-ce-keyUsage’, …) 至关重要!
手动将输出存到 key_public.pem,key_private.pem(仅此一次,密钥不可更换,否则以后无法覆盖更新只能卸载重装)。
(16)重要!openssl pkcs8 -topk8 -in key_private.pem -out key_private.der -outform DER -nocrypt 标红的参数至关重要!
(17)java -jar signapk.jar key_public.pem key_private.der prilo_1.0.0.60.0_unsigned.apk prilo_1.0.0.60.0.apk
(18)apksigner verify –max-sdk-version 30 ….apk
完。(hopefully I didn’t miss something)