本文是瞎扯的,真♂相在这里

日系卡牌游戏都很热啊,这货下载量据说有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下的文件即可