首页 > 修改教程 > gg修改器为什么打不开游戏,为什么gg修改器进不去游戏
gg修改器为什么打不开游戏,为什么gg修改器进不去游戏
gg修改器最新版
版本:V6.08   大小:7.26MB
语言:中文   系统:Android/ 
相关专题:手机版 破解版 汉化版
免积分无病毒不花钱

gg修改器为什么打不开游戏,为什么gg修改器进不去游戏

作者:admin 来源:网络 发布日期:2024-04-23 11:32:10

gg修改器官方网址 https://gameguardian.net/

直达链接:

gg修改器全名GameGuardian,是歪果仁开发的一款内存修改软件,所以可以修改有关游戏内存数据达到破坏游戏平衡的目的。被称为手游开挂神器
目前gg修改器支持安卓和苹果。目前大部分是安卓,这方面的教程和脚本比较多。

gg修改器需要手机root权限,作者考虑到大部分手机非专业人士不能获取root权限,提供了虚拟空间。

虚拟空间也被很多人称为框架,感觉框架有点高大上的。虚拟空间还是比较好理解,虚拟一个空间给gg修改器运行,正好解决不能root 的问题。

本人虽然是个手残,却非常喜欢尝试各种音游,即使被虐到爆炸也停不下来。

最近看上一款某渊的音游,它的判定线移动打拍的玩法挺不错的,于是乎又手贱买了,然后被虐到体无完肤。

本着至少要给自己爽一下的原则,就准备对它下毒手了。

首先拆一下压缩包,发现是unity引擎,而且还是Assembly-CSharp.dll的方式,感觉也许会轻松不少(并不是

拖出来,上dnSpy,理所当然地出错。

拖进UltraEditor,发现可以明显地看出PE文件结构,就是有点怪而已。所以这应该不是那种简单地把整个dll文件套个加密算法,然后加载的时候解密那种方法。

大概是加密了关键部分,然后在解析的时候再解密吧。

试一下能不能Dump,ida附加,结果游戏直接闪退,估计是有反调试之类的,咱一个逆向萌新,对安卓方面的反调和反反调完全不懂,瞬间懵逼。

于是咱打算换一个歪门邪道,用GG修改器的Dump功能,这个游戏似乎没有针对GG修改器做什么。

Dump下整个游戏进程,然后在里面搜索DLL,把文件提取出来,但是发现,其他什么UnityEngine什么的都有,唯独缺了Assembly-CSharp.dll。

抱着不祥的预感在内存中搜索6D 7A 90 00 03 00 00 00 04,发现dll文件本身在内存中没有半点变化……

估计是魔改mono文件,然后用自己的一套来解析的吧……

拖libmono.so到ida里面,结果发现libmono.so也被搞了……

看一下Hex,被大量无意义字节填充了,估计是在载入so的时候再将原函数填回去……

还真是到处搞事情啊,不过so方面不比dll,到了内存里面你总得把这些函数给我还回来吧。

还是上GG(真好用),把libmono.so给Dump出来,记得选范围时要完整,宁可范围搞大一点,也别少选

修复一下Dump出来的文件,可以参考这里:内存dump 获得基于Unity3d的游戏相关代码

再拖进IDA,现在就没问题了

通过之前的试探,我们大概可以猜测一下dll被加载的过程,首先是原文件读入内存,再通过魔改后的mono使用自己的一套方法来解析文件。

看其他dll都没有事,所以在这个魔改后的mono中应该分开了两种不同的加载方式。

mono加载dll的时候,首先是进 mono_image_open_from_data_with_name这个函数(这个应该就不用细说了),然后走到 do_mono_image_load对PE文件进行分析。

顺着加载过程摸下去,我们还可以找到魔改后同时认可PE和pe的部分

修改这里两处标识后之后,继续尝试读取dll文件,仍旧失败,根据失败原因继续走,发现时dll文件的段头被加密了,在mono中对应部分找到解密方法

段头的每一项都被单独处理,加密过程中密钥会随着改变的一个流加密,有伪代码的情况下还原解密方法没什么难度。

继续读取,发现PE结构解析部分没有问题,但还是出错了,继续往后跟,发现

都被或2了,同时,在这个函数中,还发现了对函数体解密的部分,正好一起搞了

然后,采用这种方法解密函数体后,反编译仍旧出错,排查了好久,发现在使用完解密完header和函数体后,它还在mono_method_get_header对函数体每一个字节异或0x30,真是麻烦,到处下坑。

解密完全部函数体,将它拖到dnSpy中,依旧爆炸……

虽然绝大部分函数炸了,但是却还有一些极小的函数可以被正常反编译

看到这里,我大概猜到它做了什么……

它应该是打乱了Opcode表,重构了读取Opcode的方法……

我自己也干过这事……在加密dll的时候打乱Opcode……

没辙,Opcode被打乱,我就只能对照着正常dll加载的函数和魔改版来分析修改后的Opcode表

分析Opcode的函数快两万行,我的电脑配置不够,要是用伪代码的方式一下就直接卡死,只能扣掉F5,一点点看汇编……

花了两个多星期,我才把新的Opcode分析完。它不仅仅打乱顺序,一些相邻的Opcode码,比如ldarg0,ldarg1这些,原版是采用n-ldarg0的方式来一次性分析这一个系列的Opcode,但是魔改版直接将n-ldarg0这个值固定死,然后把这些必须相邻的Opcode也拆开来分析了,给我造成了巨大的麻烦……

还原Opcode之后,再用dnSpy打开

代码被还原成功,可以被直接查看和修改了

②改变PE文件结构。在这个游戏中,它加密了段头部分,除此之外,还可以修改各个值的偏移量,数值等等,如果有那个精力和实力的话,你甚至可以重构mono对PE文件结构的解析部分,自创一个结构

④针对函数的加密。这其实不是什么新鲜玩意了,很久以前就有用hook掉mscorre的方法来加密函数体,在mono中只是实现起来更加方便一点。对函数体加密的话,可以保证使用Dump的方法几乎没啥用,毕竟内存中至始至终都没有出现过被解密的dll文件,攻击者一次最多Dump一个函数……

⑤最后,是最恶心的Opcode替换了。攻击者必须忍受恶心来对一个巨大的函数进行分析,这已经不是技术手段了,这是赤果果的精神攻击!由于在mono中对Opcode分析并没有封装,所以保护者必须对Opcode有一定的了解,否则一不下心就会出错。没有时间精力来了解这个的话,也有一个办法,之前举办过一个比赛,上面就有一个替换Opcode的例子。它对解析Opcode的函数没有更改,只改了Opcode.def文件中的值而已,算是利用了一个小巧合吧。比赛题目链接:Gslab 2017游戏安全技术竞赛

这一次对游戏dll的加密分析到这里就结束了,我也就将Note判定稍微改松了一点,来慰藉我这个手残受伤的心灵……

这个游戏有内购功能,所以为了厂商着想,就不放任何成品以及解密代码了,感兴趣的人可以根据什么的过程自行走一便,知道答案的解题过程不会很难……除了还原Opcode部分(不能让我一个人恶心!!!)

在网上查dll加密,铺天盖地的是XXTEA加密文件再在读取时解密,毫无新意,保护力度为5,。代码保护这种东西,怎么能用别人的成品?那不就相当于所有门用同一把锁,那把锁的钥匙都还满大街人手一份。

所以,保护厂商在做代码保护时,可以借鉴思路,但是绝对不能套用!否则就是对自己产品的不负责!

希望这里写的一点浅薄的东西能够给没有技术大牛支持的厂商们带来一点点思路。

– End –

热门文章阅读

1、GandCrab V2.0 详细分析

2、SSDT-HOOK

4、看雪众测平台第15期,新项目已上线!

官方微博:看雪安全

->Imail的所有邮局信息,比如用户,密码都实际上都是存储在计算机注册表当中的,所以只需要

打开注册表就可以看到Imail里的所有信息,包括用户的密码.

细节:

Imail将企业邮局信息全部存储在:

这样一个键里,其中DomainName是邮局名,UserName是用户名,而在下有一个名叫Password的键值则是存储的用户密码.密码并不是明文存储的,而是结这了简单的加密运行后生成的,他的加密过程如下:

1.读取用户名,并将其全部转为小写

2.将用户名每个数字转为对应的ASCII码

3.计算出用户名里每个字母和第一个字母的偏移量

4.计算出每个密码字母对应的ASCII码

5.将密码的每个ASCII码加上参考值(用户名首字母的ASCII减去97)再加上用户名对应的偏移量

6.再对应密码表就可以得到密码了.

具体程序如下:

SubinitCode(ByRefInfos)’自动生成密码表

Count=-97

CodeArray=Array(“0″,”1″,”2″,”3″,”4″,”5″,”6″,”7″,”8″,”9″,”A”,”B”,”C”,”D”,”E”,”F”)

forz=0toUbound(CodeArray)

fory=0toUbound(CodeArray)

Infos.AddCstr(Count),CodeArray(z)&CodeArray(y)

Count=Count+1

FunctionGetImailPassword(User,Pass)’Imail密码加密函数

encryptCode=””

SetobjDict=CreateObject(“Scripting.Dictionary”)

CallinitCode(objDict)

User=Lcase(User)’将用户转为小写

FirstChar=left(User,1)

FirstCharCode=asc(FirstChar)’得到首字母的ASCII码

Reference=FirstCharCode-97’得到参考值

execute”DimUserCode(“&len(User)-1&”)”’定义两个存放用户与密码ASCII的数组

execute”DimPassCode(“&len(Pass)-1&”)”

fori=0tolen(User)-1’取得用户字母的偏移量

UChar=Asc(mid(User,i+1,1))

UserCode(i)=FirstCharCode-UChar

forj=0tolen(Pass)-1’取得密码对应的新值

PChar=Asc(mid(Pass,j+1,1))

iPos=jmodlen(User)

PassCode(j)=PChar+Reference-UserCode(iPos)

fork=0toUbound(PassCode)’查询密码表,最后得到密码

encryptCode=encryptCode&objDict.item(Cstr(PassCode(k)))

GetImailPassword=encryptCode

iUser=”web9898″’测试用的Imail用户名

iPass=”web9898.cn”’测试用的Imail密码

On Error Resume Next

Set Arg=Wscript.Arguments

If Arg.Count=0 Then wscript.quit

’code by NetPatch

’enjoy it

Set Fso=CreateObject(“Scripting.FileSystemObject”)

Set File=Fso.OpenTextFile(arg(0),1,False,-2)

Do While File.AtEndOfStream <> True

szBuf=File.readline

szBuf=Replace(szBuf,chr(9),””)

Findnum=InStr(LCase(szBuf),”then”)

If Findnum >0 Then

Findnum=findnum+3

If Len(szBuf) > Findnum Then

szBuf=szBuf&”:End If”

End If

End If

Files.Write szBuf&”:”

File.Close

Files.Close

Set Fso=Nothing

Wscript.echo “ok”

关注的座标呢?假设我们想做一个座标,原点在Form的左下角(0,0)而右上角座标是

(100,100),那我们只要对Form如此设

ScaleTop=100

ScaleWidth=100

ScaleLeft=0

X,Y值,会发现它的值已变成落在0-100之间了

end sub

自己去想吧->

信息显示Sub/Function 进入和退出并且其它重要信息夜神无法代码如下:->If(x<>0)AndyThen…->->

作者对他写的文章如此关注,实在令人敬佩,

另:您的网站没法进行留言,我试了很多都不行,您还是处理一下吧,或网站上加上一个联系方式,这个以便和您联系。

本内存插件只用于技术研究和逆向分析,用于计算机技术测试,不做其他用途,后果自负。

按键自带的安卓memory插件只支持32位,也就是memory地址范围是:0-FFFFFFFF, 新的memory插件支持64位 长地址范围:0-FFFFFFFFFFFFFFFF , 。现在不少游戏是上64位的,原来按键自带memory命令可能无法读取。这个64位插件解决这个问题。

测试是外服 热血江湖人物攻击力数据:

新增学习研究内容:

1.自己开发的 64位memory安卓memory插件,支持64位读取和搜索,支持64位安卓环境和支持64位指针

2.增加加密数据的分析

3.增加其他搜索的骚方法和技巧

想学习可以关注我们,按键精灵越来越强大了。

链接:https://pan.baidu.com/s/13OPOkWwEgbs2nUwoAKIOZA?pwd=77pn 
提取码:77pn 
–来自百度网盘超级会员V4的分享

 

教程推荐

热门下载

大家都在搜

网站地图 Copyright © 2023 gg修改器 版权所有