ANTI 和諧教程
感謝BING?Ai?的友情演出
第一步執(zhí)行這串代碼,意味著什么
echo "Decompile Azur Lane apk" java -jar "C:\apktool\apktool.jar" -f d com.bilibili.azurlane.gp.apk
BING?Ai?
第一步執(zhí)行這串代碼的意思是在終端中顯示“Decompile Azur Lane apk”這句話,然后使用apktool.jar這個工具來反編譯com.bilibili.azurlane.gp.apk這個文件。
Azur Lane是一款二次元海戰(zhàn)游戲,apktool.jar是一款可以對Android應(yīng)用程序進行反編譯和重打包的工具。
第二步執(zhí)行這串代碼,意味著什么
oncreate=$(grep -n -m 1 'onCreate' com.bilibili.azurlane.gp/smali_classes3/com/unity3d/player/UnityPlayerActivity.smali | sed 's/[0-9]*\:\(.*\)/\1/') sed -ir "s#\($oncreate\)#.method private static native init(Landroid/content/Context;)V\n.end method\n\n\1#" com.bilibili.azurlane.gp/smali_classes3/com/unity3d/player/UnityPlayerActivity.smali sed -ir "s#\($oncreate\)#\1\n const-string v0, \"Dev_Liu\"\n\n\ invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V\n\n invoke-static {p0}, Lcom/unity3d/player/UnityPlayerActivity;->init(Landroid/content/Context;)V\n#" com.bilibili.azurlane.gp/smali_classes3/com/unity3d/player/UnityPlayerActivity.smali
BING?Ai?
第二步執(zhí)行這串代碼的意思是在smali代碼中添加一些自定義的方法和指令,用于修改Azur Lane apk的行為。
smali代碼是Android應(yīng)用程序的低級代碼,可以通過反編譯apk文件得到。smali代碼使用一種類似于匯編語言的語法,可以對Android應(yīng)用程序進行深入的分析和修改。
oncreate這個變量存儲了UnityPlayerActivity.smali文件中onCreate方法的第一行代碼。
sed -ir這個命令是用來替換文本文件中的內(nèi)容的。
第一個sed -ir命令是在onCreate方法之前添加一個私有靜態(tài)本地方法init,它接受一個Android上下文對象作為參數(shù)。
第二個sed -ir命令是在onCreate方法內(nèi)部添加三條指令,分別是:
將字符串"Dev_Liu"賦值給寄存器v0
調(diào)用System.loadLibrary方法,加載名為"Dev_Liu"的庫文件
調(diào)用剛剛定義的init方法,傳入當(dāng)前對象p0作為參數(shù)
這些修改可能是為了實現(xiàn)某種功能或者繞過某種檢測。
第三步,把*.so庫文件復(fù)制進反編譯出來的lib中,再執(zhí)行這串代碼,意味著什么
java -jar "C:\apktool\apktool.jar" -f b com.bilibili.azurlane.gp -o build/com.bilibili.azurlane.gp.patched.apk
BING?Ai?
第三步執(zhí)行這串代碼的意思是使用apktool.jar這個工具來重打包com.bilibili.azurlane.gp這個文件夾,生成一個修改后的apk文件,命名為com.bilibili.azurlane.gp.patched.apk。
.so庫文件是一種共享庫文件,用于在Android和Linux操作系統(tǒng)上提供一些公共的功能和邏輯。把.so庫文件復(fù)制進反編譯出來的lib中,可能是為了讓修改后的apk文件能夠調(diào)用這些庫文件中的方法。
最后一步,執(zhí)行這些代碼意味著什么
# 遍歷build目錄下的所有apk文件
for f in build/*.apk; do
? ? # 將apk文件重命名為.apk.unsigned
? ? mv $f ${f%.apk}.apk.unsigned
? ? # 打印"Zipaligning $f"
? ? echo "Zipaligning $f"
? ? # 使用zipalign工具對未簽名的apk文件進行優(yōu)化,并輸出到原來的文件名
? ? zipalign -pvf 4 ${f%.apk}.apk.unsigned $f
? ? # 刪除未簽名的apk文件
? ? rm ${f%.apk}.apk.unsigned
? ? # 打印"Signing $f"
? ? echo "Signing $f"
? ? # 打印apksigner工具的版本信息
? ? echo $(apksigner --version)
? ? # 使用apksigner工具對zipaligned后的apk文件進行簽名,使用testkey.pk8和testkey.x509.pem作為密鑰和證書
? java -jar "C:\apktool\lib\apksigner.jar" ? sign --key testkey.pk8 --cert testkey.x509.pem $f
# 結(jié)束循環(huán)
done
BING?Ai?
最后一步執(zhí)行這些代碼的意思是對build文件夾中的所有apk文件進行優(yōu)化和簽名,以便能夠在Android設(shè)備上安裝和運行。
for f in build/*.apk; do 這個命令是開始一個循環(huán),對build文件夾中的每個apk文件執(zhí)行以下操作。
mv $f ${f%.apk}.apk.unsigned 這個命令是將apk文件重命名為.apk.unsigned,表示這個文件還沒有簽名。
echo “Zipaligning $f” 這個命令是打印"Zipaligning $f"這句話,其中$f是當(dāng)前循環(huán)的apk文件的名稱。
zipalign -pvf 4 ${f%.apk}.apk.unsigned $f 這個命令是使用zipalign工具對未簽名的apk文件進行優(yōu)化,使得其中的資源能夠快速地從APK中加載,并輸出到原來的文件名。-p選項表示對未壓縮的.so文件進行頁面對齊,-v選項表示輸出詳細信息,-f選項表示覆蓋已有的輸出文件,4表示按照4字節(jié)邊界進行對齊。
rm ${f%.apk}.apk.unsigned 這個命令是刪除未簽名的apk文件,因為已經(jīng)不需要了。
echo “Signing $f” 這個命令是打印"Signing $f"這句話,其中$f是當(dāng)前循環(huán)的apk文件的名稱。
echo $(apksigner --version) 這個命令是打印apksigner工具的版本信息。apksigner是一種用于為APK簽名并確認(rèn)APK在所有支持版本上都能通過驗證的工具。
java -jar “C:\apktool\lib\apksigner.jar” sign --key testkey.pk8 --cert testkey.x509.pem $f 這個命令是使用apksigner.jar這個工具對zipaligned后的apk文件進行簽名,使用testkey.pk8和testkey.x509.pem作為密鑰和證書。sign選項表示要執(zhí)行簽名操作,–key和–cert選項分別指定密鑰和證書的路徑,$f表示要簽名的APK文件。
done 這個命令是結(jié)束循環(huán)。
所以完成上面的步驟我只需要java運行環(huán)境,以及一個git bash 客戶端,zipalign,apksigner,apktool這些工具,對嗎
BING?Ai
是的,您需要這些工具和環(huán)境來完成上面的步驟。另外,您還需要testkey.pk8和testkey.x509.pem這兩個文件作為密鑰和證書來簽名APK。如果您沒有這些文件,您可以使用apksigner工具生成它們,或者使用其他的密鑰和證書。
怎么獲取和安裝這些工具就別問我了,網(wǎng)上一大堆.
最重要的一點是要動腦子,具體操作看視頻
https://www.bilibili.com/video/BV19k4y1t7k6
還說啥呢,給我斗魚9999投一波票不過分吧