手游外挂入侵(一)某助手加速器实现原理探究

  • 简介

下载ghzs商店,搜索相应游戏即可下载,下载后安装运行,游戏中就会多出一个加速工具助手。

实现过程探究

打开游戏包查看发现dex中加入了com.gh.XXX相关的类,应该是将Dex重打包,加入了他们的SDK代码,然后他们SDK会加载cydia substrate框架的inline hook动态库和根据游戏定制的加速器动态库。

原理分析

① Inline hook libmono.so中的两个方法:
mono_class_from_name
mono_runtime_invoke
并且获取了mono_class_get_method_from_name和mono_method_full_name,将在之后使用。

② Hook mono_class_from_name方法内容:
原型:

MonoClass * mono_class_from_name (MonoImage *image, const char* name_space, const char *name)

Hook代码:

int __fastcall sub_1A70(MonoImage *image, const char* name_space, const char *name)
{
  static findset_timeScale = 0;
  if ( !j_strcmp(name, "Time") && ! findset_timeScale && !j_strcmp(name_space, "UnityEngine") )
  {
    dword_705C = image;
    dword_7064 = mono_class_from_name(image, "UnityEngine", "Time");
    dword_7058 = mono_class_get_method_from_name(dword_7064,” set_timeScale”,1);
    findset_timeScale = 1;
  }
  return mono_class_from_name(image, name_space, name);
}

Hook该函数最终目的获取到UnityEngine.Time.set_timeScale方法

③ Hook mono_runtime_invoke方法:
原型:

MonoObject*
mono_runtime_invoke (MonoMethod *method, void *obj, void **params, MonoObject **exc)

Hook代码:

int __fastcall sub_19D4(MonoMethod *method, void *obj, void **params, MonoObject **exc)
{
  static int isUIRootUpdate = 0;
  static int t = 0;
  if ( !isUIRootUpdate )
  {
    dword_7044 = mono_method_full_name(method,1);
    if ( !j_strcmp(dword_7044, "UIRoot:Update ()") )
    {
      dword_7048 = method;
      isUIRootUpdate = 1;
    }
  }
  if ( findset_timeScale && isUIRootUpdate && dword_7048 == method )
  {
    if ( t == 50 )
    {
      off_7008 = (int)&speed;
      mono_runtime_invoke (set_timeScale, 0, (int)&off_7008, 0);
      t = 0;
    }
    ++t;
  }
  return mono_runtime_invoke (method);
}

最终调用set_timeScale函数,并根据设定速度大小传入进行更改时间。

总结

这种方法目前来说还挺特别的,可以绕过对HOOK的检测以及一些加速器外挂特征的监测,缺点就是只能对U3D的游戏有通用性。

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值