本帖最后由 正己 于 2021-4-16 18:45 编辑
前言:
这个游戏确实是蛮有意思的,勾起了我曾经想写小说的梦想。
由于不能直接发成品,所以我就放软件区了。
成品看这里:点我跳转
准备:
1.小说家模拟器1.1.8
2.IDA
3.IL2cppdumper
4.MT管理器
过程:
一、dump出cs文件
1.看lib文件夹内有il2cpp文件,于是祭出神器il2cppdumper,下载地址
2.下载成功后,双击Il2CppDumper.exe,先选择so,然后选择dat文件(在这之前记得把这两个文件从游戏安装包里提取出来)
二、IDA分析
1.首先把我们的so拖进ida,然后左上角加载脚本,并选择好我们刚才dump的script.json(方便我们分析函数)。
2.等待ida加载,这时打开我们dump好的dump.cs文件,搜索get_money,并复制RVA地址0x347B5C
// RVA: 0x347B5C Offset: 0x347B5C VA: 0x347B5C
public static long get_Money() { }
// RVA: 0x347BE8 Offset: 0x347BE8 VA: 0x347BE8
public static void set_Money(long value) { }
3.回到IDA,按G键跳转地址,如果这时IDA还没加载到这里,可以按下C键让它提前显示出来,然后我们直接采用暴力赋值法,Ctrl+Alt+k进行修改(同时需要提醒一下,因为我们改了大量金币,这个游戏不知道怎么判断的,房东阿姨那里会说我们破产了,没关系,点免租七天就可以一直玩下去了,只不过是要每天交房租)
MOV R0, #0xFFFFFFF
BX LR
4.接着回到dump.cs文件中,搜索reward,定位到这个函数中,很明显这是和广告相关的函数,其中的HandleReward是关键函数,同样复制RVA地址(这一步操作完之后需要断网玩才能获得奖励)
public class ADController : MonoBehaviour // TypeDefIndex: 3847
{ //广告控制
// Fields
public static ADController Instance; // 0x0
public string RewardType; // 0xC
private bool IsRewardVideoAvailable; // 0x10
public bool handleReward; // 0x11
// Methods
// RVA: 0x67BBB0 Offset: 0x67BBB0 VA: 0x67BBB0
private void Start() { }
// RVA: 0x67BC28 Offset: 0x67BC28 VA: 0x67BC28
public void InitSDK() { }
// RVA: 0x67BCA0 Offset: 0x67BCA0 VA: 0x67BCA0
private void Update() { }
// RVA: 0x67C518 Offset: 0x67C518 VA: 0x67C518
public void ShowBannerAD() { }
// RVA: 0x67C54C Offset: 0x67C54C VA: 0x67C54C
public void HideBannerAD() { }
// RVA: 0x67C580 Offset: 0x67C580 VA: 0x67C580
public void DestroyBannerAD() { }
// RVA: 0x67C5B4 Offset: 0x67C5B4 VA: 0x67C5B4
public void UserOptToWatchAd(string RewardType) { }
// RVA: 0x67BD2C Offset: 0x67BD2C VA: 0x67BD2C
public void HandleReward(string paramHolder) { } //这个是关键函数,意思是处理奖励
// RVA: 0x67D5BC Offset: 0x67D5BC VA: 0x67D5BC
private void increaseRewardCountByOne() { }
// RVA: 0x67D64C Offset: 0x67D64C VA: 0x67D64C
private void StopRewardVideoForAWhile() { }
// RVA: 0x67D7A0 Offset: 0x67D7A0 VA: 0x67D7A0
private bool CheckIfRewardAvailable() { }
// RVA: 0x67C608 Offset: 0x67C608 VA: 0x67C608
public bool UseItemToFreeAD() { }
// RVA: 0x67D974 Offset: 0x67D974 VA: 0x67D974
public void .ctor() { }
}
5.打开IDA,跳转地址,从这个函数内容我们不能看出什么,于是点击左上角的函数名,按下X键,查看调用,紧接着它就跳到上面一点点的位置。这这里我们可以发现上方有一个判断,很明显就是判断我们是否有没有观看完广告,因此我们直接把它NOP掉,这样它就会直接执行奖励广告的逻辑
6.再回到dump.cs文件,搜索get_light,复制RVA地址
// RVA: 0x3757C0 Offset: 0x3757C0 VA: 0x3757C0
public static int get_Light() { }
// RVA: 0x37B8B0 Offset: 0x37B8B0 VA: 0x37B8B0
public static void set_Light(int value) { }
老样子IDA跳转,同样暴力赋值完事
7.至于体力的修改暂时还没找到关键函数,大佬们可以试一试
三、 简单修改方法:
打开MT管理器,找到这个路径:/storage/emulated/0/Android/data/cs.xsjmn2.com/files/NewArchives/
,这个是你的存档文件,其中的JsonPerson.json有你的个人信息,可以直接修改money数量,以及灵感,修改完记得把备份文件删掉。
最后:
最后我们看一下效果:
|