当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2013-036867

漏洞标题:百万亚瑟王加密方式泄漏

相关厂商:盛大游戏

漏洞作者: luw2007

提交时间:2013-09-12 14:40

修复时间:2013-12-11 14:41

公开时间:2013-12-11 14:41

漏洞类型:设计错误/逻辑缺陷

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-09-12: 细节已通知厂商并且等待厂商处理中
2013-09-12: 厂商已经确认,细节仅向厂商公开
2013-09-15: 细节向第三方安全合作伙伴开放
2013-11-06: 细节向核心白帽子及相关领域专家公开
2013-11-16: 细节向普通白帽子公开
2013-11-26: 细节向实习白帽子公开
2013-12-11: 细节向公众公开

简要描述:

网络游戏反外挂最有力的工具是什么加密封包。 百万亚瑟王 android 数据是http方式交互,本身就存在被破解的可能性。但是如果没有足够的防范意识, 会导致加密方式泄漏。

详细说明:

但是在java里面直接写出加密方式, 以及可显示字符的key 。 这样岂不是敞开大门么.
apk 解包反编译java的代码中给出加密方式

\com\square_enix\million\util\Crypt.java:
18 public static byte[] decode(byte[] paramArrayOfByte1, byte[] paramArrayOfByte2)
19 {
20: SecretKeySpec localSecretKeySpec = new SecretKeySpec(paramArrayOfByte2, "AES");
21 try
22 {
23: Cipher localCipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
24 localCipher.init(2, localSecretKeySpec);
25 byte[] arrayOfByte2 = localCipher.doFinal(paramArrayOfByte1);1
..
39 {
40 byte[] arrayOfByte2 = Base64.decode(paramArrayOfByte, 0);
41: SecretKeySpec localSecretKeySpec = new SecretKeySpec(paramString.getBytes(), "AES");
42: Cipher localCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
43 localCipher.init(2, localSecretKeySpec);
44 byte[] arrayOfByte3 = localCipher.doFinal(arrayOfByte2);
..


public static void sendK(String paramString1, String paramString2, String paramString3)
{
Object[] arrayOfObject = new Object[3];
arrayOfObject[0] = paramString1;
arrayOfObject[1] = paramString2;
arrayOfObject[2] = paramString3;
Debug.log("k1:%s k2:%s urlTop:%s", arrayOfObject);
Helper.setKey(paramString1);
Crypt.setKey(paramString2);
}
public static void sendK(String paramString1, String paramString2, String paramString3)
{
Object[] arrayOfObject = new Object[3];
arrayOfObject[0] = paramString1;
arrayOfObject[1] = paramString2;
arrayOfObject[2] = paramString3;
Debug.log("k1:%s k2:%s urlTop:%s", arrayOfObject);
Helper.setKey(paramString1);
Crypt.setKey(paramString2);
}


对应的key 可显示字符存在so中。

PUSH    {R3,LR}
LDR R0, =(aA1dpucrvur2crq - 0x1AF5A4)
LDR R1, =(aRbwj1miaivvn22 - 0x1AF5A6)
LDR R2, =(aHttpGame_ma_mo - 0x1AF5A8)
ADD R0, PC ; "A1dPUcrvur2CRQyl"
ADD R1, PC ; "rBwj1MIAivVN222b"
ADD R2, PC ; "http://game.ma.mobimon.com.tw:10001/"
BL _Z9jni_sendKPKcS0_S0_ ; jni_sendK(char const*,char const*,char const*)

漏洞证明:

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<response>
<header>
<error>
<code>0


</error>
<session_id>FFFFFFFFFF</session_id>
<revision>...</revision>
<mainbg>
<pack_name>mainbg_70_sp</pack_name>
<band>1,5,11,21,31,41,51,61,71,81,91</band>
</mainbg>
<your_data>...</your_data>
<next_scene>2100</next_scene>
<lock_unlock>
<scenario_voice>0</scenario_voice>
</lock_unlock>
</header>
<body>
<login>...</login>
<mainmenu>...</mainmenu>
<greeting_message>
<greeting>你好!请多指教!</greeting>
</greeting_message>
</body>
</response>
</code>

修复方案:

加密方式移除java, 全部放在so中。 利用callback 返回数据。
so中加密key使用非可显字符, 然后混淆加密方式。
需要联系se 重新发包。

版权声明:转载请注明来源 luw2007@乌云


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:2

确认时间:2013-09-12 14:48

厂商回复:

此漏洞自测时已发现,多种原因未100%修复,感谢对盛大游戏的技术支持协助,2 RANK

最新状态:

暂无