C++游戏分析与破解方法介绍

Posted douluo998

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++游戏分析与破解方法介绍相关的知识,希望对你有一定的参考价值。

1、C++游戏简介

目前手机游戏直接用C++开发的已经不多,使用C++开发的多是早期的基于cocos2dx的游戏,因此我们这里就以cocos2d-x为例讲解C++游戏的分析与破解方法。

Cocos2d-x是一个移动端游戏开发框架,可以使用C++或者lua进行开发,也可以混合使用。在使用C++开发时,游戏主逻辑模块默认名字是“libgame.so”,跟其他的native模块一样,放在游戏的“lib”目录下。也就是android手机上的“/data/app-lib/包名/”目录,或者直接apk解包后的“lib\\armeabi-v7a”目录,其中“armeabi-v7a”取决于当前CPU架构。

为了进一步确定游戏引擎,可以把“libgame.so”载入IDA分析,搜索是否有包含“cocos2dx”字符串的函数名,如图:

由于cocos2d-x引擎也支持lua,可以继续搜索lua相关函数,如果没有搜到,基本可以确定这个游戏是基于cocos2d-x引擎且使用C++编写的游戏。

2、C++基础

C++语言以及C++程序的逆向分析是很大的话题,这里仅简单提一下,如果读者很欠缺C++相关的知识,应该先找相关书籍学习,不可急于求成。

2.1 类指针

C++语言是兼容C语言的偏底层语言,因此在介绍C++的面向对象的概念之前首先需要了解一下指针。

通常语境下,我们说“指针”其实全称是“指针变量”,也就是说它其实是一个变量,“指针”其实就是“内存地址”的意思,所以“指针变量”就可以理解为“内存地址变量”,就是一个保存内存地址的变量。对应的,不同类型的指针,说的就是那个内存地址保存的变量的类型,比如“函数指针”,我们就可以理解为,这是一个变量,这个变量保存的是一个地址,这个地址指向的位置是一个函数。

“类指针”就是一种指针变量,这个指针的类型不是C++的基本类型,而是我们自定义的“类”。类指针通常用来作为基址,索引类的成员变量,或者虚函数。所谓“基址”,跟汇编中说的基址是一个意思。

2.2 虚表

如果一个类有虚函数,那么它的内存结构中,头部就首先会有4个字节用来存储一个指针变量。这个指针变量就叫“虚表指针”,它指向的位置是一个函数指针数组,这个数组就叫“虚表”,也就是一连串的函数地址。这个数组里的每一个元素,都是这个类的虚函数的地址。同一个类的所有对象共享一个虚表。如果两个类的虚函数不同,那么就会有不同的虚表。

虚表稍微了解即可,它的存在主要是为了实现多态。这里介绍是方便大家了解类的内存结构,如果一个类有虚函数,则它实例的头部4个字节留给虚表指针,其余位置放置成员变量;如果没有虚函数,则内存全放置成员变量。

2.3 类的成员函数

类的成员函数与一般的全局函数或者静态函数唯一的区别在于,它的第一个参数是一个“隐式”的参数,这个参数就是它所属的对象的this指针。“隐式”说的其实是在语言层面看不见,但是在汇编代码中可以看到。

所以在分析的时候如果看到函数的第一个参数是一个指针,那它可能就是一个对象的指针,而这个函数就有可能是个成员函数。

3、C++游戏分析方法

C++编写的游戏分析起来会相对要难,但具体修改起来就会相对简单,因此破解的重点还是在如何找到关键的函数,或者关键的数据。这是一个逆向发散的过程,因此有许多方法都可以尝试。

这里仅讨论无符号或者仅有少数与游戏逻辑无关的符号下的游戏逻辑模块的分析。区分一个游戏逻辑模块有无符号,可以简单地通过在IDA的函数列表中搜索关键字符串看结束,比如“HP”、“Boss”、“Player”等。

有符号的情况相对就会简单很多,因此如有可能,最好拿到有符号的样本进行分析。有符号的模块样本通常会出现在游戏早期版本,或者某个特定的版本由于开发人员的疏忽而遗漏出来。尽管版本会不一致,但还是有很多可以借鉴的地方。

常规的C++程序逆向分析就是通过看汇编代码,从而理解函数的功能。也可以通过函数的参数以及返回值去猜测函数功能,最后通过理解一个个函数功能而把整个程序的流程厘清,再找到关键点。这是一个费时费力的过程,因此一般仅用在关键函数分析处。整个分析过程还是有许多其他的技巧和方法可以提高效率,下面就介绍几个常用的方法。

3.1 借助字符串信息

由于游戏开发过程中免不了要打印Log用于调试,或者由于别的原因在程序中保留了敏感字符串信息。因此直接在IDA中按快捷键“Shift+F12”列出所有字符串就可以获取到相当多的信息。如图:

根据字符串信息,可以索引到相关函数,方便对函数的功能进行分析。

3.2 send函数回溯

游戏总会进行网络通信,而Android系统底层处理网络通信的函数就是send函数。动态调试的时候可以在send函数处下断,就可以断到游戏与服务器的交互数据。但send函数过于底层,一般游戏都会有加密,这里断到的数据通常都是加密后的数据,因此需要向上回溯。

在向上回溯的过程中同时注意分析各层函数的作用,有些只是send函数的封装,有些就可能会涉及到加密,或者组包。我们的目的是找到组包函数和它的上层。在组包函数处修改,就可以影响游戏与服务器的底层通信数据;组包函数的上层一般就是功能函数,直接修改功能函数就可以影响游戏逻辑,最终可以更“自然”地影响到游戏的封包。

这个过程中可以借助IDA脚本,过滤一些频繁调用的函数,比如心跳函数;也可以打印log,分析调用来源和它们的调用频率。

3.3 输出log

在一些频繁被调用的函数,或者是有明文信息的函数处,如果有必要,也可以采用IDA脚本编程的方式打印log进行分析。如果调用过于频繁,脚本的速度跟不上,也可以采用注入进程并下Hook的方式打印log,速度就会快很多。具体的注入方法详见其他篇,这里不多说。

4、破解

C++游戏的破解相对比较简单,通常都是注入游戏进程,然后干涉游戏逻辑,具体来说可以用以下几种方法:

   1、Hook关键函数,修改传入参数。比如存在一个set_MaxHP函数,可以修改传入的参数,修改怪物或者玩家的血量。

   2、Hook关键函数,修改返回值。比如存在一个computeDamge函数,可以修改函数的返回值,实现秒怪或者无敌的功能。

   3、Hook关键函数,多次调用。比如存在一个hit函数,可以多次调用该函数实现多次打击。

   4、Hook关键函数,直接返回。比如存在一个dead函数,直接跳过执行,可以实现不死效果。

   5、直接修改判断逻辑。注入到进程,或者远程ptrace后直接在二进制层面直接修改汇编指令。比如存在一个判断,杀怪数大于10则通关,可以修改为杀怪数小于10则通关。

R语言游戏数据分析与挖掘:为啥要对游戏进行分析

参考技术A

本书从实际应用出发,结合实例及应用场景,通过对大量案例进行详细阐述和深入分析,进而指导读者在实际工作中通过R语言对 游戏 数据进行分析和挖掘。这是一本关于数据分析实战的书籍,里面的知识、方法、理论是可以直接应用到整个互联网的。

全书一共13章,分为三篇:基础篇、实战篇和提高篇。

第一篇是基础篇(第1~4章): 介绍了 游戏 数据分析的基本理论知识、R语言的安装与使用、R语言中的数据结构、常用操作和绘图功能。

第1章主要介绍了 游戏 数据分析的必要性和流程;第2章讲解了R语言和RStudio的安装及使用方法,并对数据对象和数据导入进行了介绍;第3章介绍了R语言绘图基础,包括常用图形参数设置、低级绘图函数和高级绘图函数;第4章介绍了lattice和ggplot2绘图包,并详细介绍了一些基于R语言可用于生成交互式图形的软件包,包括rCharts、recharts、rbokeh、plotly等。

第二篇是实战篇(第5~11章): 主要介绍了 游戏 数据的预处理、常用分析方法、玩家路径分析和用户分析。

第5章介绍了 游戏 数据预处理常用的手段,包括数据抽样、数据清洗、数据转换和数据哑变量处理;第6章介绍了 游戏 数据分析的常用方法,包括指标数据可视化、 游戏 数据趋势分析、 游戏 数据相关性分析和 游戏 数据中的降维技术;第7章介绍了事件点击行为常用的漏斗分析和路径分析;第8章介绍了留存指标的计算、留存率计算与预测、常用分类算法原理和模型评估;第9章介绍了常用用户指标计算、LTV计算与预测、用户物品购买关联分析、基于用户物品购买智能推荐和 社会 网络分析;第10章介绍了渠道数据分析的必要性和对渠道用户进行质量评级;第11章介绍了常用收入指标计算、利用用户活跃度衡量 游戏 经济状况、RFM模型研究。

第三篇是提高篇(第12~13章): 介绍了R语言图形界面工具Rattle和Web开发框架shiny包。

第12章介绍了R语言的图形界面工具Rattle,该工具能够在图形化的界面上完成数据导入、数据 探索 、数据可视化、数据建模和模型评估整个数据挖掘流程;第13章介绍了Web开发框架shiny包,使得R的使用者不必太了解CSS、JS,只需要了解一些HTML的知识就可以快速完成Web开发。

关键词: 程序语言,程序设计

完整课程可前往UWA学堂《R语言 游戏 数据分析与挖掘》阅读。

https://edu.uwa4d.com/course-intro/0/383

随着 游戏 市场竞争的日趋激烈,在如何获得更大收益延长 游戏 周期的问题上,越来越多的手机 游戏 开发公司开始选择借助大数据,以便挖掘更多更细的用户群来进行精细化、个性化的运营。数据分析重要的不是提供 历史 和现状,而是通过分析发现手机 游戏 现状,以及对未来进行预测。一切以数据出发,用数据说话,让数据更好地指导运营服务好玩家,对玩家的行为和体验不断进行分析和调整,使玩家可以在虚拟世界中得到各方面的满足。要实现这个目的,需要搭建专业的数据化运营团队。此外, 游戏 数据分析与其他行业的数据分析不同的是, 游戏 综合了经济、广告、社交、心理等方面的内容,这就对数据分析师提出了更高的要求。

伴随着 游戏 互联网的快速发展和智能终端的普及,移动 游戏 进入了全民时代。越来越多的玩家利用碎片化时间进行 游戏 ,使得 游戏 数据呈现井喷式增长,同时也对数据存储技术、计算能力、数据分析手段提出了更高的要求。海量数据的存储是必须面对的第一个挑战,随着分布式技术的逐渐成熟,越来越多的互联网企业采用分布式的服务器集群 分布式存储的海量存储器进行数据的存储和计算,从而解决数据存储和计算能力不足的问题。如何在海量的、复杂高维的 游戏 数据中发掘出有价值的知识,将是很多公司下一步亟待解决的难题。

虽然积累了海量的玩家数据,很多公司也开发了自己的BI报表系统,但是多数停留在“看数据”阶段,还是用传统的数据分析方法对数据进行简单的加工、统计及展示,并没有进行深度挖掘发现数据背后的规律和把握未来趋势。正是在这样的大背景下, 游戏 数据分析逐渐在 游戏 行业中变得重要。公司需要从传统的粗放型运营进化到精细化运营,从而了解如何有效地获取用户、评估效果;如何激活用户、评估产品质量;如何提升收益,并挖掘潜在的高价值用户。要满足精细化运营的需求,数据化运营就应运而生了。数据化运营就是在以海量数据的存储、分析、挖掘和应用的核心技术支持的基础上,通过可量化、可细分、可预测等一系列精细化的方式来进行的。

数据化运营是飞速发展的数据存储技术、数据挖掘技术等诸多先进数据技术直接推动的结果。数据技术的飞速发展,使数据存储成本大大减低,同时提供了成熟的数据挖掘算法和工具让公司可以去尝试海量数据的分析、挖掘、提炼和应用。有了数据分析、数据挖掘的强有力支持,运营不再靠“拍脑袋”,可以真正做到运营过程自始至终都心中有数。比如,在玩家的细分推送中,数据分析师利用数据挖掘手段对玩家进行分群,运营根据不同的用户群制定差异化策略,数据分析师再根据推送效果进行评估。

完整课程可前往UWA学堂《R语言 游戏 数据分析与挖掘》阅读。

https://edu.uwa4d.com/course-intro/0/383

1、 游戏 数据分析师

2、 游戏 产品运营人员

3、产品数据挖掘

以上是关于C++游戏分析与破解方法介绍的主要内容,如果未能解决你的问题,请参考以下文章

12Cocos2dx 3.0游戏开发找小三之3.0中的生命周期分析

cocos creator制作一个简单的拼图游戏

Part 1:基础语言-Cocos2d-x手机游戏开发之C++语言基础-关东升-专题视频课程

C++关于游戏开发的书籍

Cocos2d-x游戏的一般验证分析

cocos2d-x制作别踩白块儿第一期:游戏介绍