首页
论坛
专栏
课程

[求助]安卓端 手游变速器,类似光环助手的实现方式是怎样的?

2018-8-23 18:23 8141

[求助]安卓端 手游变速器,类似光环助手的实现方式是怎样的?

2018-8-23 18:23
8141

最近公司运营看到一款软件  叫  光环助手,上面有很多游戏app,各个渠道的,他们平台先去各大平台下载游戏对应的apk包,然后反编译的方式注入他们自己的代码

在samli的com.gh.xxx下,然后在游戏的初始化activity里调用他们Plugin中的init方法


由于混下了代码,大概看下了,监听了网络改变通知,初始化后做了下载操作,下载到data/data/包名/file/gh目录下


 

其中主要的就是2个so和一个apk,大致原理也差不多知道,hook到游戏调用的时间心跳方法(公司ios小哥已实现,hook gettimeofday方法,将返回值乘以倍数,注入ipa,即可,u3d需要另外操作)

安卓端cocos2d游戏应该也是类似ios  hook  gettimeofday,这边用Cydia Substrate框架写了个jni


根据游戏打成对应的armeabi下的so(这中间还有个坑,NDK升级太高了,ABI设置为armeabi时还无法编译,提示要写armeabi-v7a,降到16才能打armeabi的so)

然后丢到游戏反编译的项目lib对应文件夹下,准备偷懒使用System.loadLibrary(“native-lib.cy”);静态给注入,然后打包,报错了

08-23 09:53:33.952: E/art(4043): dlopen("/data/app/com.xxx/lib/arm/libnative-lib.cy.so", RTLD_LAZY) failed: dlopen failed: "/data/app/com.xxx/lib/arm/libnative-lib.cy.so" has unexpected e_machine: 40

搜了下是这个so还引用了其他第三方so,这些第三方的so也需要静态注入

然后也给加上了,其中一个so报错了libsubstrate-dvm.so也是和刚native-lib报的一样的错

08-23 09:57:37.393: E/art(4250): dlopen("/data/app/com.xxx/lib/arm/libsubstrate-dvm.so", RTLD_LAZY) failed: dlopen failed: "/data/app/com.xxx/lib/arm/libsubstrate-dvm.so" has unexpected e_machine: 40

下了IDA工具,查看了这个第三方的so调用了


除了第一个调用的so是第三方的(已静态引入),其他的so应该是linux系统自带的,第一个也导入了,但是还是提示报错(个人怀疑是libstdc++.so的问题,但是查了下是linux自带的so啊...)

这三个so,只引入substrate和native-lib.cy又会报和只引入native-lib.cy一个一样的错

三个so静态引入代码 如下,在app的mainactivity的oncreate方法里引入


 

到此无法测试是否实现了修改成功,并且看网上说 Cydia Substrate框架好像是需要root才能使用,而且只支持4.4以下系统,这就很尴尬了,光环助手是都可以用,不论是root还是非root,是4.4还是5.0

各位大牛看有不有好的解决方案或者demo给小弟测试下

最后附上光环助手修改的游戏改速截图


 

PS:好像 gettimeofday是安卓端用来检测反编译的东西,还不知道这个方向是否正确,网上看了一些技术帖子,有针对u3d的游戏加速是hook  u3d引擎的settime方法,好迷茫,这个游戏cocos2d,不知道该怎样做,而且这个光环助手的加速不需要root,也不分5.0以上还是一下系统

续:今天来继续分了下光环助手游戏启动后下载的东西

首先上图

下载了一个zip,2个so文件和一个apk,先看zip,里面是些悬浮窗上用到的图片


 

再来看两个so文件
libdyqlb_v1d3_0108.so,根据游戏命名的so

 

 

这三个函数是对游戏包内的光环sdk的java类的jni实现函数,其中maxSpeed应该是用来传递悬浮窗上传递的speed值,这个so没有hook代码

再来看libgh_safety.so

 

 

找到了正主,从MSxxx前缀看的出来,这个so使用Cydia Substrate框架进行了底层函数的hook,具体是hook了什么函数还我还不会看...但是大体方向没错,等会得先去研究下IDA的使用和看法

最后来看下plugin_v1d3_v5.apk,反编译后

 

只有这么点东西

清单文件没啥,发现并没有添加Cydia Substrate官网上说的

<uses-permission android:/>权限

 

再看smali

 

里面也只有一个包名,内容倒是不少,又混淆了,只能慢慢看...

求大牛解救,怎么弄这个需求


-----更新----8.24

用真机试了下,报了错,找不到libdvm.so,是因为5.0以上安卓不支持dvm虚拟机了,想办法拿掉了xx-dvm.so,重新生成了不需要它的新hook的so

还是静态注入,真机模拟器均没有报错了,但是没有任何效果....游戏并没有加速,不知道哪里有问题,我再加个打印试试,看是否hook到了....


打印了对应的log,但是... 对象是个空的。。。 所以相当于没有走我的逻辑,是因为静态注入so的原因么,动态注入好像很复杂,看了些技术贴都是讲的云里雾里的,有没对应的教程帖子推荐

----------------------更新--------------------

零零碎碎,历时2天,完成了这个需求

原理是gettimeofday函数的hook

具体实现

https://blog.csdn.net/qq_26763799/article/details/82146582  我写在这里了,有完全的jni,直接拿去打成so即可使用

MSImageRef image;
image = MSGetImageByName("/system/lib/libc.so");



[推荐]看雪企服平台,提供安全分析、定制项目开发、APP等级保护、渗透测试等安全服务!

最后于 2018-8-29 14:45 被到底打哪个龙编辑 ,原因: 结贴,功能已实现
上一主题 下一主题
最新回复 (26)
到底打哪个龙 2018-8-23 18:32
2
0
求各路大佬解救!
FraMeQ 2018-8-24 09:34
3
0
你是用的模拟器?has unexpected e_machine: 40 这个错误通常是ELF程序和处理器型号不一致导致的
到底打哪个龙 2018-8-24 09:44
4
0
FraMeQ 你是用的模拟器?has unexpected e_machine: 40 这个错误通常是ELF程序和处理器型号不一致导致的
是的用的模拟器,但是打出来的so确实是armeabi的,难道是64位和32位的区别?
到底打哪个龙 2018-8-24 10:02
5
0
FraMeQ 你是用的模拟器?has unexpected e_machine: 40 这个错误通常是ELF程序和处理器型号不一致导致的
早上在华为手机上Process: com.jzyx.dyqlb.xmw, PID: 6137
    java.lang.UnsatisfiedLinkError: dlopen failed: library "libdvm.so" not found
报了这个错,是因为5.0以上系统不使用dvm虚拟机了,可是这个第三方的so应用的,但是怎么去掉呢...
最后于 2018-8-24 10:15 被到底打哪个龙编辑 ,原因: 确实信息
到底打哪个龙 2018-8-24 16:11
6
0
没有大佬么。。。
这个需求做不动啊
蟑螂一号 1 2018-8-25 14:15
7
0
把libc和时间相关的函数拦截改一遍看
到底打哪个龙 2018-8-27 09:26
8
0
蟑螂一号 把libc和时间相关的函数拦截改一遍看
大佬,怎么拦截,hook不就是拦截的么,我在想是不是我静态注入so的问题,下一篇求助贴也试了cocos2d的so的所有setTime相关方法,全是
MSGetImageByName("/system/lib/xxx.so");这个对象获取不到,所以根本就hook不到方法
蟑螂一号 1 2018-8-29 09:21
9
0
到底打哪个龙 大佬,怎么拦截,hook不就是拦截的么,我在想是不是我静态注入so的问题,下一篇求助贴也试了cocos2d的so的所有setTime相关方法,全是 MSGetImageByName("/s ...
substrate试一下  应该是你的hook方式不对哦
到底打哪个龙 2018-8-29 14:43
10
0
蟑螂一号 substrate试一下 应该是你的hook方式不对哦
就是用的substrate,方式也没有问题,但是不知道为何hook不到,后来github上找了类似的项目,发现它在image为空时通过dlopen去找so,加上后就能hook到了
另外,夜神模拟器,MSGetImageByName方法会100%得不到so对象,必须dlopen去拿,真机有的拿得到,有的拿不到,也需要dlopen去弥补取不到的情况
李志成lee 2019-1-4 15:52
11
0
这个so easy 好吗,我已经实现了和光环一模一样的
hhhaiai 2019-1-5 18:38
12
0
j可以给大家分享下。
bluth 2019-1-7 10:42
13
0
4年前仿XX助手实现过这个,很简单的,
xxRea 2019-1-29 11:11
14
0
学习一下,~~
北方的季风 2019-2-25 21:32
15
0
从csdn的帖子过来,最近项目也有这个需求.因为我还不会编写jni.所以思路是从光环助手上下载对应的加速包.然后提取光环的注入的代码.修改成自己游戏的,但是遇到了反编译后重新编译,执行Plugin.init后 游戏会退出,猜测应该是光环的so文件里对签名进行了校验.
北方的季风 2019-2-25 21:33
16
0
bluth 4年前仿XX助手实现过这个,很简单的,
请问,您是使用哪种方法实现的呢.想学习一下
茅山小僧 2019-2-26 11:51
17
0
cocos2d 一般是 cocos2d::Scheduler::update(),战斗加速甚至需要hook lua,根据具体游戏
U3D 一般是UnityEngine.Time::set_timeScale(),
少数游戏可以hook gettimeofday实现
北方的季风 2019-2-28 09:47
18
0
茅山小僧 cocos2d 一般是 cocos2d::Scheduler::update(),战斗加速甚至需要hook lua,根据具体游戏 U3D 一般是UnityEngine.Time::set_timeS ...
学习了,请教下有些游戏hook了,只能看到游戏内部时间加快了,战斗和进度条还是正常的,这种是需要hook lua吗
茅山小僧 2019-2-28 09:58
19
0
北方的季风 学习了,请教下有些游戏hook了,只能看到游戏内部时间加快了,战斗和进度条还是正常的,这种是需要hook lua吗
有几款cocos2d的游戏是这样,需要具体分析源码好hook lua,u3D一般hook set_timeScale就可以
PenguinAndy 2019-3-14 15:18
20
0
茅山小僧 有几款cocos2d的游戏是这样,需要具体分析源码好hook lua,u3D一般hook set_timeScale就可以
请教一下,hook set_timeScale是如何实现的?我在IDA中分析libunity.so许久,没有找到set_timeScale函数的实体。查阅网上资料,发现有人说用mono_class_from_name找出set_timeScale函数 和 mono_runtime_invoke实现set_timeScale,但是这里出了个问题,在mono_runtime_invoke中实现mono_class_from_name找出的函数会出现卡住的现象。然后我下载了几个别人实现加速插件功能的,IDA分析了一下,是直接hookset_timeScale实现功能的。望前辈指教一下,谢谢
茅山小僧 2019-3-14 16:49
21
0
PenguinAndy 请教一下,hook set_timeScale是如何实现的?我在IDA中分析libunity.so许久,没有找到set_timeScale函数的实体。查阅网上资料,发现有人说用mono_class_f ...
一般都是直接hook so里面的set_timeScale,有些so里面做了处理函数符号不导出,这就需要你自己把它找出来,根据函数特征之类的,这个需要一定功夫,你可以找个set_timeScale 符号导出的so看一下函数特征和上下文调用,按特征在你需要hook的so里找
PenguinAndy 2019-3-14 17:01
22
0

在IDA中找到的是这个,然后不知道怎么走了。。X的话提示没有地方引用到,G在上面两个
PenguinAndy 2019-3-14 17:04
23
0
在IDA中找到的是上面的两张截图,然后不知道下一步该怎么弄,直接hook这个“set_timeScale”貌似没有效果,主动调用会闪退
PenguinAndy 2019-3-15 15:14
24
0
北方的季风 学习了,请教下有些游戏hook了,只能看到游戏内部时间加快了,战斗和进度条还是正常的,这种是需要hook lua吗
成功找出汇编真实函数的偏移地址,实现了unity3d的加速了,好玩,谢谢“茅山小僧”大大的指点。谢谢。
PenguinAndy 2019-3-15 15:14
25
0
茅山小僧 有几款cocos2d的游戏是这样,需要具体分析源码好hook lua,u3D一般hook set_timeScale就可以
成功找出汇编真实函数的偏移地址,实现了unity3d的加速了,好玩,谢谢“茅山小僧”大大的指点。谢谢。
BetKnowledge 2019-3-27 11:05
26
0
PenguinAndy 成功找出汇编真实函数的偏移地址,实现了unity3d的加速了,好玩,谢谢“茅山小僧”大大的指点。谢谢。
我想问一下怎么找出的汇编真实函数的地址哇
BetKnowledge 2019-4-2 17:29
27
0
茅山小僧 一般都是直接hook so里面的set_timeScale,有些so里面做了处理函数符号不导出,这就需要你自己把它找出来,根据函数特征之类的,这个需要一定功夫,你可以找个set_timeScale 符 ...
函数特征怎么找呢。。。最近在做u3d加速 在so里面找到的很多偏移方法都hook无效 好像没有调用
游客
登录 | 注册 方可回帖
返回