0x01 加密方式分析
Cocos2d-x对于lua脚本加密提供了一种轻量级解决方案, 加密算法是xxtea, 下面是这个打包脚本 cocos2d.py加密参数的说明
主要就是两个部分,sign和key,sign是加密标记,用于判断脚本是否加密,key是xxtea解密时候的秘钥,下面是Cocos2d-x部分源码
这里设置了sign和key
这里就是通过对比文件开头的字符串是否为所设置的sign判断是否加密,如果加密的话就解密,解密后才加载脚本
0x02 寻找sign和key
将apk解压之后就找到src这个目录,这里放着lua脚本
这里的lua脚本是加密的,用记事本打开,可以看到开头的字符串"CreatByDartou",这就是上面所说的sign ,知道sign之后下面就要找key
找key很简单,用IDA载入libcocos2dlua.so这个库,打开string窗口,直接搜索sign,key就在附近,"thirteenPokerCOCOS"就是key,知道了这些就可以解密了。
解密算法和加密算法可以在https://github.com/cocos2d/cocos2d-x-3rd-party-libs-bin/tree/v3/xxtea找到
0x03 编写解密程序
解密思路很简单,无非就是读取文件,调用xxtea_decrypt来解密,然后写入文件,写好代码编译运行即可
解密成功
为了实现批量解密,可以编写个脚本去实现(为啥不直接在解密程序中实现批量?本人比较懒,脚本代码少些
)
解密脚本可以批量的解密
0x04 更安全的加密方案
1.应该使用luajit去编译自己的脚本,就算攻击者解密出来也无法获得源码
2.不应该采用官方的加密方案,应该自己实现加密解密算法。
3.隐藏自己的加密秘钥,不应该过分明显。
4.保护好自己的so库,加壳或者做混淆。
/*******************************************************************/
使用的源码和脚本
http://pan.baidu.com/s/1gfDVWS7
Cocos2d-x对于lua脚本加密提供了一种轻量级解决方案, 加密算法是xxtea, 下面是这个打包脚本 cocos2d.py加密参数的说明
![](https://attach.52pojie.cn/forum/201703/26/163613lsu9hp74yctfj4hz.png)
主要就是两个部分,sign和key,sign是加密标记,用于判断脚本是否加密,key是xxtea解密时候的秘钥,下面是Cocos2d-x部分源码
这里设置了sign和key
![](https://attach.52pojie.cn/forum/201703/26/163612nckkqhq9fv8938kf.png)
这里就是通过对比文件开头的字符串是否为所设置的sign判断是否加密,如果加密的话就解密,解密后才加载脚本
![](https://attach.52pojie.cn/forum/201703/26/163612ztyl30yqlz3fqeaf.png)
0x02 寻找sign和key
将apk解压之后就找到src这个目录,这里放着lua脚本
![](https://attach.52pojie.cn/forum/201703/26/164728x6zxbzntnqc94is0.png)
这里的lua脚本是加密的,用记事本打开,可以看到开头的字符串"CreatByDartou",这就是上面所说的sign ,知道sign之后下面就要找key
![](https://attach.52pojie.cn/forum/201703/26/163611utq51418d7tmvo88.png)
找key很简单,用IDA载入libcocos2dlua.so这个库,打开string窗口,直接搜索sign,key就在附近,"thirteenPokerCOCOS"就是key,知道了这些就可以解密了。
![](https://attach.52pojie.cn/forum/201703/26/163611yrvv638wiqmj3rzr.png)
解密算法和加密算法可以在https://github.com/cocos2d/cocos2d-x-3rd-party-libs-bin/tree/v3/xxtea找到
0x03 编写解密程序
解密思路很简单,无非就是读取文件,调用xxtea_decrypt来解密,然后写入文件,写好代码编译运行即可
![](https://attach.52pojie.cn/forum/201703/26/165841p5m57jggqjj56zlj.png)
解密成功
![](https://attach.52pojie.cn/forum/201703/26/170019nmlmwrnzw94b7mqa.png)
为了实现批量解密,可以编写个脚本去实现(为啥不直接在解密程序中实现批量?本人比较懒,脚本代码少些
![](https://i-blog.csdnimg.cn/blog_migrate/5a63e1c35f76db073d965a74a848add1.gif)
[Shell]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
#!/bin/sh
process_file(){
for
file
in
`
ls
-a $1`
do
if
[ x
"$file"
!= x
"."
-a x
"$file"
!= x
".."
];
then
if
[ -d
"$1/$file"
];
then
process_file
"$1/$file"
$2 $3
else
#You should backup your file
if
[ x
"${file##*.}"
= x
"luac"
];
then
.
/lua_decrypt
"$1/$file"
"$1/$file"
$2 $3
fi
fi
fi
done
}
if
[ $
# != 3 ]; then
echo
"error.. example:\ndecode.sh srcdir sign key"
exit
1
fi
process_file $1 $2 $3
|
解密脚本可以批量的解密
![](https://attach.52pojie.cn/forum/201703/26/170636r7vv1rhrgtiu18zs.png)
0x04 更安全的加密方案
1.应该使用luajit去编译自己的脚本,就算攻击者解密出来也无法获得源码
2.不应该采用官方的加密方案,应该自己实现加密解密算法。
3.隐藏自己的加密秘钥,不应该过分明显。
4.保护好自己的so库,加壳或者做混淆。
/*******************************************************************/
使用的源码和脚本
http://pan.baidu.com/s/1gfDVWS7
nl4s
参考:
转载地址: https://www.52pojie.cn/thread-594286-1-1.html