源码来自9miao
本人技术有限,大家共同学习,抛砖引玉,加群讨论
交流群: 422209275
2.140.0版本的全民挂机
概述:
基本目录结构:
Code_Client (客户端 具体游戏相关c++代码,还有一部分lua在Resource_client)
Code_Core (引擎代码,以及增加的一些基础库)
Code_Server (Server, java写的)
Resource_Art (原始资源 ccb工程)
Resource_Client (工程所需对应资源)
目录很清晰,不多说明,不过客户端要运行,还需改改目录,把一些2.140.0的目录去掉,后面详述
一:Code_Core,
对应cocos版本2.2.3;具体看cocos2d.cpp文件;引擎已经被他们改了很多,慢慢解说(我也没完全看明白,改了多少),明显多了几个目录,core,jni,json*,protobuf*,
Utility,*.bat, 下面说说他们的作用;
Core:一些核心的基础组件
Json:json库
Protobuf:通讯用protobuf库
Utility:aes加密用(应该是加密资源的)
Jin:android编译用到,为何单独写一个?Cocos自带的不用?待确认
1)Core
AES.h cpp --> AES加密算法
接口:
//key must be 128 bit(16byte), outStr should be alloc and deleted outside the function
void Decrypt (const byte* inStr, unsigned int count, byte* outStr, const byte* key);
//key must be 128 bit(16byte), outStr should be alloc and deleted outside the function
void Encrypt (const byte* inStr, unsigned int count, byte* outStr, const byte* key);
Base64.h cpp ----> Base加密
std::string core_base64Encode(const unsigned char* inData, int inSize);
为何只有个encode,没有decode,这也太省了吧;
AsyncSprite.h cpp --> 异步sprite
这个屌屌的;改造了很多引擎相关部分
这种异步,瓶颈也是在io读写,那么程序初始化加载资源,用这个也没什么作用;
在其他场景使用
Concurrency.h cpp --> 线程相关
这个也屌屌的;自己写我也写不出来。
GameEncryptKey.h cpp --> 这是真正游戏使用的加密相关
const unsigned char gamekey[]="nc315XHW^"; //!!!哈哈,加密key,估计现在版本肯定改了
bool encBuffer(unsigned long inSize , unsigned char* inBuffer, unsigned long& outSize, unsigned char*& outBuffer);
bool decBuffer(unsigned long inSize , unsigned char* inBuffer, unsigned long& outSize, unsigned char*& outBuffer);
unsigned char* rc4DocumentBuffer(unsigned long inSize,unsigned char* inBuffer,unsigned long* outSize);
unsigned char* rc4TextureBuffer(unsigned long inSize,unsigned char* inBuffer,unsigned long* outSize);
unsigned char* getEncodeBuffer( unsigned long* inSize,unsigned char* buffer,const char * fileName,const char* pszMode);
通讯传输加密(rc几算法,然后zlib压缩),资源文件使用rc4加密
GameMath.h cpp --> 一些字符串处理,时间处理等函数
GamePlatform.h cpp ---> 平台相关一些函数,不错,就是少了点
Inifile.h cpp ---> 读取ini类型配置文件,
可惜里面的实现耦合太多了。不方便直接拆出来用
IteratorWrapper.h --> 这个太屌。
Language.h cpp ---> 本地化文字显示,json配置文字
Md5.h cpp --> md5算法
Rc4.h cpp -- > rc4 算法
Singleton.h ---> 单例基类
Stdafx.h cpp -->宏定义一个内存检测相关
StringConverter.h cpp ---> 各种类型转换成string类型
C++就是这点不好,什么库,都要自己准备!建议都加到标准库
TableReader.h cpp --->xml以及一个自定义结构的解析
Tinyxml2.h cpp ---> xml解析
网络相关
SocketBase.h cpp --> 网络基础
IoSocket.h cpp --> 基本的封装
AsyncSocket.h cpp ---> 这网络封的很烂啊
CurlDownload.h cpp --> 直接用cocos自带的吧
LoadingUnit.h cpp --> 把所有加载的写到一起,自行控制,同步or异步加载;真蛋疼!
ServerConsts.h cpp --- >公告,服务器列表,热更新等处理
太古老了!用cocos的就好了,这种基本都在lua里实现了。写这么一坨c++
HaswkOctets.h cpp ---> 字节流操作
PackageBase.h cpp ---> 通讯数据包
void* PacketBase::PackPacket(int _opcode, int &_length,const std::string& str)
1. 随机一个mask,亦或所有的字节;
2. 然后生成干扰项reserve,和mask合成一个int值
reserve前24位为扰乱相关,没有实际用处,后8位为有效的字段 by zhenhui
3. 4字节opcode;4字节字符串长度;4字节reserve;4字节crc校验;要发送的字符串
4. 压缩上面生成的字节流
PackageManager.h cpp --->
ThreadSocket.h cpp --->
1)libOS
inputBox.h cpp --->win部分使用,不用cocos自带的。。
libOS.h cpp -->总的声明,具体实现对应不同android和ios部分
BulletinBoardPage.h cpp ---> win,android都是空的,ios下才有
Flurry.h -->IOS使用分析功能头文件
MTA.h ---> ios使用统计分析头文件 TA-SDK,这个没听说过
MTAConfig.h
SvUDIDTools.h
UIDevice+IdentifierAddition.h
WXApi.h -->微信sdk
WXApiObject.h --> 以上都是ios相关
目录ios
YAKeychainWrapper.h m ---> ios 钥匙串,太刁;这个都用到来干嘛?
UIDevice+IdentifierAddition.h m ---> 这个倒是可以用到,获取ios设备id,mac地址
NSString+MD5Addition.h m --> ios md5加密
SvUDIDTools.h m ---> 这里会判断 钥匙串 证书
#ifdef LIBOS
//for 这个是的证书 [email protected]
static const char kKeyChainUDIDAccessGroup[] = "Q498LWL48Q.com.loves.keychainshare";//VV359RS3H9
#endif
//for 这个是庞贵的证书 [email protected]
#ifdef LIBOS_APPSTORE_TW
static const char kKeyChainUDIDAccessGroup[] = "4XV5KE33Q2.com.loves.keychainshare";
#endif
//for 这个是黄硕dukaka的证书 [email protected]
#ifdef LIBOS_APPSTORE
static const char kKeyChainUDIDAccessGroup[] = "9FAK9YZ36N.com.loves.keychainshare";
#endif
#ifdef LIBOS_APPSTORE_TW_Panggui
//for [email protected]
static const char kKeyChainUDIDAccessGroup[] = "4Y73N55H57.com.loves.keychainshare";
#endif
#ifdef LIBOS_APPSTORE_TW_68240412
//for [email protected]
static const char kKeyChainUDIDAccessGroup[] = "CFJ39ZNX5H.com.loves.keychainshare";
#endif
testAlertView.h mm ---> ios弹出窗
MovieMgr.h mm ---> play moview,调用的AppController里的方法
MBProgressHUD.h m ---> 进度条?
BulletinBoardView.h m
BulletinBoardView.mm --> 使用webview实现公告版
libOSObj.h m
libOS.mm ---> 这里面某些实现可以用用
目录Android
libOSHelpJni.h cpp -->对应一些android的功能实现。调用GameActivity和AnalyticsToolHelp,java文件
libOS.cpp --> 这里是个interface,调用的是Java_org_cocos2dx_lib_Cocos2dxHelper_H, 在
cocos2dx\platform\android\jni目录下,也是被增加了很多api,为何要改引擎呢!单独写一个文件不好?
Android.mk 打包android libos静态库配置文件
3) Utility 工具,我一般写工具都用脚本写。不用c草草
"Usage:Utility [-OPERATION]\n" \
"-E:(Encrypt): Utility -E sourcefile destinationfile key\n" \
"-D:(Decrypt): Utility -D sourcefile destinationfile key\n" \
"-C:(CRC validate): Utility -C checkfile\n" \
"-N:(Network test): Utility -N opcode" \
"-V:(Verson file creation): Utility -V rootdir versonfile excludeFileExtension compareDir version"; \
"-P:(Pressure test): Utility -P type(0:Login 1:PlayerSimulate 2:MassivePlayers";
主要功能上述6项,不多说
不知道最新的全民挂机是否还是用这里的方法加密的;要是的话,可以直接拿来解密试试!哈哈。可惜没有proto文件,看不到制定的协议,也没法修改。
全民挂机 解密工具, 可到qq群下载
只用于开发爱好,不要用于非法目的,本人概不负责