libil2cpp.so改了半天最后不是卡死就是闪退,我很郁闷
本帖最后由 ysysj2009 于 2025-8-19 11:13 编辑我在修改一个Unity单机游戏,其在启动时会检测网络是否能连接到服务器(单机游戏还要联网,犹如沟槽的网易我的世界一样),连接得到就进入游戏,连接不到就重连,由于其服务器已关停,所以我计划修改其libil2cpp.so文件来绕过联网界面进入游戏。
在dump.cs中得知其关键函数为
public static NetworkReachability get_internetReachability() { }地址在0x13AB694
和
// Namespace: UnityEngine
public enum NetworkReachability // TypeDefIndex: 3168
{
// Fields
public int value__; // 0x0
public const NetworkReachability NotReachable = 0;
public const NetworkReachability ReachableViaCarrierDataNetwork = 1;
public const NetworkReachability ReachableViaLocalAreaNetwork = 2;
}
看了一下大概原理应该是返回0就进不去,返回1和2就能进去,然后我就想着到IDA中修改指令让他直接返回2
然后到IDA中打开libil2cpp.so跳转到0x13AB694把指令改成
MOV W0, #2
RET(后面全用NOP覆盖)
然后替换apk中的libil2cpp.so文件安装启动后便出现的题目中提到的问题,在adb logcat输出的崩溃日志中注意到崩溃的线程是"UnityMain",
并且错误原因是"null pointer dereference"
在崩溃的堆栈回溯中,看到:
#00 pc 0000000000ae04b4/data/app/~~CjvAdQyihbhMJU1vzOqHJQ==/com.cmplay.rollingdream-OxXUZBiwnKrXTPRw1VNYtw==/lib/arm64/libunity.so#01 pc 0000000000ae18c8/data/app/~~CjvAdQyihbhMJU1vzOqHJQ==/com.cmplay.rollingdream-OxXUZBiwnKrXTPRw1VNYtw==/lib/arm64/libunity.so...#06 pc 0000000000965a80/data/app/~~CjvAdQyihbhMJU1vzOqHJQ==/com.cmplay.rollingdream-OxXUZBiwnKrXTPRw1VNYtw==/lib/arm64/libil2cpp.so#07 pc 00000000011532a8/data/app/~~CjvAdQyihbhMJU1vzOqHJQ==/com.cmplay.rollingdream-OxXUZBiwnKrXTPRw1VNYtw==/lib/arm64/libil2cpp.so
崩溃发生在libunity.so和libil2cpp.so中,错误是空指针解引用。特别是堆栈回溯中#06和#07指向libil2cpp.so,说明修改可能间接导致了空指针问题。
所以我换了个思路,尝试用gg修改器写个脚本使在联网过程中直接返回2,但是失败了。再试试动态hook搜索偏移后的地址然后再改值"~A8 MOV W0, #2"、"~A8 RET"之后软件同样卡死
然后我又换了个思路用Packet Capture抓取软件行为,然后本地伪造服务器响应,发现在联网界面软件的行为一直是"TCP ecs-121-37-228-14.compute.hwclouds-dns.com"ai告诉我这是华为云服务器,然后我去dump.cs找相关的代码,一直找不到
应该是函数不对 有没有大佬帮忙找一下这个网络验证的函数{:1_908:}
APK下载在此,dump.cs和IDA扫描好的libil2cpp.so.i64可自选下载
https://www.123865.com/s/9ai9jv-mGCL3?提取码:52pj
抓包是这个域名打不开https://mjapi.bitqueen.jp,通过字符串反查定位是class NetWorkManager类,在Assembly-CSharp下面,大概就这样 APK下载在此dump.cs和IDA扫描好的libil2cpp.so.i64可自选下载
https://www.123865.com/s/9ai9jv-mGCL3?提取码:52pj 支持楼主的作品,分析详细! 只需要改前面的2句代码,后面不用nop的。
另外感觉是你这个改法不对,你这是32位的改法,64位的arm代码不一样的 zepp7289 发表于 2025-7-1 22:18
抓包是这个域名打不开https://mjapi.bitqueen.jp,通过字符串反查定位是class NetWorkManager类,在Assembl ...
可是 这软件不是mono打包的 是用li2cpp打包的 我并没有找到assembly-csharp.dll
页:
[1]