手游智能反外挂Android端接入文档(JAVA)

2021.08.16 10:58:03

    接入步骤

    导入NHP SDK

    1. 将sdk中的动态库libNetHTProtect.so和nethtprotect.jar对应添加到游戏的包中,可根据游戏CPU架构选择对应的libNetHTProtect.so文件(由于我们的jar会自动加载动态库,不需要在android.mk中进行预编译处理)

    2. 修改Android工程的AndroidManifest.xml文件中的权限声明,所有权限均为可选,非必须,可添加如下权限:

    权限声明

        <!--网络通信-->
        <uses-permission android:name="android.permission.INTERNET"/>
        <!--获取设备信息-->
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <!--获取MAC地址-->
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
        <!--获取网络状态-->
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    

    SDK接口调用

    初始化

    初始化反外挂,开启反外挂服务,在游戏启动后调用

    导入接口类:

    import com.netease.htprotect.HTProtect;
    

    函数原型:

    public static void init(Context context,string gameKey);
    

    参数说明:

    参数 说明
    context 当前环境的上下文
    gameKey 易盾HTP分配gameKey,与手游加固的appKey对应

    gameKey请联系易盾获取。

    用户登录

    反外挂sdk接入中传入角色ID等信息后,数据处理时会将角色ID等信息与反外挂数据、设备信息关联,能实时获取恶意玩家使用外挂情况,游戏可通过相应数据最恶意玩家精准打击。

    函数原型:

    public static void setRoleInfo(Context context,string roleId, string roleName, string roleAccount, string roleServer, string gameJson);
    

    参数说明:

    参数 说明 赋值
    context 当前环境的上下文
    roleId 玩家的角色ID 可填空
    roleName 玩家的角色名称 可填空
    roleAccount 玩家的角色账号 可填空
    roleServer 玩家的角色服务器 可填空
    gameJson 游戏需要上传的信息,对应一个json字符串,包含key 可填空

    gameJson字段说明:

    KEY名称 KEY类型 KEY值 是否必须 官网标识 说明
    游戏版本号 字符串 GameVersion 可选 游戏版本
    资源版本号 字符串 AssetVersion 可选 资源文件版本
    数据转发域名 字符串 TransHost 可选 易盾网络不通时,反外挂数据转发域名地址
    数据转发IP 字符串 TransIP 可选 易盾网络不通时,反外挂数据转发IP
    数据转发端口 int TransPort 可选 易盾网络不通时,反外挂数据转发端口

    数据转发域名/IP/端口:
    设置之后,当数据发送到易盾后端失败后,会继续向游戏服务端发送数据,由游戏方服务端转发到易盾后端.域名和IP可以选择设置一个或者都设置,端口默认使用80。此字段设置前需要和易盾技术人员确定。尽量默认接入的时候带上,之后有需要再搭建服务端转发,数据转发只会在发送到易盾服务端失败的情况下会走转发流程。

    示例:

    HTPotect.setRoleInfo("123456","易小盾","yd@163.com", "游戏测试服","{
        "GameVersion":"1.0.1",
        "AssetVersion":"1.0.1",
        "TransHost":"test.163.com",
        "TransIP":"8.8.8.8",
        "TransPort":80
    }");    
    

    通用查询

    反外挂SDK提供root、模拟器、反外挂版本等信息查询服务,以及其他定制功能。

    函数原型:

    public static string htpIoctl(Context context,int request, string data);
    

    参数说明:

    参数 说明
    context 当前环境的上下文
    request 对应向反作弊模块请求的命令
    data 对应设置信息的附加数据,可为空

    request值:

    public enum RequestCmdID
    {
        Cmd_GetEmulatorName = 1,
        Cmd_IsRootDevice = 2,
        Cmd_DeviceID = 3,
        Cmd_GetHTPVersion = 7,
        Cmd_GetEncHTPVersion = 9
    };
    

    返回值:

    错误返回 unsupported request (不支持的命令),正确返回对应命令的结果

    模拟器检测:

    向反外挂模块查询模拟器信息。无附加数据,返回值模拟器名称

    示例:

    string name = HTProtect.htpIoctl(context,RequestCmdID.Cmd_GetEmulatorName, "");
    

    返回值:

    对应查询的模拟器信息。若为模拟器则返回模拟器名称,示例emulator:Nox,若为未知模拟器,则返回emulator:Unknown。若为真机,则返回emulator:None

    root检测:

    向反外挂模块查询设备是否root。

    示例:

    string name = HTProtect.htpIoctl(context,RequestCmdID.Cmd_IsRootDevice, "");
    

    返回值:

    若为root设备,返回值为root:1,若不是root设备,返回值为root:0

    反外挂版本号获取:

    向反外挂模块查询当前使用的智能反外挂版本号,掌握每个玩家的反外挂版本号。

    示例:

    string version = HTProtect.htpIoctl(context,RequestCmdID.Cmd_GetHTPVersion, "");
    

    返回值:

    版本号一定不为空,返回值举例:"4.15.114"。

    若要获取加密后的版本号,可以传入参数“Cmd_GetEncHTPVersion”

    示例:

    string version = HTProtect.htpIoctl(context,RequestCmdID.Cmd_GetEncHTPVersion, "");
    

    返回值:

    版本号一定不为空,返回值举例:"iF13uXaKVteXVA==||58807f98da0d945b5d60ba4e8f22a428"。

    返回值需要使用易盾提供的服务端解密sdk进行解密。

    存档加解密

    存档数据存在被篡改的风险,易盾智能反外挂SDK提供的加解密接口,提高本地数据的安全性,支持 string 和 byte[] 数组。

    函数原型:

    加密对象为String:

    string EncodeLocal(Context context,string inputData);
    string DecodeLocal(Context context,string inputData);
    

    加密对象为byte[]:

    string EncodeLocalByte (Context context,byte[]inputData);
    byte[] DecodeLocalByte (Context context,string inputData);
    

    返回值:

    返回的数据即为原始数据的密文,开发者需要自行对加密后的数据进行本地存储

    模拟点击行为检测

    批量的模拟点击极大的影响到游戏的正常,特别是工作室的参与,不仅影响到游戏的平台,还影响到游戏方的收入。易盾智能反外挂SDK提供相关的行为检测方案,使用模拟点击行为检测接口时,需要在游戏登录后,并且调用用户登录接口,设置role_id等信息后调用。

    接口接入须知:

    非强烈需要挖掘模拟点击类外挂的游戏,不需要接入

    函数原型:

    public static void ImpIoctl()
    

    示例:

    HTProtect.ImpIoctl();
    

    心跳系统

    随着安全对抗的日益激烈,网易易盾不断提升反外挂服务的自身安全强度,保障反外挂服务的安全,但也可能存在易盾反外挂服务被中止或者被剥离的风险。为避免反外挂服务被恶意破坏,易盾提供“心跳系统”,定时向游戏方反馈心跳信息,告知游戏方当前反外挂运行状态,既方便游戏方实时掌握反外挂运行状态,也能保障易盾反外挂服务的正常运行。

    接口接入须知:

    • registInfoReceiver接口需要在init之后方可调用
    • SDK会启动线程来调用onReceive函数**,**请注意多线程问题

    函数原型:

    public static void registInfoReceiver(InfoReceiver receiver);
    

    参数说明:

    参数 类型 说明
    receiver InfoReceiver 回调函数,接收心跳信息

    InfoReceiver的接口定义:

    public interface InfoReceiver{
    	void onReceive(int Type, string Info);
    }
    

    onReceive 参数说明:

    参数 类型 说明
    Type int 接收数据的类型
    Info string 接收的具体数据

    目前支持的type类型有:

    定义 说明
    1 NetHeartBeat.INFO_TYPE_HEARTBEAT 心跳数据,可直接在客户端解析
    2 NetHeartBeat.INFO_TYPE_ENC_HEARTBEAT 加密后的心跳数据,必须发往服务端进行解密

    示例:

    • 实现接口
        private class MyInfoReceiver implements NetHeartBeat.InfoReceiver {
            public void onReceive(int type, String info) {
                if (type == NetHeartBeat.INFO_TYPE_HEARTBEAT) {
                    Log.e(TAG,"info is:" + info);
    				//(获取到info进行相关操作)
                } 
    			if (type == NetHeartBeat.INFO_TYPE_ENC_HEARTBEAT) {
                    Log.e(TAG,"info is:" + info);
    				//(获取到的info,为加密状态,需发往服务端进行解密)
                } 
            }
        }
    

    注:两种type类型均可接收,也可只接收其中一种,建议只获取加密后的心跳数据,然后发往服务端进行解析。

    • 注册接口
    MyInfoReceiver mInfoReceiver = new MyInfoReceiver();
    HTProtect.registInfoReceiver(mInfoReceiver);
    

    心跳系统是每10s内会返回一次数据(“Info”),返回的数据为一个字符串,“Info”包含三种信息,分别是序列号、时间戳、网络状态,使用“key:value”格式并使用“||”分割,含义如下表所示:

    名称 标示 说明 异常情况 是否每次必有
    序列号 seq 从初始值“1”开始递增 序列号不存在,或者乱序
    时间戳 t 当前时间戳,以秒为单位 时间戳非当前时间
    网络标识 net 数据发送是否成功
    (1 为成功,0 为失败)
    网络异常,数据发送失败,则网络标识为0

    Info的返回值示例:

    • 易盾网络通信正常时:
    seq:1||t:1589781840||net:1
    
    • 易盾网络通信异常时:
    seq:1||t:1589781840||net:0
    

    处理建议:

    • seq、t和net是否出现,该三个标识为心跳系统一定会返回的值,若无,说明反外挂异常

    • seq的值是否符合"从1开始依次递增"的规则,若不符合,说明返回值被篡改

    • net为0是否长期出现,若5分钟内net的取值都为0,说明网络异常

    数据校验

    游戏协议如被破解,若为单机游戏,可直接影响到存档文件的安全性;若为帧同步游戏,则可通过破解协议修改战斗数据;其他类型游戏亦可被做成脱机协议,用于攻击或脱机外挂。为保障游戏协议安全,易盾提供”数据校验“方案,采用自研通讯协议校验算法。

    接口接入须知:

    客户端接入数据校验接口后,服务端对对应的数据进行校验,服务端数据校验相关文档请联系易盾获取。

    函数原型:

    public static String getDataSign(Context context,String inputData,int algIndex);
    

    参数说明:

    参数 类型 说明
    context Context 当前环境的上下文
    inputData String 待校验的数据
    algIndex int 表示算法标识,需要联系易盾人员

    返回值:

    返回的数据即为校验结果,开发者需要将原始数据与校验结果发送到游戏服务端,由游戏服务端校验。

    在线咨询 电话咨询:95163223 免费试用