站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2ME 专题介绍一种简单的J2ME游戏PNG加密方法

介绍一种简单的J2ME游戏PNG加密方法

摘要: 介绍一种简单的J2ME游戏PNG加密方法
<tr><td>
http:///tech/article1949.html
[转载于新浪Blog]


首先声明,只要你将你的Jar发布,任何有Java基础的人都能利用Jad等工具破解出你的PNG原文件(或其它有意义的资源数据)。我们没有精力花时间研究算法来避免此类人的破解,但却有很多简单的方法防止利用弱智工具就试图拿出你的PNG图片打算换色作新游戏的人。

源起:一位同事花了10分钟左右写的号称能解出很多游戏PNG图片的工具。原理即:在PAK文件中找89 50 4E 47(PNG), 记录位置Start, 再找到最近的49 45 4E 44(IEND), 再向后推4个byte(CRCData),记录此过程的长度Length。提取从Start Length个byte保存出PNG。意外的事,确实对很多游戏有效,吼吼~。

利用的破绽:大部分PAK文件不管周边的数据如何,都将一个完整的PNG流保存在PAK里。

防止原理:打乱保存在PAK中的每个PNG流。

打乱方法:将PNG流读为3段(1,2,3),在PAK文件中却保存为(1,3,2)

完整数据格式:

(1) 头数据区:

[]第0个byte表示:要打包的数据个数,假设为N;

第1~4 × N个byte表示:PNG图片数据在资源实际数据区的位置


[]
(2) 实际数据区

第0 ~ 2 × 3个byte表示:PNG被分拆三段的长度

[]后面即:PNG图片的数据流(不过保存顺序为1,3,2段)



制作改格式的示例程序见附件。

http://www.tommick.org/download/PngPak_Demo.zip
[]
PS:GameLoft 无级的图片即采用改方法Pak的。
http:///tech/article1949.html
</td></tr></table></td> </tr> <tr> <td background="/pic/split.gif" height=1></td> </tr> <tr> <td class="tdMargin1">
↑返回目录
前一篇: J2ME游戏程序开发实例精讲详解
后一篇: 国外专家谈游戏制作