《全民挂机》 源码解析 一



源码来自9miao

本人技术有限,大家共同学习,抛砖引玉,加群讨论

交流群: 422209275

2.140.0版本的全民挂机

概述:

 

基本目录结构:

Code_Client  (客户端 具体游戏相关c++代码,还有一部分luaResource_client

Code_Core    (引擎代码,以及增加的一些基础库)

Code_Server   (Server, java写的)

Resource_Art   (原始资源 ccb工程)

Resource_Client  (工程所需对应资源)

目录很清晰,不多说明,不过客户端要运行,还需改改目录,把一些2.140.0的目录去掉,后面详述

 

一:Code_Core

对应cocos版本2.2.3;具体看cocos2d.cpp文件;引擎已经被他们改了很多,慢慢解说(我也没完全看明白,改了多少),明显多了几个目录,corejnijson*protobuf*

Utility*.bat, 下面说说他们的作用;

Core:一些核心的基础组件

Jsonjson

Protobuf:通讯用protobuf

Utilityaes加密用(应该是加密资源的)

Jinandroid编译用到,为何单独写一个?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字节opcode4字节字符串长度;4字节reserve4字节crc校验;要发送的字符串

4. 压缩上面生成的字节流

 

PackageManager.h cpp --->

ThreadSocket.h cpp ---> 

 

 

1)libOS

inputBox.h cpp --->win部分使用,不用cocos自带的。。

libOS.h cpp -->总的声明,具体实现对应不同androidios部分

BulletinBoardPage.h cpp ---> winandroid都是空的,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设备idmac地址

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的功能实现。调用GameActivityAnalyticsToolHelpjava文件

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群下载

只用于开发爱好,不要用于非法目的,本人概不负责




你可能感兴趣的:(全民挂机,源码,全民挂机)