正己 发表于 2021-4-16 16:39

小说家模拟器2之il2cpp.so修改教程

本帖最后由 正己 于 2021-4-16 18:45 编辑

# 前言:

这个游戏确实是蛮有意思的,勾起了我曾经想写小说的梦想。
由于不能直接发成品,所以我就放软件区了。
成品看这里:[点我跳转](https://www.52pojie.cn/thread-1419670-1-1.html)
***
# 准备:

1.小说家模拟器1.1.8

2.IDA

3.IL2cppdumper

4.MT管理器
***
# 过程:
## 一、dump出cs文件

1.看lib文件夹内有il2cpp文件,于是祭出神器il2cppdumper,[下载地址](https://github.com/Perfare/Il2CppDumper/releases/tag/v6.5.3)
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数量,以及灵感,修改完记得把备份文件删掉。

***
# 最后:
最后我们看一下效果:

justFWD 发表于 2021-5-11 16:47

正己 发表于 2021-5-11 15:06
https://github.com/Perfare/Riru-Il2CppDumper

大神啊
除了加密,这个游戏还有签名校验,如果用自己的签名去重签新版本的游戏,就会闪退。这个有办法解决吗?

正己 发表于 2021-5-11 17:30

justFWD 发表于 2021-5-11 16:47
大神啊
除了加密,这个游戏还有签名校验,如果用自己的签名去重签新版本的游戏,就会闪退。这个有办法解 ...

简单方法就是核心破解,难点就是看日志去干so

正己 发表于 2021-4-16 16:43

等会发成品

zhangxu888 发表于 2021-4-16 16:45

感谢分享!!!看看学习学习!{:1_927:}

wxbb979 发表于 2021-4-16 16:45

前来学习

FireYe. 发表于 2021-4-16 16:52

厉害厉害,期待成品,授人以鱼又授人以渔,可以。

吾爱泼姐 发表于 2021-4-16 16:54

大佬啥时候发些私家视频教程呗,我这理解能力太弱{:1_906:}

正己 发表于 2021-4-16 16:58

吾爱泼姐 发表于 2021-4-16 16:54
大佬啥时候发些私家视频教程呗,我这理解能力太弱

视频可比写帖子麻烦多了,以后有机会在试试

芽衣 发表于 2021-4-16 17:19

老样子IDA跳转,同样暴力赋值完事{:17_1088:}

正己 发表于 2021-4-16 17:29

芽衣 发表于 2021-4-16 17:19
老样子IDA跳转,同样暴力赋值完事

都是芽衣大佬教的好{:301_1003:}

丨夜愿丨 发表于 2021-4-16 18:09

nb呀 学到了
页: [1] 2 3 4 5 6
查看完整版本: 小说家模拟器2之il2cpp.so修改教程