/ArkNightsForMinor

明日方舟防沉迷破解

Primary LanguageC++

ArkN青春版

这就当个备份吧

未成年时的挣扎233333333,现在没这破事了

如何延续这个项目

awsl

需要以下工具

整合包 :https://wwa.lanzous.com/ipJr2lbre0d

准备工作:

1-11可参考 BV1Ui4y1V7Pi

  • 在模拟器中安装 GameGuardian(安装后名为Game) 打开并授予ROOT权限
  • 这里模拟器选择是会影响结果的(参考工具时的说明)
  • 点击 GameGuardian 右下角的开始
  • 打开ArkN
  • 点击左上角的 GameGuardian 图标,再点击左上角的应用图标,并选择ArkN(最大的那个)
  • 点击右上角从关闭图标开始的倒数第三个图标,再点击倒数第二个图标,下翻,找到导出内存
  • 点击 “从:0000000” 右边的倒三角,下翻,找到末尾为 libil2cpp.so 的地址,记录开始的地址
  • 下翻,找到 libil2cpp.so 最后一次出现的地址,记录结束的地址
  • 路径选择模拟器的共享文件夹,保存
  • 找到ArkN安装包,右键打开方式为解压软件打开
  • 找到压缩包下 assets/bin/Data/Managed/Metadata/global-metadata.dat ,并复制出来
  • 打开 Il2CppDumper ,选择导出的bin文件和 global-metadata.dat ,并输入刚才记录下了的 libil2cpp.so 的开始地址,等待工具反编译
  • 打开 dump.cs (最好用记事本,vs之内的会卡死的) 按下 ctrl+f 进行搜索

HGSDK.PingManager.<FirstPing>c__AnonStorey1 <_DoPeriodicPing>m__0

  • 找到类似于下面的内容
private sealed class HGSDK.PingManager.<FirstPing>c__AnonStorey1 // TypeDefIndex: 14827
{
                   // Fields
                   internal Action onSuc; // 0x8
                   internal Action onFail; // 0xC
                   internal HGSDK.PingManager $this; // 0x10
                   // Methods
                   // RVA: 0x36A18CF Offset: 0x36A18CF VA: 0x9A9288CF
                   public void .ctor() { }
                   // RVA: 0x36A2800 Offset: 0x36A2800 VA: 0x9A929800
                   internal void <>m__0(PingResponse response) { }
                   // RVA: 0x36A296C Offset: 0x36A296C VA: 0x9A92996C
                   internal void <>m__1(ResponseError error) { }

}
// RVA: 0x36A2326 Offset: 0x36A2326 VA: 0x9A929326
private void <_DoPeriodicPing>m__0(PingResponse response) { }
  • 记录m__0的 offset,例如这里是 0x36A2800 和0x36A2326 (x86和armeabi-v7a下地址是不一样的)

  • 编辑 MengLuwa/ArkNightsForMinor 的 hook.cpp 中getRealOffset参数
    这里的原理和上一项目是一样的,只不过作手脚的地方改了。

MSHookFunction((void *) getRealOffset(0x36A2800), // x86:0x36A2800 arm:0x395ADF0
                   (void *) HGSDK_HGSDK_PingManager__FirstPing_c__AnonStorey1____m__0,
                   (void **) &old_HGSDK_HGSDK_PingManager__FirstPing_c__AnonStorey1____m__0);
MSHookFunction((void *) getRealOffset(0x36A2326),  // x86:0x36A2326 arm:0x395A814
                   (void *) HGSDK_HGSDK_PingManager____DoPeriodicPing_m__0,
                   (void **) &old_HGSDK_HGSDK_PingManager____DoPeriodicPing_m__0);
void *HGSDK_HGSDK_PingManager____DoPeriodicPing_m__0(void *_this, void *response){
                   unsigned char *p =(unsigned char *)response;
                   *(int *)(p+0x8)=0;
                   *(int *)(p+0xC)=5400; //抓包后发现一直无意义的ping,这里改一下ping间隙。
                   return old_HGSDK_HGSDK_PingManager____DoPeriodicPing_m__0(_this,response);
}
void *HGSDK_HGSDK_PingManager__FirstPing_c__AnonStorey1____m__0(void *_this, void *response){
                   unsigned char *p =(unsigned char *)response;
                   *(int *)(p+0x8)=0;
                   *(int *)(p+0xC)=5400; //抓包后发现一直无意义的ping,这里改一下ping间隙。
                   return old_HGSDK_HGSDK_PingManager__FirstPing_c__AnonStorey1____m__0(_this,response);
}
  • 保存 hook.cpp

编译:

  • 解压 Android-Hooking-Template 和 android-ndk-r16b

  • 修改 Android-Hooking-Template 下 compile.bat 的第一行,“ndk-build”前修改为解压后android-ndk-r16b的目录

  • 将刚才保存的 hook.cpp 和 hook.h 复制到 Android-Hooking-Template 下的 jni 文件夹中

  • 运行 Android-Hooking-Template 下的 compile.bat 并等待编译

  • 打开 APK Easy Tool 在 APK/Decompiled folder 右第一个按钮下选择ArkN最新安装包

  • 点击下方的 Decompile ,之后同目录下会生成一些文件夹(1-Decompiled APKs)。

  • 为了避免于原版冲突,修改以下文件
    AndroidManifest.xml 第一行 package="com.hypergryph.arknights" 改为自己喜欢的名字(全小写字母)
    res\values-zh\strings.xml 中 <string name="app_name">ArkN</string>改为自己喜欢的名字

  • 将刚刚生成的 Android-Hooking-master\libs 中的 libhook.so 复制到1-Decompiled APKs 对应的lib文件夹下去(这里要区分armeabi-v7a和x86框架) 或许你在两种模拟器中都重复上面操作一次~~(我全都要~~,将对应的 libhook.so 复制到 lib 文件夹

  • 在反编译文件夹中 smali\com 下新建一个文件夹,名为 loadLib ,将刚刚生成的 Android-Hooking-master\Smali Files 中的 smali 文件复制到 smali\comloadLib 中

  • 打开反编译文件夹中 smali\com\unity3d\player\UnityPlayerActivity ,ctrl+f 找到 onCreate 并加入一句 invoke-static {}, Lcom/loadLib/libLoader;->loadLib()V ,之后保存

.method protected onCreate(Landroid/os/Bundle;)V

        .locals 1

        invoke-static {}, Lcom/loadLib/libLoader;->loadLib()V

        const/4 v0, 0x1

        invoke-virtual {p0, v0}, Lcom/unity3d/player/UnityPlayerActivity;->requestWindowFeature(I)Z

        ........
  • 再次打开 APK Easy Tool 在 APK/Decompiled folder 右第二个按钮下选择1-Decompiled APKs(反编译文件夹)
  • 点击下方Compile,完成