在石家庄做了一年cocos2dx开发;期间用过lua,用过c++,当然也遇到过困难,寻求过帮助,不管怎么样;一年中,成长也有,痛苦也有。
好吧,我换了一家公司,去北京租一间小房子。。重新开始;做系统安全分析。。
未来是什么样子。o(︶︿︶)o 。还有不会在论坛发图啊= =
联系QQ:11811961,有些东西我们可以交流。或者做一些比较有意义的事也好哈。
大牛们;请略过 。 。 。 。毕竟这些这是个皮毛。。。。。
扯远了;貌似写代码多了;表述能力下降太多了。下面说说一些加密的措施。 原理性的多一点。
cocos2dx图片加密;考虑的东西比较多;因为手机性能有限,不能采取过于复杂的方式。否则在低端手机上容易闪退。
从刀塔传奇说起,刀塔传奇的加密是文件虽然是ABC,起始就是一个修改了前端字节的zip文件,然后得到lua文件。这些lua文件是被修改了lua虚拟机字节码的文件- - 貌似网上应该有完整的一套调用方式。
重新回归图片加密,图片加密的位置;一般就两个地方,第一:getfiledata处,第二:addImage判断文件格式处。这是我解图经常遇到的两个函数。
像腾讯《欢乐斗牛》就是在getfiledata处加密处理的,而《千炮捕鱼1,2》就是在addImage处加密的。这些游戏的加密算法没有用公开的算法;都是他们程序员自己写的吧。前几天刚出的《尸兄》,龙图代理的那个游戏也是在getfiledata当中。大体上;使用的方法都一样,采用位移或者异或多一点,这样加密的好处显而易见,加密和解密算法可以共用一套;而不用专门去写,而且采用异或解密对手机性能要求也不高。
因为无论是png,还是jpg,它们的格式是固定的,比如png前8个字节是\x89\x50\x4e…可以自己打开png查看16进制。如果header部分变了;就肯定是加密过了。因为cocos2dx使用的libpng库也是去判断header的8个字节的。
加密后的还原肯定是在内存中还原为完整的图片。这就是为什么会有人去dump内存得到图片= =
归根到底,无论是手机,还是电脑,所有数据都是二进制,只是表现的方式不一样而已。
拿腾讯欢乐斗牛的核心来举例。 读取每一个字节;然后异或出原数据。
for (i = i_filename_hash_v7; i != v4_filelength + i_filename_hash_v7; ++i) //i_filename_hash_v7是一个用文件名算出的值,
{
BYTE per = *(pBuffer+i- i_filename_hash_v7); //读取buffer的内容。 //读出每一个字节。
BYTE tmp1 = g_ccBitrand(per);
BYTE tmp2 = tmp1 ^i; //核心部分还是异或。
*(newBuf + (i - i_filename_hash_v7)) = tmp2; //重新构建一个新的内存数据= =
}