1.关于Cocos2dx-js游戏的jsc文件解密
2.当creator遇上protobufjs|相遇
3.为什么cocoscreator不选择兼容c#,而是只有js?
4.Cocos Creator如何快速接入微信小游戏好友排行榜
5.cocoscreatoråthreejsåºå«
6.Cocos Creator 如何对接使用protobuf详解
关于Cocos2dx-js游戏的jsc文件解密
上期关于Cocos2dx-js游戏的jsc文件解密教程引发了一些疑问,本文将解答一些常见问题。
首先,我们通过CocosCreator开发工具构建并编译一个案例js工程,发现游戏中存在脚本加密选项。构建后,软件源码安装教程得到一个简单的样本APK。在APK中,我们通过Jadx-gui工具解析Java层源码,关注assets目录下二进制源代码的加载情况。在入口Cocos2dxActivity的onLoadNativeLibraries函数中,我们找到了加载libcocos2djs.so文件的步骤,该文件位于AndroidManifest.xml中。
初步分析显示,加载Assets目录资源的操作不在Java层进行。接着,我们参考“jsc反编译工具编写探索之路”一文,将注意力转移到libcocos2djs.so文件上。在Cocos2dx源码中,我们发现其使用的是xxtea加密和解密算法,与Cocos2dx-lua的加密解密过程类似。
在游戏实例分析部分,我们以两个游戏案例为例进行解密。对于游戏A,小龟科技源码通过十六进制编辑器搜索libcocos2djs.so文件中的Cocos Game字符串,未发现相关信息。使用IDA分析工具对libcocos2djs.so进行深入研究,发现导出函数名清晰,没有添加额外的安全手段。通过搜索xxtea / key相关函数,我们找到了几个相关函数。在jsb_set_xxtea_key函数中,我们尝试直接设置key值,并发现一个可疑的参数v,用于解密jsc文件。通过回溯该函数的调用路径,我们成功获取了Key值,并成功解密游戏文件。
对于游戏B,虽然Key值不像游戏A那样明文显示,但通过搜索附近的字符串,我们发现可疑的Key值与常规的Cocos Game字符串共存。尝试使用此Key值解密游戏文件,同样取得了成功。对比游戏A和游戏B的关键代码,我们发现密匙都在applicationDidFinishLaunching函数内部体现。此函数在Cocos2d-x应用入口中,代贴单源码当应用环境加载完成时回调。理解CocosCreator构建项目的过程后,我们知道游戏应用环境加载完毕后,该函数内部将Key值传入解密函数中,解密函数将jsc文件转换为js文件,并拷贝到内存中,游戏开始调用js文件,进入游戏界面。
在其他关键函数的分析中,我们注意到在xxtea_decrypt函数中存在memcpy和memset操作,表明在进行内存拷贝数据。通过CocosCreator源代码jsb_global.cpp文件,我们得知传入xxtea_decrypt函数的第三个参数即为解密的Key值。因此,我们可以通过Hook libcocos2djs.so文件加载时的xxtea_decrypt函数来获取Key值。使用Frida框架编写简单的js脚本进行Hook操作,可以成功获取Key值。在获取Key值后,可以参照CocosCreator源代码实现解密逻辑,或者利用封装好的解密程序进行文件解密。
最后,对于解密工具的选择,我们推荐使用一些已封装的导入公式源码在哪加解密程序,例如jsc解密v1.,它能够满足当前Cocos2dx版本的文件加解密需求,并提供较为简单的操作方法。同时,欢迎各位分享自己的解密方法和见解,共同推动社区的发展。
当creator遇上protobufjs|相遇
在探索cocos H5开发的最佳实践时,我已离不开nodejs、npm和各种脚手架工具。首先,从初始化package.json文件开始,通过npm init命令创建一个文件,用于管理项目中的nodejs第三方模块。
在cocos creator项目中,protobufjs的使用至关重要。安装步骤如下:通过npm install protobufjs@5 --save命令引入protobufjs 5.x版本,若需要全局使用,可以使用npm install -g protobufjs@5。这个版本虽然不支持最新的6.x,但其动态编译功能在cocos creator中更为便利。
在creator项目中,我们以Player.proto文件为例,展示了如何动态编译文件,抖商客系统源码生成js对象。在静态语言中,我们会使用protoc命令将proto文件编译为c++/java代码,但在javascript中,protobufjs直接提供了动态编译的功能。
然而,当尝试在cocos-jsb环境中运行protobufjs时,可能会遇到问题。这涉及到javascript在浏览器、nodejs和cocos-jsb上的不同文件接口。在cocos-jsb,我们需要处理的是jsb.fileUtils.getStringFromFile接口,这与浏览器和nodejs的文件操作有所不同。
为了解决这个问题,可能需要修改protobufjs源码以适应cocos-jsb。此外,还需注意creator项目中资源路径的管理,通常需要将proto文件放在assets/resources/pb/目录下,并使用cc.url.raw获取正确的资源路径。
尽管通过修改源码可以解决问题,但并不是长久之计。为寻求更稳定的方法,我已创建了一个creator和protobufjs的示例项目,未做任何源码改动,链接如下:[github.com/ShawnZhang...](github.com/ShawnZhang...)。继续关注我的系列文章《探索cocosH5正确的开发姿势》,以了解更多无需修改源码的解决方案和proto文件预编译的用法。
为什么cocoscreator不选择兼容c#,而是只有js?
CocosCreator选择JavaScript而非C#作为脚本语言,基于其Web技术和开发背景。作为基于Web的工具,CocosCreator与JavaScript的结合非常合理。其JavaScript分支已经存在,重新开发另一种语言没有必要。而Unity选择C#,是因为Mono运行时作为引擎核心底层与应用层脚本间的粘合剂。Mono支持包括C#在内的多种语言,如Python,这决定于Mono的兼容性。然而,浏览器无法直接运行C#,而类似NW.JS这样的Web容器虽能调用C++原生代码,但这样操作并未带来实质性的价值。
关于JavaScript问题,Unity引擎中的JavaScript实际上是一个子集,其本质与C#、Boo等语言相似,都是Mono支持的语言。这说明Unity中的JavaScript与浏览器中运行的JavaScript完全不同。若希望在浏览器中直接运行C#,这在语言本身和运行原理上均无法实现,因为C#需要编译为中间语言(IL),再由CLR转换为机器码,与Web环境不兼容。
综上所述,平台特性和语言特性决定了CocosCreator最合适的语言是JavaScript。选择JavaScript与CocosCreator的Web技术背景紧密相关,且现有JavaScript分支的存在,使得无需重新开发语言。Unity与C#的搭配基于其对Mono的依赖,而Mono作为跨平台的运行时,支持多种语言,包括JavaScript。
Cocos Creator如何快速接入微信小游戏好友排行榜
在Cocos Creator中快速接入微信小游戏好友排行榜,主要涉及两种方式:纯JS代码接入和代码+IDE的方式接入。纯JS代码接入涉及初始化一个节点以绘制子域的sharedCanvas,并实现子域的绘制逻辑。通过以下步骤可实现快速开发好友排行榜:
首先,初始化一个Node节点,添加WXSubContextView组件,该组件能以一定的帧率自动绘制sharedCanvas,开发者无需操心。将此节点添加到场景中,即可展示效果,隐藏节点则可关闭。接下来,实现子域的绘制逻辑,参照官方示例,使用XML、CSS和JS绘制排行榜。
配置插件引用步骤如下:
在game.json中添加插件引用。
在开放数据域内引用插件。
通过以上两步操作,即可轻松绘制出好友排行榜。
另一种方式则是利用Cocos IDE工具,通过拖拽创建画布节点,简化操作流程。体验成品,只需扫描小游戏码即可。
若需好友排行榜源码,可私信获取。
cocoscreatoråthreejsåºå«
cocoscreatoræ´éåç¨æ¥å2Då¨ç»ææãthree.jsæ´éåç¨æ¥å3D模åææã
three.jsæ´éåç¨æ¥å3D模åææãå¦ï¼è·³ä¸è·³å°±æ¯three.jså¶ä½çãcocoscreatoræ´éåç¨æ¥å2Då¨ç»ææãå¦ï¼æå°ä¸»ï¼å¡ç游æä¸è¬å°±æ¯cocoscreatorå¶ä½çã
CocosCreatoræ¯ä¸æ¬¾ä¼ç§çå¼æºç§»å¨æ¸¸æå¼æï¼å¨å ¨çèå´å æ¥ææ°éåºå¤§çç¨æ·ã
Cocos Creator 如何对接使用protobuf详解
在游戏开发领域,Cocos Creator 与 protobuf 的结合是实现高效数据交换的关键。Cocos Creator 是一款广受欢迎的游戏引擎,适用于开发2D和3D游戏,而 protobuf 则是一种轻量级、高效的二进制数据序列化协议,支持多种编程语言。本文将详细介绍如何在 Cocos Creator 中集成 protobuf,并提供完整代码示例。首先,确保已安装了 protobuf。如未安装,可访问官网下载最新版本。接着,使用 npm 安装 protobuf.js 库。
在 Cocos Creator 中使用 protobuf,需先定义数据结构的 .proto 文件。以定义 Player 类型为例,包含 name、level 和 items 字段。其中,items 字段为 repeated 类型,支持多个值。编写 .proto 文件后,通过 protobuf.js 加载并使用 API 进行序列化与反序列化操作。
下面的代码示例展示如何在 Cocos Creator 中加载并使用 player.proto 文件。代码首先加载 .proto 文件并获取 Player 类型,接着创建 Player 对象,执行序列化与反序列化操作,并将结果输出至控制台。
完整示例代码包括以下几个步骤:编写 player.proto 文件,定义 Player 类型;在 main.js 文件中加载 protobuf.js 库;在场景的 onLoad() 方法中加载 player.proto 文件并获取 Player 类型;创建 Player 对象,并使用 protobuf.js 进行序列化与反序列化;最后,输出反序列化后的对象。
总结,本文通过实践示例,阐述了如何在 Cocos Creator 中集成并利用 protobuf 进行高效数据交换。通过定义 .proto 文件、加载 protobuf.js 和执行序列化、反序列化操作,开发者可实现数据的跨平台传输,从而提升游戏开发效率。此教程对希望在 Cocos Creator 中应用 protobuf 的开发者提供了指导。