vrolife / mypower

GNU General Public License v3.0
52 stars 25 forks source link

dump一半游戏进程自己闪退 #4

Open duckpc opened 5 months ago

duckpc commented 5 months ago

首先感谢老大,我编译成功了用的ndk22可以成功编译。

其次、我dump某荣耀应该也是unity3d我看有libil2cpp.so文件,dump一般被系统检测自动退出,但是也生成了文件。

再次我用rwProcMem33 的驱动 dump了所有的内存。

疑问一、 { "begin": 519207059456, "end": 519218814976, "prot": 0, "shared": false, "file": "/data/app/com.tencent.tmgp.sgame-XNBVWa9d8DGDl5zEqy8auQ==/lib/arm64/libil2cpp.so", "desc": "", "offset": 0, "major": 252, "minor": 2, "inode": 903229, "deleted": false, "saved_size": 0, "saved_offset": 1710317568 }, 这里的意思是 dump成功了吗?我看saved_size 显示是0,dump出来的文件也很大。

疑问二、如何过没有成功我感觉是由于process_vm_readv这个函数导致的被反作弊 发现以后闪退了,我想更改他 用rwProcMem33 的驱动读写,但是找不到 openProcess函数。感觉像是通过读取文件实现的。

vrolife commented 5 months ago

直接读的话确实会被反作弊系统检测到, 解决办法是kill -STOP pid把目标进程暂停掉再读, 读后直接杀掉进程, 或者用一些能避免检测的驱动读写, 例如我写的这个https://github.com/vrolife/kagent里面的vmrw驱动, 这个很难用,不建议.

duckpc commented 5 months ago

老大,我通过kill -STOP pid dump出来了,但是还是有很多的fail。 下面是我dump的内容 { "begin": 549338611712, "end": 549346996224, "prot": 3, "shared": false, "file": "", "desc": "[stack]", "offset": 0, "major": 0, "minor": 0, "inode": 0, "deleted": false, "saved_size": 8384512, "saved_offset": 5962137600 } ], "memory_size": 6035472384, "memory_file": "dump.memory", "pid": 10119 } 文件大小5.55G 这算dump成功吗?然后我执行脚本跑着跑着报 内存错误,我电脑是8G内存,是不是我内存太小了,用了30%跑到80%的时候我看内有有个4G左右就报错了,报错内容如下

Traceback (most recent call last): File "D:\qiling\mytest\qiling-il2cpp-dump-main\dump.py", line 146, in load_memory(ql.uc) File "D:\qiling\mytest\qiling-il2cpp-dump-main\dump.py", line 65, in load_memory mem = memory_data.read(region["saved_size"]) MemoryError 是我电脑内存太小的问题吗?

vrolife commented 5 months ago

dump有些条目失败是正常的, 因为一些是显存,dump不了. 另外你的电脑内存太小了, 除了内存要大, 如果要跑指针引用路径, cpu也要给力才行.

duckpc commented 5 months ago

Load 1775/10281 79d6a95000-79d6ab2000 118784 /system/fonts/NotoSansMyanmar-Medium.otf Traceback (most recent call last): File "E:\aaaaaaaaaaaaaa\qiling-il2cpp-dump-main\dump.py", line 146, in load_memory(ql.uc) File "E:\aaaaaaaaaaaaaa\qiling-il2cpp-dump-main\dump.py", line 66, in load_memory mu.mem_write(region["begin"], mem) File "C:\Users\xtkck\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\unicorn\unicorn.py", line 586, in mem_write raise UcError(status) unicorn.unicorn.UcError: Invalid argument (UC_ERR_ARG)

老大我换了一台16G内存的电脑 内存没跑满 就报这个 感觉是不是dump的文件的问题啊? Load 1775/10281 79d6a95000-79d6ab2000 118784 /system/fonts/NotoSansMyanmar-Medium.otf

的json内容如下:

    {
        "begin": 523292463104,
        "end": 523292581888,
        "prot": 1,
        "shared": true,
        "file": "/system/fonts/NotoSansMyanmar-Medium.otf",
        "desc": "",
        "offset": 0,
        "major": 252,
        "minor": 0,
        "inode": 1710,
        "deleted": false,
        "saved_size": 118784,
        "saved_offset": 3758510080
    },
   我看了一下这一块跟别的json也没有什么区别啊,能不能把这快删除或者参数修改一下呢?
vrolife commented 5 months ago

可能是unicorn版本的问题, 我这边是unicorn 2.0.1 qiling 1.4.5 python 3.10

duckpc commented 5 months ago

还是报相同的错误,我先下载了qiling1.4.5然后安装了 之后再 pip install unicorn==2.0.1 python 版本是Python 3.10.11。 还是报相同的错误,内存用了60% 以下是报错内容。 Load 1773/10281 79d6a75000-79d6a7a000 20480 /system/lib64/libmediandk.so Load 1774/10281 79d6a7a000-79d6a95000 110592 /system/fonts/NotoSansMyanmar-Bold.otf Load 1775/10281 79d6a95000-79d6ab2000 118784 /system/fonts/NotoSansMyanmar-Medium.otf Traceback (most recent call last): File "E:\aaaaaaaaaaaaaa\qiling-il2cpp-dump-main\dump.py", line 146, in load_memory(ql.uc) File "E:\aaaaaaaaaaaaaa\qiling-il2cpp-dump-main\dump.py", line 66, in load_memory mu.mem_write(region["begin"], mem) File "C:\Users\xtkck\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\unicorn\unicorn.py", line 586, in mem_write raise UcError(status) unicorn.unicorn.UcError: Invalid argument (UC_ERR_ARG)

老是读取到/system/fonts/NotoSansMyanmar-Medium.otf 就报参数错误。我打印了region["begin"]与 mem参数是有数据的。 愁死我了。

vrolife commented 5 months ago

这里只是单纯的写内存, 除了爆内存, 不应该抛别的错误了. 你给系统多开点虚拟内存试试看.

duckpc commented 5 months ago

老大,我改了一下脚本 如果报错就继续执行,可以运行到最后但是运行到ql.run(end=END_ADDRESS)那句代码就直接退出了 然后我又修改 如下: ////////////////////////////////////////////////////////////////// if region["desc"] == "[anon:cfi shadow]": continue else: mem = memory_data.read(region["saved_size"]) mu.mem_write(region["begin"], mem) del mem

        print(f"Load {idx}/{len(memory_info['regions'])} {region['begin']:x}-{region['end']:x} {size} {region['file']} {region['desc']}")
        idx += 1

//////////////////////////////////////////////////////////////////

就是当写入[anon:cfi shadow] 时就不写入内存,同样执行到ql.run(end=END_ADDRESS) 程序就退出了,是我编译的dump.elf文件的问题吗?

以下是执行结果: ////////////////////////////////////////////////////////////////// Load 1175/3855 7a5c8fe000-7a5c908000 40960 malloc 0x7880401344 free 0x78804012c4 calloc 0x7880401240 dlsym 0x7a5a581040 //////////////////////////////////////////////////////////////////

符号地址都找到了 然后就退出了,没有生成dump.cs文件。 我的dump.elf文件是通过两个ndk生成的,我修改了config.mk 如下:

////////////////////////////////////////////////////////////////// ANDROID_NDK_HOME=/mnt/d/ndk/ndk22 ANDROID_NDK_HOME2=/mnt/d/ndk/ndk25 TOOLCHAIN=$(ANDROID_NDK_HOME)/toolchains/llvm/prebuilt/linux-x86_64

TOOLCHAIN2=$(ANDROID_NDK_HOME2)/toolchains/llvm/prebuilt/linux-x86_64 CC=$(TOOLCHAIN)/bin/aarch64-linux-android21-clang CXX=$(TOOLCHAIN)/bin/aarch64-linux-android21-clang++ LD=$(TOOLCHAIN)/bin/ld.lld OBJOCPY=$(TOOLCHAIN)/bin/llvm-objcopy CFLAGS=-fPIC -nostdinc -Isysroot/include LDFLAGS=-L$(TOOLCHAIN2)/sysroot/usr/lib/aarch64-linux-android $(TOOLCHAIN2)/sysroot/usr/lib/aarch64-linux-android/libc++abi.a $(TOOLCHAIN2)/sysroot/usr/lib/aarch64-linux-android/libc++_static.a $(TOOLCHAIN2)/lib64/clang/14.0.6/lib/linux/aarch64/libunwind.a RT=$(TOOLCHAIN2)/lib64/clang/14.0.6/lib/linux/libclang_rt.builtins-aarch64-android.a LIBC=sysroot/lib/libc.a

%%.o: %.c $(CC) $(CFLAGS) -c -o $@ $^

%%.o: %.cpp $(CXX) $(CFLAGS) -fexception -c -o $@ $^ //////////////////////////////////////////////////////////////////

因为用到了ndk25的库文件,但是我ndk25 在我的环境下不能用就用的这种办法,编译是通过了,有没有可能编译过了 这个库文件不兼容啊, 如何测试生成的elf文件是正常的呢?

vrolife commented 5 months ago

应该是你的python环境不兼容的原因, 感觉你提供的信息, 还没跑到dump.elf部分呢