0x00 开工动员大会
这两天《旅行青蛙》好火啊,然后就网上放出了好多关于这个的逆向,一个比一个说的简单,于是本菜鸡就蹭一下热度,就跟着也搞一搞、学一学吧
使用工具:
- dnSpy
- ApkIDE,网上的文章用的都是这个,但是我的这个会报错,我也很无奈
- Apk Killer,不知道什么时候我下载的远古版本,本着有什么用什么的原则,就将就用用了
0x01 肉眼观察法
0x10 先弄一个apk文件
- 先舍近求远地从手机模拟器里搞了一个安装包出来
- 改后缀成zip,解压出来
0x11 从改抽奖开始
将安装包里面的/assets/bin/Data/Managed/Assembly-CSharp.dll
拖进dnSpyctrl+shift+K
搜索程序集,从游戏中为数不多的汉字下手,就是抽奖里奖券不足的时候提示的”足”,选择搜索”数字/字符串”
查看一下PushRollButton1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26public void PushRollButton()
{
if (SuperGameMaster.TicketStock() < 5)
{
ConfilmPanel confilm = this.ConfilmUI.GetComponent<ConfilmPanel>();
confilm.OpenPanel("ふくびき券が足りません");
confilm.ResetOnClick_Screen();
confilm.SetOnClick_Screen(delegate
{
confilm.ClosePanel();
});
return;
}
SuperGameMaster.GetTicket(-5);
SuperGameMaster.set_FlagAdd(Flag.Type.ROLL_NUM, 1);
base.GetComponentInParent<UIMaster>().freezeObject(true);
base.GetComponentInParent<UIMaster>().blockUI(true, new Color(0f, 0f, 0f, 0.3f));
this.LotteryCheck();
this.ResultButton.GetComponent<RollResultButton>().CngImage((int)this.result);
this.ResultButton.GetComponent<RollResultButton>().CngResultText(Define.PrizeBallName[this.result] + "がでました");
this.LotteryWheelPanel.GetComponent<LotteryWheelPanel>().OpenPanel(this.result);
SuperGameMaster.SetTmpRaffleResult((int)this.result);
SuperGameMaster.SaveData();
SuperGameMaster.audioMgr.PlaySE(Define.SEDict["SE_Raffle"]);
this.BackFunc();
}
抽奖的逻辑:先判断奖券数是否不小于5,如果是,则奖券数-5,即进行一次抽奖操作
基本可以从方法名看出TicketStock()
就是获取玩家当前持有的奖券数量,GetTicket(num)
就是对奖券数量进行操作,这里的num=-5,也就是说加减用的是同一个方法
那么这里可以做一个简单的修改,修改奖券数量判断和减奖券数量
1 | if (SuperGameMaster.TicketStock() < 0) |
ctrl+shift+S
保存,覆盖掉原始文件,用apkIDE重新编译一下安装即可
这里有一个问题,我从吾爱破解下载的版本在打开Data文件夹的时候会报错
但是,勤劳勇敢的华夏儿女想到了一个好办法,在”Data”上右键->打开文件夹,于是就解决了问题
0x02 继续搞
基本操作就是上面这样,接下来就看看还能改哪里
0x21 免费抽奖
具体如上,重要函数就是PushRollButton()
1 | public void PushRollButton() |
改两处5和-5即可
0x22 增加三叶草
想找一下修改初始三叶草数量一时没找到,于是就想了个暂时的方法,既然有getTicket()
,那么就应该有getClover()
1 | // Token: 0x06000885 RID: 2181 |
这里可以改成:每次三叶草数量有变化,就增加100
1 | SuperGameMaster.saveData.CloverPoint += num + 100; |
然后话音未落,找到了StartCloverPoint
1 | // Token: 0x04000338 RID: 824 |
简单明了,想改多少改多少
但是在之后的测试里面发现一个问题,当我把值设置成10000时,开局却没有效果了,一会儿再试试看
0x23 抽奖概率
StartCloverPoint这一块附近有很多有趣的常数
1 | // Token: 0x0400036A RID: 874 |
这一块定义了抽奖时的概率
可以直接把White设置成0,这样就再也不会中不了奖了
0x24 其他一些常数
不一定有用,但是就这么标记一下先csharp