(已解决)AliceFiction漂眇群像 解包

游戏快关服了,希望有大佬来解一下包
游戏下载:https://apkpure.com/jp/alice-fiction-puzzle-rpg/com.alicefiction
样本:链接:https://pan.baidu.com/s/1wPI3udjounKHU42ht2SC3g
提取码:c9r6

没记错的话是xor

只是提示:IKA9nt魔改版本
y9JUY4yttVeCBvZVdXsRMDLuL8H7vNyh

hashcatalog

其一

import requests
import json
import os
from Crypto.Protocol.KDF import PBKDF2
from Crypto.Cipher import AES
from concurrent.futures import ThreadPoolExecutor, as_completed

def aes_decrypt_cbc(key, iv, input):
    aes = AES.new(key, AES.MODE_CBC, iv)
    decrypted = aes.decrypt(input)
    padding_len = decrypted[-1]
    output = decrypted[:-padding_len]
    return output

def get_keyandiv(password, salt):
    return PBKDF2(password, salt, 32+16, count=2000)

def download_and_decrypt(url, key, iv, output_dir):
    response = requests.get(url)
    decrypted_data = aes_decrypt_cbc(key, iv, response.content)
    file_name = os.path.join(output_dir, os.path.basename(url))
    with open(file_name, 'wb') as f:
        f.write(decrypted_data)
    print(f"下载并解密: {file_name}")

def download_and_decrypt_multithreaded(file_info, key, iv, output_dir):
    file_url = f"https://data.alice-fiction.com/{file_info['url']}"
    download_and_decrypt(file_url, key, iv, output_dir)

def main():
    url = "https://data.alice-fiction.com/manifest/zh_TW/5b7a5d01cd37b1fbc1a8ce3b78019e3a/manifest.json"
    password = "xC3bPrzXVZLqrgzD"
    salt = "eGXSHZGTnpQmmueyzn5D2zDn2pFngTN9"

    keyiv = get_keyandiv(password, salt)
    key, iv = keyiv[:32], keyiv[32:]

    response = requests.get(url)
    decrypted_data = aes_decrypt_cbc(key, iv, response.content)

    decrypted_str = decrypted_data.decode('utf-8')
    result = json.loads(decrypted_str)

    with open('manifest.json', 'w') as f:
        json.dump(result, f, indent=4)

    master_file_list = result.get("master_file_list", [])
    output_dir = "MasterFiles"
    os.makedirs(output_dir, exist_ok=True)

    with ThreadPoolExecutor(max_workers=16) as executor:
        futures = [executor.submit(download_and_decrypt_multithreaded, file_info, key, iv, output_dir)
                   for file_info in master_file_list]

        for future in as_completed(futures):
            future.result()

if __name__ == "__main__":
    main()

解密算法,我也不知道过时没

const assetKey = "y9JUY4yttVeCBvZVdXsRMDLuL8H7vNyh"

func decryptAsset(data []byte, salt string, maxLength int)  []byte {
    key := pbkdf1(assetKey, salt)

    block, err := aes.NewCipher(key)
    panicOnErr(err)

    blockSize := 16
    nonce := make([]byte, 16)
    blockNumber := uint64(1)
    keyBuffer := make([]byte, 16)

    output := make([]byte, len(data))

    if maxLength == 0 {
        maxLength = len(data)
    }

    for i := 0; i < len(data) && i < maxLength; i+=16 {
        if i % blockSize == 0 {
            binary.LittleEndian.PutUint64(nonce, blockNumber)
            block.Encrypt(keyBuffer, nonce)
            blockNumber++
        }

        for keyPos := 0; keyPos < blockSize && i+keyPos < len(data) && i+keyPos < maxLength; keyPos++ {
            output[i+keyPos] = data[i+keyPos] ^ keyBuffer[keyPos]
        }
    }

    return output
}

我该如何运行第二段代码,第一段代码下载了MasterFiles内的json。

同上,需要使用教程
另外salt要如何得
[@yjzyl9008],[@jdyy]
有空麻烦回复下

APK自帶遊戲資源包沒加密

熱更新遊戲資源包有加密

9月10日遇到的錯誤信息
然後我就默默地去解包其他遊戲了 : )

2 个赞

我也是,谢谢关心

非常感谢上面几位大佬的热心回复,只可惜解包小白实在是愚笨,自己捣鼓了好久也不知道该如何使用密钥和解密代码,只能再次来恳请大佬们,希望大佬们不计前嫌,能给出更为详细的解包过程,圆小白一个心愿,这游戏9月30日就关服了,想在最后时刻再抢救一下QwQ

第二段代码不是python啊,好像是go

1 个赞

也只能等那些大佬們回復了
個人實測用不了,該代碼缺乏salt值生成部分
“檔名,檔名md5/sha1/sha256/前16位值都試過,但都無法正常解密”
data
看在大佬們有研究!加上自己這陣子也忙,就不想再插手了!
同上默默地去解包其他遊戲了 : )
看來似乎大家都少salt

今天邊上網看教程邊研究GO 腳本 : )

IKA9nt解密網上教程

GO 腳本也安裝了 : )

GO腳本下載連結

https://go.dev/dl/go1.23.1.windows-amd64.msi

GO腳本安裝截圖

2024-09-19_104407
2024-09-19_104422
2024-09-19_104434
2024-09-19_104446
2024-09-19_104504
2024-09-19_104525
2024-09-19_104606

GO腳本研究截圖




2024-09-19_142828

和python 不一樣
後綴 : decrypt.py & decrypt.go
CMD命令 : python decrypt.py
CMD命令 : go run decrypt.go

邊試邊還原go腳本

然後也發現少了salt : )

所以要自己手動去找了

然後默默地去看其他帖子了 : )

const assetKey = “y9JUY4yttVeCBvZVdXsRMDLuL8H7vNyh”

func decryptAsset(data byte, salt string, maxLength int) byte {
key := pbkdf1(assetKey, salt)

1 个赞

用的IKA9nt这个插件加密,所以解密也有点蛋疼,是魔改的AES。具体可以看看https://github.com/Kihara777/IKA9nt.Decryptor/tree/main,但是游戏还在这个上面有改动。
盐是下载的文件名,catalog的盐是hash文件里面的内容,密钥是y9JUY4yttVeCBvZVdXsRMDLuL8H7vNyh。

拆包一时爽,整理火葬场!

3 个赞

帮人帮到底,送佛送到西,阿弥陀佛

2 个赞

大佬!你是赛博菩萨吧!还整合进了AS里,感激之情无以言表,太感谢大佬了:sob:

ps:github的包不知道为什么下载后解压失败,有遇到一样情况的人吗

用的啥压缩软件?已知winrar和7zip都没问题

7-Zip

WinRAR

但不影響程序運行就是了 : )

原来如此。。。7z版本太高也不是好事。。。新版本的7z极限压缩对arm架构的程序有专门一套压缩算法,结果这个东西别的压缩软件支持没跟上。。。

1 个赞

感谢大佬回复,更新完7z可以顺利解压了,但是又出现了新的问题又要来麻烦一下大佬,这个解包报错是怎么回事呀

文件名不对,他的文件名就是salt,所以文件名要用看起来是明文的那个