不过人家做游戏也不容易
所以大家能支持的还是支持下
所以本篇仅供交流,成品请到博客里找
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
由于写的是复现过程,所以可能会比较啰嗦,请谅解
准备
AndroidKiller(或别的用的来的拆包打包工具)
dnspy(Unity制作,需要解IL)
jadx(看dex用)
手机或安卓模拟器(方便调试)
修改权限
[ol]
6c78bd3723464f80addfe3370360cd17.png (39.28 KB, 下载次数: 0)
下载附件
2021-7-15 15:57 上传
删除方法:先点击工程管理器,在结构的最后几项里有个叫AndroidManifest.xml的文件,双击编辑。找uses-permission元素,属性名为那些粉色的条目,将其删除即可
7b30df1c6f3f44bab5805264e614a73c.png (25.23 KB, 下载次数: 0)
下载附件
权限提示
2021-7-15 15:57 上传
740825b61a4e430c99b1e4fc56561dab.png (22.22 KB, 下载次数: 0)
下载附件
工程信息
2021-7-15 15:58 上传
[/ol]
去广告
[ol]
用AndroidKiller打开,如果解包解到一半卡住了就直接退了重进即可,源码可以直接使用jadx查看
东西还不少,可以把不是开罗的Activity都删掉,如果不放心可以删完之后去模拟器上测测
e867a6425e14456f89576a4587525a0a.png (55.53 KB, 下载次数: 0)
下载附件
Activities
2021-7-15 15:58 上传
具体操作方法可以先点击工程管理器,在结构的最后几项里有个叫AndroidManifest.xml的文件,双击编辑。然后找里面的Activity元素,看他的android:name属性,属性值里没有kairogame的都可以删除。(如果要删除的Activity里有子元素也得删除)
其他的Receiver和Service也都可以删除,方法和删Activity一样(非必要)
这是删完多余Activity和Receiver和Service后的样子(还有权限)
349c6558c32d4086ab0a0a222386eddc.png (36.45 KB, 下载次数: 0)
下载附件
删后
2021-7-15 15:58 上传
可以测试一下,发现进入游戏之后下面的框没有消失,看来有可能在Unity里控制
打开dnspy,用他打开Unity库(位置在程序根目录\projects\包名\Project\assets\bin\Data\Managed)
可以看到有个库叫kairo.unity.ad,有可能是控制广告用的,打开看看,里面有个GetAdHeight函数
bb4ce436ab114e80a38be30143b98b6e.png (8.52 KB, 下载次数: 0)
下载附件
GetAdHeight
2021-7-15 15:58 上传
指向了GameDefines.GetAdHeight函数,我们追踪进去看看
69576edc6e014cc18d74bde21235596a.png (8.36 KB, 下载次数: 0)
下载附件
GameDefines.GetAdHeight
2021-7-15 15:59 上传
这里又指向了一个叫做ADMOBHEIGHT的静态变量,其内容为Screen.height / 12,即为屏幕的1/12,可以看到这个函数的上面有个叫ADMOB_ENABLE的变量,其值为true,有可能是控制广告开关的地方。
18b29aac937e4902aacc99cbb0e8d570.png (8.77 KB, 下载次数: 0)
下载附件
AdFlag
2021-7-15 15:59 上传
我们这里把ADMOB_ENABLE改成false,操作方法如下:
对ADMOB_ENABLE右键,选择编辑方法,在修改代码窗口中找到GameDefines.ADMOB_ENABLE = true;,将其改为GameDefines.ADMOB_ENABLE = false;,点击右下角的编译,回到主窗口,点击左上角的文件,选择保存模块,再点击确定即可
回到AndroidKiller,编译看一下下面的广告栏有没有消失
OK解决
[/ol]
修改金币
[ol]
575b1e717eb7434a8a580729a59b6ed3.png (130.18 KB, 下载次数: 0)
下载附件
初始金币
2021-7-15 15:59 上传
回到dnspy,先点击我们的Assembly-CSharp模块(点不点都可以),然后点击编辑->搜索程序集(Ctrl+Shift+K),输入20000,搜索类型选择最下面的数字\字符串,搜索范围选择所有文件
c83b0c4cca1b4cc9aa109b8f7c436ec5.png (29.27 KB, 下载次数: 0)
下载附件
搜索20000
2021-7-15 15:59 上传
可以看到第一项是game.Player类的构造函数,我们双击点进去看看
ddc0aad1a38f41728cdb473372984725.png (20.35 KB, 下载次数: 0)
下载附件
Player.ctor
2021-7-15 16:00 上传
大概率来说,这个20000就是初始金钱了
[/ol]
修改初始金币
[ol]
108549422bf946c2b970f910329d1038.png (101.58 KB, 下载次数: 0)
下载附件
999999
2021-7-15 16:00 上传
[/ol]
减变加
[ol]
7529403e7f2541808f7c2b2a99da3d25.png (18.51 KB, 下载次数: 0)
下载附件
money
2021-7-15 16:00 上传
可以看出第一条大概率是用钱或加钱的时候使用的函数
第二条应该是读存档的时候用的函数
第三条就是我们刚刚的新存档的函数
d87edc9155854275917f4e6f37dd475e.png (22.5 KB, 下载次数: 0)
下载附件
game.Player.AddMoney
2021-7-15 16:00 上传
可以看到前半段是算钱的,后半段大概率是算成就之类还有反作弊之类的(防内存修改。吧)所以我们还是老套路,把这个val的值绝对值一下即可
7f48d0d017f24429ab2ab4e5d78992f0.png (219.61 KB, 下载次数: 0)
下载附件
用钱
2021-7-15 16:01 上传
这里我用钱反而钱变多了,OK
[/ol]
修改代币
[ol]
bdb6c9526d7d44aeb7a46b755fa17847.png (26.06 KB, 下载次数: 0)
下载附件
接收奖励
2021-7-15 16:01 上传
我们去dnspy搜索这个接收奖励,先点击我们的Assembly-CSharp模块(点不点都可以),然后点击编辑->搜索程序集(Ctrl+Shift+K),输入接收奖励,搜索类型选择最下面的数字\字符串,搜索范围选择所有文件
454128b2eaa94f25951b7f11bb1d391e.png (22.58 KB, 下载次数: 0)
下载附件
搜索接收奖励
2021-7-15 16:02 上传
可以看出这个ProExShop比较像一点,我们点击进入这个函数
09b477bf311d4ea48796eb40cd618e62.png (34.69 KB, 下载次数: 0)
下载附件
ProExShop
2021-7-15 16:02 上传
伪代码:
[/ol]
if(玩家数据中没有Key的名称为Skitime){
if(玩家没联网){
提示("检查网络状态");
}else{
玩家数据.设置Key为Skitime的项,值为当前时间;
显示广告;
提示("正在接收奖励");
给奖励();
}
}else{
上次记录的时间=玩家数据中的Skitime的值;
差值=上次记录的时间-现在时间;
if(差值
我们需要做的事:把差值的阈值改小,修改给奖励的地方
4. 右键,编辑方法,将if (timeSpan.TotalSeconds 处的300改小即可,改成1啊2啊啥的都行,编译,OK
5. 双击need1back(),进入函数,可以看出这里做了一个概率系统,阶梯型的给代币,这里我们在概率系统执行完之后将我们想要的值赋给num2就可以替换掉概率系统,而达到每次看视频都是一样的效果了
6. 右键,编辑方法,在概率系统结束后的第一行,也就是MyFormBase.apdat_.sysSave_.ints[59]++;的前一行加上num2 = 想要的数;即可,例:
53ff71570a7c4123b42d50a0afc293f8.png (17.25 KB, 下载次数: 0)
下载附件
歪罗点修改
2021-7-15 16:02 上传
这样每次就会给我加500点了,点击编译,点文件->保存模块->确定,即可
7. 回到AndroidKiller,编译看一下点查看广告后还有没有cd,有没有一次给500
d647860d83a64840a75836c35552e8eb.png (101.94 KB, 下载次数: 0)
下载附件
1000
2021-7-15 16:02 上传
OK,两秒1000发
原软件下载地址
百度云盘
链接:https://pan.baidu.com/s/14rTJWx9Pt62g9GLT4O3u-g
提取码:690d