本文是瞎扯的,真♂相在這裡

日系卡牌遊戲都很熱啊,這貨下載量據說有500w+了

而且……日本的工程師似乎寫代碼的時候連類的名字都會取得差不多,非常方便。因此寫篇文章,也許會對以後的或現有的(?)遊戲破解帶來一點靈感。

no bullshit let’s begin XD

JAVA層

dex2jar搞一下,得到一個jar,jd-gui瀏覽jar可以定位加密類位於jp.colopl/util/Crypto.class中,代碼片段如下:

以及

從一個native method返回了SecretKeySpec對象。看來東西都在so里了

native層

IDA靜態分析libcryptograph.so和libgetlockey.so,getlockey里沒有JNI_load入口,跳過;在cryptograph里發現了名為Java_jp_colopl_util_Crypto_getKeySpec的導出@0x00000BD8 。就是它了XD,粘貼如下(沒有arm彙編高亮殘念了- -)

掰彎xx王的製作團隊你們好好看看啊,這才像點樣啊好么,把AES密鑰明文存儲在so裡面和沒加密有個毛線差別啊摔!

(╯‵□′)╯︵┻━┻

瀏覽了下這段代碼之後發現,大概是在這裡調用了javax.crypto.spec.SecretKeySpec構造方法返回了SecretKeySpec對象。由於AES密鑰長度只能是16的整數倍,於是找到0x00000C8C 處的

1Fh=32d,想到這可能是生成一個32位key的過程,往上找,應該就是00000C1E到00000C90 這部分的代碼了;主要邏輯是,

python腳本多快好省

得到0lqGTyfyK9I2kv5.YWnSYvcywHLbZbzJ,沒試過,不知道對不對

done

然後……?

試了一下抓包然後解密,但似乎沒有padding,嘛,不管了,反正對這個遊戲不是很感興趣,霓虹語略捉急ww

(不過所有問題的題乾和答案都會在遇到妖怪的時候一起下載好,要做外掛的話應該很方便呢233

PS

java中使用>16字節(>128bit)的AES key會被認為是欠抽的做法,從這裡下載安裝無限密鑰長度策略並覆蓋原JAVA_HOME/lib/security下的文件即可