1.当creator遇上protobufjs|相遇
2.JBoss Webå Tomcatçåºå«
3.websphereåtomcatå¨ä½¿ç¨ä¸çåºå«
4.jsbsim学习飞行器模型配置文件解读
5.关于Cocos2dx-js游戏的jsc文件解密
当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对象。lk源码分析在静态语言中,我们会使用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/目录下,html水滴源码并使用cc.url.raw获取正确的资源路径。
尽管通过修改源码可以解决问题,但并不是长久之计。为寻求更稳定的方法,我已创建了一个creator和protobufjs的示例项目,未做任何源码改动,链接如下:[github.com/ShawnZhang...](github.com/ShawnZhang...)。继续关注我的系列文章《探索cocosH5正确的开发姿势》,以了解更多无需修改源码的解决方案和proto文件预编译的用法。
JBoss Webå Tomcatçåºå«
JBoss Webå Tomcatçåºå«
å¨Web2.0ç浪潮ä¸ï¼åç§é¡µé¢ææ¯åæ¡æ¶ä¸ææ¶ç°ï¼ä¸ºæå¡å¨ç«¯çåºç¡æ¶ææåºäºæ´é«ç稳å®æ§åå¯æ©å±æ§çè¦æ±ãè¿å¹´æ¥ï¼ä½ä¸ºå¼æºä¸é´ä»¶çå ¨ çé¢å¯¼è ï¼JBosså¨J2EEåºç¨æå¡å¨é¢åå·²æ为åå±æä¸ºè¿ éçåºç¨æå¡å¨ãå¨å¸åºå æçåæå¡æ»¡æ度ä¸åå¾äºå·¨å¤§çæåï¼ä¸æ¯«ä¸éè²äºå ¶å®çéå¼æº ç«äºå¯¹æï¼å¦WebSphereãWebLogicãApplication ServerãJBoss Webç诸å¤ä¼è¶æ§è½ï¼æ£æ¯å ¶å¹¿ä¸ºæµè¡çåå ã
åºäºTomcatå æ ¸ï¼éèäºè
Tomcat æå¡å¨æ¯ä¸ä¸ªå è´¹çå¼æ¾æºä»£ç çWeb åºç¨æå¡å¨ï¼ææ¯å è¿ãæ§è½ç¨³å®ï¼èä¸å è´¹ï¼å èæ·±åJava ç±å¥½è çåç±å¹¶å¾å°äºé¨å软件å¼ååç认å¯ãå ¶è¿è¡æ¶å ç¨çç³»ç»èµæºå°ï¼æ©å±æ§å¥½ï¼ä¸æ¯æè´è½½å¹³è¡¡ä¸é®ä»¶æå¡çå¼ååºç¨ç³»ç»å¸¸ç¨çåè½ãä½ä¸ºä¸ä¸ªå°åçè½» é级åºç¨æå¡å¨ï¼Tomcatå¨ä¸å°åç³»ç»å并å访é®ç¨æ·ä¸æ¯å¾å¤çåºåä¸è¢«æ®é使ç¨ï¼æ为ç®åæ¯è¾æµè¡çWeb åºç¨æå¡å¨ã
èJBoss Webéç¨ä¸çæä¼çå¼æºJava Webå¼æï¼ å°Java社åºä¸ä¸è½½éæ大ï¼ç¨æ·æ°æå¤ï¼æ åæ¯ææå®å¤çTomcatå æ ¸ä½ä¸ºå ¶Servlet容å¨å¼æï¼å¹¶å ä»¥å®¡æ ¸åè°ä¼ãå纯çTomcatæ§è½æ éï¼å¨å¾å¤å°æ¹è¡¨ç°ææ¬ ç¼ºï¼å¦æ´»å¨è¿æ¥æ¯æãéæå 容ã大æ件åHTTPSçãé¤äºæ§è½é®é¢ï¼Tomcatçå¦ä¸å¤§ç¼ºç¹æ¯å®æ¯ä¸ä¸ªåéçéæå¹³å°ï¼ä» è½è¿ è¡Javaåºç¨ç¨åºãä¼ä¸å¨ä½¿ç¨æ¶Tomcatï¼å¾å¾è¿éåæ¶é¨ç½²Apache Web Server以ä¸ä¹æ´åãæ¤é ç½®è¾ä¸ºç¹çï¼ä¸ä¸è½ä¿è¯æ§è½çä¼è¶æ§ã
JBosså¨Tomcatçåºç¡ä¸ï¼å¯¹å ¶è¿è¡æ¬å°åï¼å°Tomcat 以å åµçæ¹å¼éæå° JBoss ä¸ãJBoss Webéè¿ä½¿ç¨APRåTomcatæ¬å°ææ¯çæ··å模åæ¥è§£å³Tomcatç诸å¤ä¸è¶³ãæ··åææ¯æ¨¡åä»ææ°çæä½ç³»ç»ææ¯éæä¾äºæ好ç线ç¨åäºä»¶å¤çã ç»æï¼JBoss Webè¾¾å°äºå¯æ©å±æ§ï¼æ§è½åæ°å¹é çè³è¶ è¶äºæ¬å°Apache HTTPæå¡å¨æè IISãè¬å¦JBoss Webè½å¤æä¾æ°æ®åºè¿æ¥æ± æå¡ï¼ä¸ä» æ¯æ JSP ç Java ææ¯ï¼åæ¶è¿æ¯æå ¶ä» Web ææ¯çéæï¼è¬å¦ PHPã.NET 两大éµè¥ã
æ ååæ¯åå°ææ¯ä¾èµé£é©ï¼ä¿æ¤æèµæ好çæ¹å¼ãJBoss Webçå æ¯æå ¨ç³»åJEE Webæ åï¼ä»æ ¹æ¬ä¸ä¿è¯äºåºç¨âä¸æ¬¡å¼åï¼å°å¤è¿è¡âçç¹ç¹ï¼ä½¿åºç¨æåè½æ¹ä¾¿å°å¨JBoss Webåå ¶ä»Java Webæå¡å¨ä¹é´è½»æè¿ç§»ã
websphereåtomcatå¨ä½¿ç¨ä¸çåºå«
使ç¨ä¸çåºå«1ã对ææ¯çæ¯æï¼
Tomcatä¸æ¯æEJBï¼JBossæ¯å®ç°äºEJB容å¨ï¼åéæäºTomcatã
WebSphereé½æ¯å¯¹ä¸å å¤ç§æ åçå ¨é¢æ¯æï¼å æ¬EJBãJSBãJMSãJDBCãXMLåWMLï¼ä½¿Webåºç¨ç³»ç»çå®æ½æ´ä¸ºç®åï¼å¹¶ä¸ä¿æ¤äºæèµï¼åæ¶ä¹ä½¿åºäºæ åç解å³æ¹æ¡çå¼åæ´å ç®ä¾¿ã
2ãåºç¨èå´çåºå«ï¼
Tomcat æ¯ä¸ä¸ªå°åçè½»é级åºç¨æå¡å¨ï¼å¨ä¸å°åç³»ç»å并å访é®ç¨æ·ä¸æ¯å¾å¤çåºåä¸è¢«æ®é使ç¨ï¼æ¯å¼ååè°è¯JSP ç¨åºçé¦éã
WebSphereæ¯åä¸è½¯ä»¶,åè½é½å ¨å¼ºå¤§,主è¦åºç¨äºå¤§åä¼ä¸ç大å项ç®ã
3ãåä¸æå¡åææ¯æ¯æçåºå«ï¼
Tomcaté½æ¯å¼æºå è´¹çï¼ææå®ä¿©ä¹å°±æ²¡æä»»ä½åä¸æå¡åææ¯æ¯æï¼èWebSphereçææ¯ææ¡£åç¸å ³æå¡è¿æ¯å¾å°ä½ï¼å¦æä½ çæå¡å¨åªä¸å¤©åºé®é¢äºï¼åªè¦ä½ è½åºçèµ·é±ï¼ä»ä»¬çææ¯å·¥ç¨å¸ç«å»å°±è½åºç°å¨ä½ é¢åã
4ãå®å ¨æ§é®é¢ï¼
Tomcaté½æ¯å¼æºçï¼æ以å®ä»¬çå®å ¨æ§ç¸å¯¹æ¥è¯´æ¯è¾ä½ï¼ä¸ä¸åºç¨æå¡å¨æ¬èº«æä»ä¹æ¼æ´ï¼ä½ æ¯æ²¡åæ³åApacheç´¢èµçã
WebSphereå ¶å®¹éãç³»ç»ç®¡çåå®å ¨æ§è½å·²ç»å¨å ¨çæ°ä»¥åè®°çå ³é®ä»»å¡ç¯å¢ä¸å¾ä»¥éªè¯ã
jsbsim学习飞行器模型配置文件解读
jsbsim是用于飞行力学仿真的一款开源软件,旨在实现类似IL2/1战争雷霆的空战游戏。在Unity中通过C#封装一个简化版的气动仿真模型,使模型在接收飞行器当前状态后,能输出6个自由度上的力/力矩,以接入Unity的刚体组件。
以jsbsim自带的f-模型配置文件f.xml为例,解析其中内容。typescript源码解读
从xml根节点入手,metrics、mass_balance、aerodynamics等部分尤为关键。地面互动、推力、自动控制等稍后关注,因为jsbsim最初专注于自动控制策略仿真,因此flight_control模块较为详细。
配置文件中的缩写繁多,不易理解,但只要直接导入Unity的刚体组件即可。metrics节点描述了飞行器尺寸、位置指标,明确了飞行器坐标系中的VRP概念,即确定飞行器“鼻尖”与坐标原点之间的偏移。
mass_balance节点包含飞行器质量分布参数,前端动画源码涉及惯性张量等理论力学知识点。对于三维情况下刚体角动量与瞬时角速度方向的差异,理解惯性张量有助于预测飞行器在力矩作用下的旋转行为。
aerodynamics节点包含大量表格数据,jsbsim通过查表实现非线性公式/函数计算,采用线性插值处理。节点下包含轴对应飞行器沿x、y、z轴平动、绕轴转动的六个刚体运动自由度。
重点分析了DRAG轴、SIDE轴、LIFT轴、PITCH轴、YAW轴,这些变量描述了飞行器在不同轴向的气动特性。若无法理解某个变量,可在Google搜索或探索jsbsim源代码中找到相关描述。
完成f.xml配置文件解析后,下一步将编写程序加载配置文件并执行动力学运算。若遇到未在Google搜索到的变量,尝试在jsbsim源代码中进行全局搜索,可获得更多线索。
关于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版本的文件加解密需求,并提供较为简单的操作方法。同时,欢迎各位分享自己的解密方法和见解,共同推动社区的发展。