皮皮网
皮皮网

【drogon 源码分析】【国外网盘赚钱源码】【andlua防录屏源码】cocos2d源码

时间:2024-11-15 16:21:37 来源:沃土游戏源码

1.cocos2d介绍
2.cocos2d 水果忍者_cocos2d 现在没人用了_cocos2d开发语言
3.逆向入门cocos2d游戏逆向分析
4.如何安装和设置Cocos Code IDE
5.Cocos2d-x之获取图像像素值
6.关于Cocos2dx-js游戏的源码jsc文件解密

cocos2d源码

cocos2d介绍

       Cocos2D是一款在多平台游戏开发中极具价值的工具,它能够大幅度节省开发者的源码时间,支持多种平台,源码包括Windows Phone、源码Windows 商店应用、源码iOS和Android。源码drogon 源码分析它集成了丰富的源码功能,如精灵管理、源码酷炫的源码图形渲染、动画特效、源码物理引擎以及音频处理等,源码为游戏开发者提供了全方位的源码支持。

       特别值得一提的源码是,Cocos2d-iPhone基于GNU LGPL v3 license,源码考虑到iPhone平台的源码特殊性,即无法发布第三方动态链接库,Cocos2d-iPhone对此进行了扩展。开发者可以选择静态链接库或者直接使用源代码的方式,无需公开源代码即可在项目中使用,确保了项目的国外网盘赚钱源码灵活性和商业价值。尽管如此,Cocos2D-iPhone的性能和稳定性是毋庸置疑的,因为已有超过个基于此引擎的游戏在AppStore上成功发布,其中包括3款游戏曾进入过TOP 的排行榜,如StickWars甚至曾荣登榜首,这无疑证明了其在实际应用中的高效和强大。

扩展资料

       cocos2d是一个开源框架,用于构建2D游戏、演示程序和其他图形界面交互应用等。

cocos2d 水果忍者_cocos2d 现在没人用了_cocos2d开发语言

       目录

       一、完美刀光实现

       三、高效的碰撞检测(圆与线段碰撞检测)

       四、原创完整版源码下载

       一、完美刀光实现

       这里刀光的实现直接用的是MotionStreak,估计很也都用过。这里的重点是如何选择刀光,具体请看CCMotionStreak.cpp。或者可以直接弄一张圆形的上去看下移动过程中是如何变化的,再确认自己要的andlua防录屏源码刀光图形的形状,这里我们就直接用如下的来做了。blade

       刀光加好了感觉没生气的话,可以再加个粒子效果上去,其他的实现看代码。

       这是最后的效果图:

       localMouseLayer=class("MouseLayer"function()returndisplay.newLayer()end)localSLine=import("ui.SLine")localapp=applocalmath=mathlocalcc=cclocaldis=0localpairs=pairslocallines=G_LinesfunctionMouseLayer:ctor()--cc.c3b(,,)self.streak=cc.MotionStreak:create(0.3,3,,cc.c3b(,,),"blade.png"):addTo(self):align(display.CENTER,display.cx,display.cy)self.m_down=falseself.tempx=0self.tempy=0self._frames=0self._tempFrames=0self:setTouchEnabled(true)self:setTouchSwallowEnabled(false)self:setTouchMode(cc.TOUCH_MODE_ONE_BY_ONE)self:addNodeEventListener(cc.NODE_TOUCH_EVENT,handler(self,self._onTouchFunc))endfunctionMouseLayer:onEnterFrame(dt)fork,vinpairs(lines)dov:update()endif(self.m_down==true)thenself._frames=self._frames+1if(dis>=and(self._frames-self._tempFrames)>=8)thenself._tempFrames,self._frames=0,0--app:playSoundEffect("sound/cut.mp3")endendendfunctionMouseLayer:_onTouchFunc(event)if(event.name=="began")thenself.m_down=trueself.tempx,self.tempy=event.x,event.yreturntrueelseif(event.name=="ended")thenself.m_down=falseelseif(event.name=="moved")thenif(self.m_down==true)thenself.streak:setPosition(event.x,event.y)localline=SLine.new(self.tempx,self.tempy,event.x,event.y)dis=math.sqrt((self.tempx-event.y)*(self.tempx-event.x),(self.tempy-event.y)*(self.tempy-event.y))self.tempx=event.xself.tempy=event.yif(dis>=)thenlocalpar=cc.ParticleSystemQuad:create("particles/exp.plist"):addTo(self):pos(event.x,event.y)par:setAutoRemoveOnFinish(true)endendendendreturnMouseLayer

逆向入门cocos2d游戏逆向分析

       深入剖析cocos2d-x游戏逆向分析

       cocos2d-x是一个开源的移动2D游戏框架,它底层支持各种平台,核心用c++封装了各种库,外部则提供了lua和c++接口。关键代码可能隐藏在lua脚本中,许多安卓游戏的逻辑也主要在lua脚本里运行。通过官网示意图了解从c++进入lua世界的路径。

       探索cocos2d-x的lua虚拟机相关代码,包括CCLuaEngine.h和CCLuaStack.h。在应用结束加载中进入lua虚拟机,具体由applicationDidFinishLaunching函数调用engine->executeScriptFile("main.lua")实现。

       在luaLoadBuffer函数中,使用xxtea_decrypt解密了lua脚本,并通过luaL_loadbuffer加载解密后的脚本内容。因此,最好的趋势交易源码通过hook这个函数,可以将(char*)content字符dump出来,获取解密后的lua脚本。

       然而,luaL_loadbuffer的源码无法直接获取,它位于编译过的库cocos2d-x\external\lua\luajit\prebuilt\android\armeabi-v7a\libluajit.a中。要找到实现细节,需要下载luajit源代码进行深入分析。

       总结关键点:

       1. 从c++进入lua世界的调用逻辑。

       2. 使用xxtea加密算法,sign和key为XXTEA和2dxlua。

       3. 无论是否加密,都会调用luaL_loadbuffer函数,通过hook这个函数获取解密后的lua脚本,但需运行游戏一次。

       4. cocos2d-x\external\xxtea\xxtea.cpp中有加密解密算法,逻辑清晰,可使用python脚本本地解密或hook获取key、sign或解密后脚本。节奏大师游戏界面源码

       实战案例:

       以某捕鱼游戏为例,下载apk后内部集成十余款小游戏。通过分析游戏源码,找到luac加密文件,解密key和sign。使用ida打开libqpry_lua.so,定位到AppDelegate::applicationDidFinishLaunching函数,找到加密调用。对比源码,解密后可直接运行游戏。

       深入lua脚本分析,如子弹击中鱼的逻辑,直接查找src\views\layer\BulletLayer.luac文件。通过修改相关函数参数,实现特定功能。其他功能逻辑获取源码后易于理解,修改代码后重新加密,实现游戏破解。

       思考如何实现cocos2d-x反逆向,从浅至深可采用以下方法:

       1. 修改xxtea的key和sign,需分析so文件。

       2. 直接修改xxtea算法,增加逆向难度。

       3. 更改luajit源码,调整字节码指令顺序或数据读取顺序。

       4. 将关键代码封装到其他cpp或so文件,增加解密步骤。

       5. 使用ollvm混淆代码,需分析混淆或vm。

如何安装和设置Cocos Code IDE

       1、首先下载最新的CocosCodeIDE和最新的Cocos2d-x3.2的源码。

       ã€€ã€€2、然后解压缩。

       ã€€ã€€3、启动CocosCodeIDE。

       ã€€ã€€4、按照下图选择:Cocos Code IDE -Preferences。

       ã€€ã€€5、按照下图指定Cocos2d-x3.2的源码路径(注意是根目录)

       ã€€ã€€6、选ok 大功告成。

       ã€€ã€€7、File-New-Project-Cocos Lua project。

       ã€€ã€€8、下一步下一步。

       ã€€ã€€9、src 目录就是lua源码、res目录就是资源。

       ã€€ã€€.、在项目上右键,选run as-cocos luaBinding。

       ã€€ã€€ã€èµ·å§‹æºç ç›®å½•ä¸‹çš„lua test 也可以运行了

Cocos2d-x之获取图像像素值

       åˆ¶ä½œæ¸¸æˆæ—¶ï¼Œæˆ‘们最常用的图片格式是png,因为png可以有透明的背景,这样在游戏显示图片是,透明的部分不会显示,只显示我们要的那部分。但是,透明的部分依然是图片的一部分,当你制作了一个非矩形的按钮,会有相当多的透明部分点击有效,那么如何做到点击透明部分无效呢?这就是本片文章要讲的:获取图像像素值。当然不仅仅在制作非矩形按钮时有用,在游戏中的很多涉及图片处理功能的地方也大有用途。

        废话不多说,直接贴源码(Cocos2d-x 3.x版本):

        HelloWorldScene.h文件

       HelloWorldScene.cpp文件:

        在GetRGBA函数中,调用了OpenGL的接口glReadPixels,它用于读取一些像素。当前可以简单理解为“把已经绘制好的像素(它可能已经被保存到显卡的显存中)读取到内存”。

        glReadPixels函数总共有七个参数。前四个参数可以得到一个矩形,该矩形所包括的像素都会被读取出来。(第一、二个参数表示了矩形的左下角横、纵坐标,坐标以窗口最左下角为零,最右上角为最大值;第三、四个参数表示了矩形的宽度和高度)

       ç¬¬äº”个参数表示读取的内容,例如:GL_RGB就会依次读取像素的红、绿、蓝三种数据,GL_RGBA则会依次读取像素的红、绿、蓝、alpha四种数据,GL_RED则只读取像素的红色数据(类似的还有GL_GREEN,GL_BLUE,以及GL_ALPHA)。如果采用的不是RGBA颜色模式,而是采用颜色索引模式,则也可以使用GL_COLOR_INDEX来读取像素的颜色索引。目前仅需要知道这些,但实际上还可以读取其它内容,例如深度缓冲区的深度数据等。

        第六个参数表示读取的内容保存到内存时所使用的格式,例如:GL_UNSIGNED_BYTE会把各种数据保存为GLubyte,GL_FLOAT会把各种数据保存为GLfloat等。

        第七个参数表示一个指针,像素数据被读取后,将被保存到这个指针所表示的地址。注意,需要保证该地址有足够的可以使用的空间,以容纳读取的像素数据。例如一幅大小为*的图象,如果读取其RGB数据,且每一数据被保存为GLubyte,总大小就是:**3 = å­—节,即千字节。如果是读取RGBA数据,则总大小就是**4 = å­—节,即千字节。

        注意:glReadPixels实际上是从缓冲区中读取数据,如果使用了双缓冲区,则默认是从正在显示的缓冲(即前缓冲)中读取,而绘制工作是默认绘制到后缓冲区的。因此,如果需要读取已经绘制好的像素,往往需要先交换前后缓冲。

关于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版本的文件加解密需求,并提供较为简单的操作方法。同时,欢迎各位分享自己的解密方法和见解,共同推动社区的发展。

更多内容请点击【热点】专栏