当前位置:首页>安卓APP>安卓逆向 -- 某度加固检测部分分析

安卓逆向 -- 某度加固检测部分分析

  • 2026-03-27 13:16:27
安卓逆向 -- 某度加固检测部分分析

样本libbaiduprotect.so

脱壳与修复

解密操作在initarray的前2个函数,第二个函数存在一些反调试且被混淆了,但是简单动调就能明白只是做了一些解密操作

选择合适时机 直接内存dump出data段和text段的解密数据然后写入原来的so即可简单脱壳

 复制代码 隐藏代码import osimport structfrom elftools.elf.elffile import ELFFile# --- 配置参数 ---SOURCE_ELF_PATH = r"dump2_libbaiduprotect.so"TARGET_ELF_PATH = r"libbaiduprotect.so"PATCH_VA_START = 0xc6f4# 源ELF中要读取数据的起始VAPATCH_VA_END = 0x88ce4# 源ELF中要读取数据的结束VA (不包含)TARGET_VA_START = 0xc6f4# 目标ELF中要写入数据的起始VA# 计算补丁数据的大小PATCH_SIZE = PATCH_VA_END - PATCH_VA_START# 假设目标VA范围大小与源VA范围大小相同# TARGET_VA_END = TARGET_VA_START + PATCH_SIZE ## ------------------------------------------defva_to_fa(elf_path: str, va: int) -> int:"""    根据ELF文件的Program Headers (Segments) 将虚拟地址 (VA) 转换为文件偏移 (FA)。    """withopen(elf_path, 'rb'as f:        elf_file = ELFFile(f)# 遍历所有 Program Headers (Segment)for segment in elf_file.iter_segments():# 检查 Segment 类型是否为 LOADableif segment['p_type'] == 'PT_LOAD':                seg_va_start = segment['p_vaddr']                seg_va_end = seg_va_start + segment['p_memsz']# 检查 VA 是否落在当前 Segment 的 VA 范围内if seg_va_start <= va < seg_va_end:# 计算 VA 在 Segment 中的偏移                    offset_in_segment = va - seg_va_start# 计算对应的文件偏移 FA                    file_offset = segment['p_offset'] + offset_in_segment# 确保 FA 不超过 Segment 的文件大小 (p_filesz)if offset_in_segment < segment['p_filesz']:return file_offsetelse:# VA 落在 Segment 的 BSS (未初始化数据) 区域,# 在文件中没有对应数据,不能读取/写入。raise ValueError(f"VA {hex(va)} falls into BSS/uninitialized part of segment in {elf_path}. Cannot patch."                        )# 遍历完所有 Segment 都没有找到对应的 VAraise ValueError(f"VA {hex(va)} not found in any loadable segment of {elf_path}.")defpatch_elf(source_path: str, target_path: str, src_va: int, tgt_va: int, size: int):"""    执行实际的ELF文件补丁操作。    """print(f"--- 🚀 开始补丁操作 ---")print(f"源 ELF: {source_path}")print(f"目标 ELF: {target_path}")print(f"源 VA 范围: {hex(src_va)} - {hex(src_va + size)}")print(f"目标 VA 范围: {hex(tgt_va)} - {hex(tgt_va + size)}")print(f"补丁大小: {size} 字节")try:# 1. 计算源 ELF 的文件偏移 (FA)        src_fa_start = va_to_fa(source_path, src_va)        src_fa_end = va_to_fa(source_path, src_va + size - 1# 检查结束地址# 为了保证转换正确,检查计算的 FA 范围是否合理if src_fa_end != src_fa_start + size - 1:raise ValueError("Source VA range conversion resulted in non-contiguous FA range. Check ELF structure.")# 2. 计算目标 ELF 的文件偏移 (FA)        tgt_fa_start = va_to_fa(target_path, tgt_va)        tgt_fa_end = va_to_fa(target_path, tgt_va + size - 1)# 为了保证转换正确,检查计算的 FA 范围是否合理if tgt_fa_end != tgt_fa_start + size - 1:raise ValueError("Target VA range conversion resulted in non-contiguous FA range. Check ELF structure.")except ValueError as e:print(f"❌ 地址转换失败: {e}")returnprint(f"✅ 地址转换成功:")print(f"源 FA 范围: {hex(src_fa_start)} - {hex(src_fa_start + size)}")print(f"目标 FA 范围: {hex(tgt_fa_start)} - {hex(tgt_fa_start + size)}")# 3. 从源 ELF 读取数据    patch_data = b''try:withopen(source_path, 'rb'as f_src:            f_src.seek(src_fa_start)            patch_data = f_src.read(size)iflen(patch_data) != size:raise IOError(f"Failed to read {size} bytes from source FA {hex(src_fa_start)}. Read {len(patch_data)} bytes.")except Exception as e:print(f"❌ 读取源文件失败: {e}")return# 4. 将数据写入目标 ELFtry:# 'r+b' 模式用于读写,但不会截断文件withopen(target_path, 'r+b'as f_tgt:            f_tgt.seek(tgt_fa_start)            f_tgt.write(patch_data)except Exception as e:print(f"❌ 写入目标文件失败: {e}")returnprint(f"✨ 补丁成功!{size} 字节的数据已从源VA {hex(src_va)} 拷贝到目标VA {hex(tgt_va)}。")print(f"请检查文件 {target_path}。")if __name__ == '__main__':    patch_elf(        SOURCE_ELF_PATH,        TARGET_ELF_PATH,        PATCH_VA_START,        TARGET_VA_START,        PATCH_SIZE    )

字符串解密

存在很多不同的字符串解密函数,hook几个看了看,要写一个IDA脚本批量解密方便静态分析

 复制代码 隐藏代码2025-11-01 02:29:58.3209182-9182HOOKpid-9182I  [BaiduProtect::0xa4390]flush cache:start:0xb23c0end:0xba7382025-11-01 02:29:58.3809182-9182HOOKpid-9182I  [BaiduProtect::0xad3e0]flush cache:start:0xc6f4end:0x88ce42025-11-01 02:29:58.3889182-9182HOOKpid-9182I  [dec2_23A3C::0xa8e0]:FeatureLibcProtection2025-11-01 02:29:58.3889182-9273HOOKpid-9182I  [dec3_203FC::0x52e8c]:/proc/%d/cmdline2025-11-01 02:29:58.3889182-9182HOOKpid-9182I  [dec1_2015c::0xab8c]:unknown2025-11-01 02:29:58.3889182-9182HOOKpid-9182I  [dec1_2015c::0xacd8]:bdp.2025-11-01 02:29:58.3889182-9182HOOKpid-9182I  [dec5_2023C::0xacf4]:stamp-cert-sha2562025-11-01 02:29:58.3889182-9182HOOKpid-9182I  [dec1_2015c::0xada0]:FeatureMetaData2025-11-01 02:29:58.3889182-9182HOOKpid-9182I  [dec4_2031C::0xaff8]:FeatLogProtection2025-11-01 02:29:58.3889182-9182HOOKpid-9182I  [dec1_2015c::0xb4b4]:/sbin/.magisk/2025-11-01 02:29:58.3889182-9182HOOKpid-9182I  [dec5_2023C::0xb4d0]:/sbin/.core/mirror2025-11-01 02:29:58.3889182-9182HOOKpid-9182I  [dec4_2031C::0xb4e0]:/sbin/.core/img2025-11-01 02:29:58.3889182-9182HOOKpid-9182I  [dec3_203FC::0xb4f0]:/sbin/.core/db-0/magisk.db2025-11-01 02:29:58.3889182-9182HOOKpid-9182I  [dec6_204DC::0xb500]:/dev/.magisk.unblock2025-11-01 02:29:58.3889182-9182HOOKpid-9182I  [dec7_205BC::0xb51c]:/sbin/magiskinit2025-11-01 02:29:58.3889182-9182HOOKpid-9182I  [dec8_2069C::0xb52c]:/sbin/magisk2025-11-01 02:29:58.3889182-9182HOOKpid-9182I  [dec9_2077C::0xb53c]:/sbin/.magisk2025-11-01 02:29:58.3889182-9182HOOKpid-9182I  [dec1_2015c::0xb8b4]:ro.build.version.release2025-11-01 02:29:58.3889182-9182HOOKpid-9182I  [dec5_2023C::0xb8c8]:ro.build.version.incremental2025-11-01 02:29:58.3889182-9182HOOKpid-9182I  [dec4_2031C::0xb8dc]:ro.build.version.codename2025-11-01 02:29:58.3889182-9182HOOKpid-9182I  [dec3_203FC::0xb8f0]:ro.build.version.sdk2025-11-01 02:29:58.3889182-9182HOOKpid-9182I  [dec6_204DC::0xb904]:ro.product.model2025-11-01 02:29:58.3889182-9182HOOKpid-9182I  [dec7_205BC::0xb918]:ro.product.manufacturer2025-11-01 02:29:58.3899182-9182HOOKpid-9182I  [dec8_2069C::0xb92c]:ro.product.board2025-11-01 02:29:58.3899182-9182HOOKpid-9182I  [dec9_2077C::0xb940]:ro.product.brand2025-11-01 02:29:58.3899182-9182HOOKpid-9182I  [dec1_2015c::0xbad0]:FeatCheckRoot2025-11-01 02:29:58.3899182-9182HOOKpid-9182I  [dec1_2015c::0xbb70]:/etc/mumu-configs/device-prop-configs/mumu.config2025-11-01 02:29:58.3899182-9182HOOKpid-9182I  [dec5_2023C::0xbb8c]:/data/local/cfg-gdaeg2025-11-01 02:29:58.3899182-9182HOOKpid-9182I  [dec4_2031C::0xbb9c]:/data/local/cfg-yzi2025-11-01 02:29:58.3899182-9182HOOKpid-9182I  [dec3_203FC::0xbbac]:/data/local/cfg-hzg2025-11-01 02:29:58.3899182-9182HOOKpid-9182I  [dec6_204DC::0xbbbc]:/data/local/cfg-znz2025-11-01 02:29:58.3899182-9182HOOKpid-9182I  [dec7_205BC::0xbbcc]:/data/local/cfg-ndi2025-11-01 02:29:58.3899182-9182HOOKpid-9182I  [dec8_2069C::0xbbdc]:/data/local/cfg-zhz2025-11-01 02:29:58.3899182-9182HOOKpid-9182I  [dec9_2077C::0xbbec]:/mnt/windows/BstSharedFolder2025-11-01 02:29:58.3899182-9182HOOKpid-9182I  [dec6_204DC::0xbd78]:FeatCheckPmsHook2025-11-01 02:29:58.3899182-9182HOOKpid-9182I  [dec6_204DC::0xbe14]:FeatureMemoryChecker2025-11-01 02:29:58.3899182-9182HOOKpid-9182I  [dec3_203FC::0xbf44]:FeatureNativeAntiDebug2025-11-01 02:29:58.3899182-9182HOOKpid-9182I  [dec9_2077C::0xbfe4]:FeatureJavaAntiDebug2025-11-01 02:29:58.3899182-9182HOOKpid-9182I  [dec1_2015c::0xc080]:FeatureAntiMthook2025-11-01 02:29:58.3899182-9182HOOKpid-9182I  [dec1_2015c::0xc198]:b0f957fc8d26239fe1d7d0fd0851ef3dcf86b8c22025-11-01 02:29:58.3899182-9182HOOKpid-9182I  [dec1_2015c::0xc3b4]:FeatureSharedPrefEncryption2025-11-01 02:29:58.3899182-9182HOOKpid-9182I  [dec5_2023C::0xc414]:FeatureFileEncryption2025-11-01 02:29:58.3899182-9182HOOKpid-9182I  [dec4_2031C::0xc46c]:FeatureSQLiteEncryption2025-11-01 02:29:58.3899182-9182HOOKpid-9182I  [dec1_2015c::0xc4f0]:<?xml2025-11-01 02:29:58.3939182-9182HOOKpid-9182I  [dec1_2015c::0x16728]:_exit2025-11-01 02:29:58.3939182-9182HOOKpid-9182I  [dec5_2023C::0x16748]:exit2025-11-01 02:29:58.3939182-9182HOOKpid-9182I  [dec4_2031C::0x16768]:pthread_create2025-11-01 02:29:58.3939182-9182HOOKpid-9182I  [dec3_203FC::0x16788]:pthread_join2025-11-01 02:29:58.3939182-9182HOOKpid-9182I  [dec6_204DC::0x167a8]:memcpy2025-11-01 02:29:58.3939182-9182HOOKpid-9182I  [dec7_205BC::0x167c8]:malloc2025-11-01 02:29:58.3939182-9182HOOKpid-9182I  [dec8_2069C::0x167e8]:calloc2025-11-01 02:29:58.3939182-9182HOOKpid-9182I  [dec9_2077C::0x16808]:memset2025-11-01 02:29:58.3939182-9182HOOKpid-9182I  [dec5_2023C::0x50ddc]:bin/mt/apksignaturekillerplus/HookApplication2025-11-01 02:29:58.3939182-9182HOOKpid-9182I  [dec4_2031C::0x50e48]:libmthook.so2025-11-01 02:29:58.3949182-9280HOOKpid-9182I  [dec1_2015c::0x4fdf4]:gdbserver2025-11-01 02:29:58.3949182-9280HOOKpid-9182I  [dec5_2023C::0x4fe04]:gdb2025-11-01 02:29:58.3949182-9280HOOKpid-9182I  [dec4_2031C::0x4fe14]:android_server2025-11-01 02:29:58.3949182-9182HOOKpid-9182I  [dec7_205BC::0x513e0]:android/app/ActivityThread2025-11-01 02:29:58.3949182-9182HOOKpid-9182I  [dec8_2069C::0x51408]:currentActivityThread2025-11-01 02:29:58.3949182-9182HOOKpid-9182I  [dec9_2077C::0x51418]:()Landroid/app/ActivityThread;2025-11-01 02:29:58.3949182-9182HOOKpid-9182I  [dec5_2023C::0x1440c]:n12025-11-01 02:29:58.3949182-9182HOOKpid-9182I  [dec4_2031C::0x14420]:(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V2025-11-01 02:29:58.3949182-9182HOOKpid-9182I  [dec3_203FC::0x1443c]:n22025-11-01 02:29:58.3949182-9182HOOKpid-9182I  [dec6_204DC::0x14450]:(Landroid/content/Context;)V2025-11-01 02:29:58.3949182-9182HOOKpid-9182I  [dec7_205BC::0x1446c]:n32025-11-01 02:29:58.3949182-9182HOOKpid-9182I  [dec8_2069C::0x14480]:(Landroid/content/Context;)V2025-11-01 02:29:58.3949182-9182HOOKpid-9182I  [dec1_2015c::0x14660]:%s/.bdlock2025-11-01 02:29:58.3959272-9182HOOKpid-9272I  [BaiduProtect::0x53320]flush cache:start:0xae54a01cend:0xae54a03c2025-11-01 02:29:58.3959182-9182HOOKpid-9182I  [dec9_2077C::0x1de7c]:assets/%s.md2025-11-01 02:29:58.3959182-9182HOOKpid-9182I  [dec1_2015c::0x26fa0]:%s/.12025-11-01 02:29:58.3959182-9182HOOKpid-9182I  [dec5_2023C::0x27004]:%s2025-11-01 02:29:58.3959182-9182HOOKpid-9182I  [dec4_2031C::0x27048]:%s/12025-11-01 02:29:58.3959182-9182HOOKpid-9182I  [dec3_203FC::0x2714c]:/%d.jar2025-11-01 02:29:58.3959182-9182HOOKpid-9182I  [dec6_204DC::0x271b4]:/%d.odex2025-11-01 02:29:58.3959182-9182HOOKpid-9182I  [dec3_203FC::0x2714c]:/%d.jar2025-11-01 02:29:58.3959182-9182HOOKpid-9182I  [dec6_204DC::0x271b4]:/%d.odex2025-11-01 02:29:58.3959182-9182HOOKpid-9182I  [dec3_203FC::0x2714c]:/%d.jar2025-11-01 02:29:58.3959182-9182HOOKpid-9182I  [dec6_204DC::0x271b4]:/%d.odex2025-11-01 02:29:58.3959182-9182HOOKpid-9182I  [dec3_203FC::0x2714c]:/%d.jar2025-11-01 02:29:58.3969182-9182HOOKpid-9182I  [dec6_204DC::0x271b4]:/%d.odex2025-11-01 02:29:58.3969182-9182HOOKpid-9182I  [dec3_203FC::0x2714c]:/%d.jar2025-11-01 02:29:58.3969182-9182HOOKpid-9182I  [dec6_204DC::0x271b4]:/%d.odex2025-11-01 02:29:58.3969182-9182HOOKpid-9182I  [dec3_203FC::0x2714c]:/%d.jar2025-11-01 02:29:58.3969182-9182HOOKpid-9182I  [dec6_204DC::0x271b4]:/%d.odex2025-11-01 02:29:58.3969182-9182HOOKpid-9182I  [dec3_203FC::0x2714c]:/%d.jar2025-11-01 02:29:58.3969182-9182HOOKpid-9182I  [dec6_204DC::0x271b4]:/%d.odex2025-11-01 02:29:58.3969182-9182HOOKpid-9182I  [dec3_203FC::0x2714c]:/%d.jar2025-11-01 02:29:58.3969182-9182HOOKpid-9182I  [dec6_204DC::0x271b4]:/%d.odex2025-11-01 02:29:58.3969182-9182HOOKpid-9182I  [dec3_203FC::0x2714c]:/%d.jar2025-11-01 02:29:58.3969182-9182HOOKpid-9182I  [dec6_204DC::0x271b4]:/%d.odex2025-11-01 02:29:58.3969182-9182HOOKpid-9182I  [dec3_203FC::0x2714c]:/%d.jar2025-11-01 02:29:58.3969182-9182HOOKpid-9182I  [dec6_204DC::0x271b4]:/%d.odex2025-11-01 02:29:58.3969182-9182HOOKpid-9182I  [dec3_203FC::0x2714c]:/%d.jar2025-11-01 02:29:58.3969182-9182HOOKpid-9182I  [dec6_204DC::0x271b4]:/%d.odex2025-11-01 02:29:58.3969182-9182HOOKpid-9182I  [dec3_203FC::0x2714c]:/%d.jar2025-11-01 02:29:58.3969182-9182HOOKpid-9182I  [dec6_204DC::0x271b4]:/%d.odex2025-11-01 02:29:58.3969182-9182HOOKpid-9182I  [dec3_203FC::0x2714c]:/%d.jar2025-11-01 02:29:58.3969182-9182HOOKpid-9182I  [dec6_204DC::0x271b4]:/%d.odex2025-11-01 02:29:58.3969182-9182HOOKpid-9182I  [dec3_203FC::0x2714c]:/%d.jar2025-11-01 02:29:58.3969182-9182HOOKpid-9182I  [dec6_204DC::0x271b4]:/%d.odex2025-11-01 02:29:58.3969182-9182HOOKpid-9182I  [dec4_2031C::0x1d8f0]:assets/%s%d.jar2025-11-01 02:29:58.4379182-9182HOOKpid-9182I  [dec4_2031C::0x1d8f0]:assets/%s%d.jar2025-11-01 02:29:58.4749182-9182HOOKpid-9182I  [dec4_2031C::0x1d8f0]:assets/%s%d.jar2025-11-01 02:29:58.5079182-9182HOOKpid-9182I  [dec4_2031C::0x1d8f0]:assets/%s%d.jar2025-11-01 02:29:58.5349182-9182HOOKpid-9182I  [dec4_2031C::0x1d8f0]:assets/%s%d.jar2025-11-01 02:29:58.5949182-9182HOOKcom.mi.car.mobileI  [dec4_2031C::0x1d8f0]:assets/%s%d.jar2025-11-01 02:29:58.6579182-9280HOOKcom.mi.car.mobileI  [dec6_204DC::0x50a04]:android/os/Debug2025-11-01 02:29:58.6579182-9280HOOKcom.mi.car.mobileI  [dec7_205BC::0x50a28]:isDebuggerConnected2025-11-01 02:29:58.6579182-9280HOOKcom.mi.car.mobileI  [dec8_2069C::0x50a38]:()Z2025-11-01 02:29:58.6579182-9280  [Hook]                  com.mi.car.mobileD拦截IsDebuggerConnected!2025-11-01 02:29:58.6639182-9182HOOKcom.mi.car.mobileI  [dec4_2031C::0x1d8f0]:assets/%s%d.jar2025-11-01 02:29:58.7259182-9182HOOKcom.mi.car.mobileI  [dec4_2031C::0x1d8f0]:assets/%s%d.jar2025-11-01 02:29:58.7849182-9182HOOKcom.mi.car.mobileI  [dec4_2031C::0x1d8f0]:assets/%s%d.jar2025-11-01 02:29:58.8309182-9182HOOKcom.mi.car.mobileI  [dec4_2031C::0x1d8f0]:assets/%s%d.jar2025-11-01 02:29:58.8689182-9182HOOKcom.mi.car.mobileI  [dec4_2031C::0x1d8f0]:assets/%s%d.jar2025-11-01 02:29:58.8949182-9182HOOKcom.mi.car.mobileI  [dec4_2031C::0x1d8f0]:assets/%s%d.jar2025-11-01 02:29:58.9079182-9182HOOKcom.mi.car.mobileI  [dec4_2031C::0x1d8f0]:assets/%s%d.jar2025-11-01 02:29:58.9199182-9182HOOKcom.mi.car.mobileI  [dec4_2031C::0x1d8f0]:assets/%s%d.jar2025-11-01 02:29:58.9999182-9539HOOKcom.mi.car.mobileI  [dec8_2069C::0x1dd18]:assets/%s-sec.dex2025-11-01 02:29:59.1529182-9539HOOKcom.mi.car.mobileI  [dec3_203FC::0x50eb0]:/data/data/2025-11-01 02:29:59.1529182-9539HOOKcom.mi.car.mobileI  [dec6_204DC::0x50fc4]:/data/user/02025-11-01 02:29:59.1529182-9539HOOKcom.mi.car.mobileI  [dec1_2015c::0x50cc0]:/proc/self/fd/%d2025-11-01 02:30:00.0249752-9752  [Hook]                  pid-9752D拦截IsDebuggerConnected!2025-11-01 02:30:00.4489752-9910  [Hook]                  com.mi.car.mobileD拦截IsDebuggerConnected!
 复制代码 隐藏代码import idaapiimport idautilsimport idcdefdecrypt(cipher, keybox):# 计算密文长度的一半作为结果缓冲区大小    v4 = len(cipher) // 2    result = [0] * (v4 + 1)  # 预留终止符位置    result[v4] = 0# 终止符ifnot cipher:  # 处理空输入returnbytes(result[:v4])    n0x3A = cipher[0]    n8 = 0    v8_idx = 2# v8 初始指向 cipher + 2    v9_idx = 0# 结果数组索引while n0x3A != 0:# 获取当前处理的两个字符        n0x3A_1 = cipher[v8_idx - 1]# 计算v11if n0x3A >= 0x3A:            v11 = -112else:            v11 = 0# 计算v12if n0x3A_1 >= 0x3A:            v12 = -55else:            v12 = -48# n8循环(0-7)if n8 == 8:            n8 = 0# 计算解密字节并异或        decoded_byte = keybox[n8] ^ (v11 + 16 * n0x3A + v12 + n0x3A_1)# 确保结果为无符号字节        result[v9_idx] = decoded_byte & 0xFF# 更新索引和变量        v9_idx += 1        n0x3A = cipher[v8_idx] if v8_idx < len(cipher) else0        n8 += 1        v8_idx += 2returnbytes(result[:v9_idx])deffind_all_decfunc(start_ea, end_ea):"""    遍历指定地址范围内的数据,查找对这些数据的引用,    return all the decstr function    :param start_ea: 查找范围的起始地址 (inclusive)    :param end_ea: 查找范围的结束地址 (exclusive)    """print(f"--- 正在查找范围 {hex(start_ea)} 到 {hex(end_ea)} 内的数据引用 ---")    decfunc=[]    ea = start_eawhile ea < end_ea:for xref in idautils.XrefsTo(ea):            ref_from_ea = xref.frm            func_ea = idc.get_func_attr(ref_from_ea, idc.FUNCATTR_START)#print(f"Find func addr: {hex(func_ea)}")            decfunc.append(func_ea)            ea +=8#print(hex(ea))print("--- 查找结束 ---")return decfuncdefget_aarch64_first_arg(call_ea):"""    针对 AArch64 架构,获取函数调用时的第一个参数 (X0 寄存器) 的值。    通过向上追溯来查找在 BL 指令前设置 X0 的指令。    :param call_ea: BL (Branch with Link) 指令的地址。    :return: 找到的参数值(数据地址或立即数)的字符串表示,如果失败则返回 None。    """# AArch64 上的第一个参数通常通过 X0 寄存器传递    ARG_REG = "X0"# 从调用指令地址开始,向上追溯    ea = idc.prev_head(call_ea)# 在函数开始前或向上追溯太多指令后停止    func_start = idc.get_func_attr(call_ea, idc.FUNCATTR_START)# 安全地向上追溯一小段距离(例如 10 条指令)    max_lookback = 10for i inrange(max_lookback):if ea == idc.BADADDR or ea < func_start:# 已经到达函数开头或无法继续追溯print(f"[-] 追溯到函数开始或无法继续,未找到 {ARG_REG} 的设置指令。")returnNone# 1. 检查当前指令是否设置了 X0 寄存器# 获取指令助记符 (e.g., ADRL, MOV, LDR)        mnem = idc.print_insn_mnem(ea)# 获取第一个操作数 (通常是目标寄存器)        op_type0 = idc.get_operand_type(ea, 0)        op_text0 = idc.print_operand(ea, 0)  # 获取当前地址汇编操作的操作数,0是第一个操作数,1是第二个操作数,如果超过返回空# 检查指令是否以 ARG_REG (X0) 为目标寄存器if op_type0 == idc.o_reg and op_text0 == ARG_REG:# 找到设置 X0 的指令# 2. 尝试获取该指令设置的值 (通常是第二个操作数)            op_type1 = idc.get_operand_type(ea, 1)# 情况 A: 立即数 (Immediate) 或 直接地址 (ADR/ADRL)if op_type1 == idc.o_imm or op_type1 == idc.o_near:# ADRL/ADR/MOV 等指令将地址或立即数赋给 X0# 对于 ADRL X0, aString,第二个操作数的值是目标地址                arg_value = idc.get_operand_value(ea, 1)                string_content = idc.get_strlit_contents(arg_value, -1, idc.STRTYPE_C)                value_name = idc.get_name(arg_value, idaapi.GN_DEMANGLED)#print(string_content)return string_content# 尝试将该值解析为一个字符串/数据地址# if value_name:#     return f"指令: {hex(ea)} ({idc.generate_disasm_line(ea,0)}) => 数据地址: {hex(arg_value)} ('{value_name}')"# else:#     return f"指令: {hex(ea)} ({idc.generate_disasm_line(ea,0)}) => 立即数/地址: {hex(arg_value)}"# 情况 B: 从内存加载 (LDR)elif mnem == "LDR"and op_type1 == idc.o_displ:# LDR X0, [X19, #0x20]# 更复杂,需要进一步的数据流分析来追踪 X19 或内存的值print(f"指令: {hex(ea)} ({idc.generate_disasm_line(ea,0)}) => 复杂内存加载 (LDR),需要数据流分析")return# 其他复杂情况,如 MOV X0, X1else:print(f"指令: {hex(ea)} ({idc.generate_disasm_line(ea,0)}) => 复杂寄存器/内存操作")return# 移动到前一条指令        ea = idc.prev_head(ea)returnNone# --- 脚本运行设置 ---KEYBOX_START_EA = 0xB3671KEYBOX_END_EA = 0xB3989# 运行函数decfuncs=find_all_decfunc(KEYBOX_START_EA, KEYBOX_END_EA)#print(decfunc)#decfuncs=[131420]for idx,func_start inenumerate(decfuncs):for xref in idautils.XrefsTo(func_start):        ref_from_ea = xref.frm        cipher=get_aarch64_first_arg(ref_from_ea)ifnot cipher:print(f"需要手动解密 : {hex(ref_from_ea)}")continue#print(cipher)        keybox=list(idc.get_bytes(START_EA+idx*8,8))#print(keybox)        plain=decrypt(cipher,keybox)print(f"[{hex(ref_from_ea)}]: {plain}")        idc.set_cmt(ref_from_ea, f"{plain.decode('utf-8', errors='ignore')}"True)#break#print(hex(ref_from_ea))
 复制代码 隐藏代码--- 正在查找范围 0xb3671 到 0xb3989 内的数据引用 ------ 查找结束 ---[0xab88]: b'unknown\x00'[0xacd4]: b'bdp.\x00\x00\x00\x00'[0xad9c]: b'FeatureMetaData'[0xb4b0]: b'/sbin/.magisk/'[0xb8b0]: b'ro.build.version.release'[0xbacc]: b'FeatCheckRoot'[0xbb6c]: b'/etc/mumu-configs/device-prop-configs/mumu.config'[0xc07c]: b'FeatureAntiMthook'[0xc194]: b'b0f957fc8d26239fe1d7d0fd0851ef3dcf86b8c2'[0xc3b0]: b'FeatureSharedPrefEncryption'[0xc4ec]: b'<?xml\x00\x00\x00'[0xcfd4]: b'\x00\x00\x00\x00\x00\x00\x00\x00'[0x11a30]: b'%s %*s %*s %*s %*s %*s'指令: 0x14654 (ADD             X0, X8, #a143b99b32923df@PAGEOFF; "143B99B32923DF5E5223") => 复杂寄存器/内存操作需要手动解密 : 0x1465c   -> b'%s/.bdlock'[0x16724]: b'_exit\x00\x00\x00'[0x1ea4c]: b'\x00\x00\x00\x00\x00\x00\x00\x00'[0x26f9c]: b'%s/.1\x00\x00\x00'[0x2dbb0]: b'/proc/self/maps'指令: 0x34fa4 (ADD             X0, X9, #a5d21d4fc2523c1@PAGEOFF; "5D21D4FC2523C15E582CE9EF3E29C7585C2D98E"...) => 复杂寄存器/内存操作需要手动解密 : 0x34fac libandroid_runtime.so指令: 0x47834 (MOV             X0, X28) => 复杂寄存器/内存操作需要手动解密 : 0x47838  %n%*s%n %n%*s%n %n%*s%n %n%*s%n %d %d[0x47a30]: b' %n%*s%n %n%*s%n %n%*s%n %n%*s%n %d %d'[0x4e450]: b'java/lang/Throwable'指令: 0x4ed4c (ADD             X0, X8, #a5026d2ef242ed7@PAGEOFF; "5026D2EF242ED71E5038C6B20A24C7584721C2E"...) => 复杂寄存器/内存操作需要手动解密 : 0x4ed50 android/app/ActivityThread[0x4f488]: b'/proc/self/mem'[0x4fdf0]: b'gdbserver'[0x50cbc]: b'/proc/self/fd/%d'[0x78364]: b'.db\x00\x00\x00\x00\x00'[0x7c850]: b'/\x00\x00\x00\x00\x00\x00\x00'[0xacf0]: b'stamp-cert-sha256'[0xb4cc]: b'/sbin/.core/mirror'[0xb8c4]: b'ro.build.version.incremental'[0xbb88]: b'/data/local/cfg-gdaeg'[0xc410]: b'FeatureFileEncryption'[0xd044]: b'\x00\x00\x00\x00\x00\x00\x00\x00'[0x11a4c]: b'/proc/self/maps'指令: 0x14404 (MOV             X0, X8) => 复杂寄存器/内存操作需要手动解密 : 0x14408 n1\x00\x00\x00\x00\x00\x00[0x16744]: b'exit\x00\x00\x00\x00'[0x1d864]: b'assets/%s%d.i.dex'[0x27000]: b'%s\x00\x00\x00\x00\x00\x00'[0x2dbc0]: b'r\x00\x00\x00\x00\x00\x00\x00'指令: 0x34fdc (ADD             X0, X8, #a3ee74c063d4b3d@PAGEOFF; "3EE74C063D4B3D0405E741073E66301807E75A1"...) => 复杂寄存器/内存操作需要手动解密 : 0x34fe0  __android_log_buf_write[0x4774c]: b'/proc/mounts'[0x4e474]: b'getStackTrace'指令: 0x4eda8 (ADD             X0, X8, #a12e84c0b325835@PAGEOFF; "12E84C0B325835082CD943093E5C20") => 复杂寄存器/内存操作需要手动解密 : 0x4edac sPackageManager[0x4f4a8]: b'/proc/self/pagemap'[0x4fe00]: b'gdb\x00\x00\x00\x00\x00'[0x50dd8]: b'bin/mt/apksignaturekillerplus/HookApplication'[0x784b0]: b'-journal'[0x79f38]: b'/proc/self/fd/%d'[0x7c9a8]: b'/%s/%s/%s'[0xaff4]: b'FeatLogProtection'[0xb4dc]: b'/sbin/.core/img'[0xb8d8]: b'ro.build.version.codename'[0xbb98]: b'/data/local/cfg-yzi'[0xc468]: b'FeatureSQLiteEncryption'[0xd0b4]: b'\x00\x00\x00\x00\x00\x00\x00\x00'[0x11a5c]: b'r\x00\x00\x00\x00\x00\x00\x00'指令: 0x14418 (MOV             X0, X8) => 复杂寄存器/内存操作需要手动解密 : 0x1441cb'(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V[0x16764]: b'pthread_create'[0x1d8ec]: b'assets/%s%d.jar'[0x27044]: b'%s/1\x00\x00\x00\x00'[0x2a3d0]: b'classes\x00'[0x2dbfc]: b'r--p\x00\x00\x00\x00'[0x4775c]: b'r\x00\x00\x00\x00\x00\x00\x00'[0x4e484]: b'()[Ljava/lang/StackTraceElement;'指令: 0x4edb8 (ADD             X0, X8, #a2b08d38363be3d@PAGEOFF; "2B08D38363BE3D58480AD28965B43A484819D0C"...) => 复杂寄存器/内存操作需要手动解密 : 0x4edbc Landroid/content/pm/IPackageManager;[0x4f50c]: b'/proc/%d/mem'[0x4fe10]: b'android_server'[0x50e44]: b'libmthook.so'[0x78244]: b'libsqlite.so'[0x78728]: b'libsqlite.so'[0x7a060]: b'/shared_prefs/'[0x7cdbc]: b'/proc/self/fd/%d'[0xb4ec]: b'/sbin/.core/db-0/magisk.db'[0xb8ec]: b'ro.build.version.sdk'[0xbba8]: b'/data/local/cfg-hzg'[0xbf40]: b'FeatureNativeAntiDebug'[0xd124]: b'\x00\x00\x00\x00\x00\x00\x00\x00'指令: 0x14434 (MOV             X0, X8) => 复杂寄存器/内存操作需要手动解密 : 0x14438 b'n2\x00\x00\x00\x00\x00\x00'[0x16784]: b'pthread_join'[0x1d974]: b'assets/%s%d.d.jar'[0x1ed80]: b'.\x00\x00\x00\x00\x00\x00\x00'指令: 0x1ef7c (MOV             X0, X22) => 复杂寄存器/内存操作需要手动解密 : 0x1ef80  b'.\x00\x00\x00\x00\x00\x00\x00'[0x27148]: b'/%d.jar\x00'[0x2a3ec]: b'.dex\x00\x00\x00\x00'[0x2dc0c]: b'%s %s %*s %*s %*s %s'[0x478f0]: b'rw\x00\x00\x00\x00\x00\x00'[0x4e4e4]: b'java/lang/StackTraceElement'指令: 0x4ee60 (ADD             X0, X8, #aCe8573fb3fb053_0@PAGEOFF; "CE8573FB3FB053ADC3CB77FF76B057A0D0CB55E"...) => 复杂寄存器/内存操作需要手动解密 : 0x4ee64   java/lang/reflect/Proxy[0x4f540]: b'/proc/%d/pagemap'[0x50eac]: b'/data/data/'[0x52e88]: b'/proc/%d/cmdline'[0x79a20]: b'SQLite\x00\x00'[0x7a15c]: b'.\x00\x00\x00\x00\x00\x00\x00'[0x7cee8]: b'android/os/Environment'[0xb4fc]: b'/dev/.magisk.unblock'[0xb900]: b'ro.product.model'[0xbbb8]: b'/data/local/cfg-znz'[0xbd74]: b'FeatCheckPmsHook'[0xbe10]: b'FeatureMemoryChecker'指令: 0x14448 (MOV             X0, X8) => 复杂寄存器/内存操作需要手动解密 : 0x1444c b'(Landroid/content/Context;)V'[0x167a4]: b'memcpy\x00\x00'[0x1da4c]: b'%s/lib\x00\x00'[0x1ed9c]: b'..\x00\x00\x00\x00\x00\x00'指令: 0x1ef94 (MOV             X0, X23) => 复杂寄存器/内存操作需要手动解密 : 0x1ef98  b'..\x00\x00\x00\x00\x00\x00'指令: 0x271ac (MOV             X0, X28) => 复杂寄存器/内存操作需要手动解密 : 0x271b0 b'/%d.odex'指令: 0x29ae0 (MOV             X0, X24) => 复杂寄存器/内存操作需要手动解密 : 0x29ae4   b'META-INF/'[0x2dc1c]: b'r-xp\x00\x00\x00\x00'[0x47af4]: b'1\x00\x00\x00\x00\x00\x00\x00'[0x4e50c]: b'toString'[0x50a00]: b'android/os/Debug'[0x50fc0]: b'/data/user/0'[0x78260]: b'\x00\x00\x00\x00\x00\x00\x00\x00'[0x7876c]: b'\x00\x00\x00\x00\x00\x00\x00\x00'[0x7a224]: b'.xml\x00\x00\x00\x00'[0x7cf10]: b'getExternalStorageDirectory'[0xb518]: b'/sbin/magiskinit'[0xb914]: b'ro.product.manufacturer'[0xbbc8]: b'/data/local/cfg-ndi'指令: 0x14464 (MOV             X0, X8) => 复杂寄存器/内存操作需要手动解密 : 0x14468 b'n3\x00\x00\x00\x00\x00\x00'[0x167c4]: b'malloc\x00\x00'[0x1dbb0]: b'/.%s/lib'[0x1ee3c]: b'/\x00\x00\x00\x00\x00\x00\x00'指令: 0x1ef5c (MOV             X0, X24) => 复杂寄存器/内存操作需要手动解密 : 0x1ef60 b'/\x00\x00\x00\x00\x00\x00\x00'[0x27530]: b'android/os/Build'[0x29b00]: b'.MF\x00\x00\x00\x00\x00'[0x47b04]: b'0\x00\x00\x00\x00\x00\x00\x00'[0x4e51c]: b'()Ljava/lang/String;'[0x50a24]: b'isDebuggerConnected'[0x513dc]: b'android/app/ActivityThread'[0x7b014]: b'open\x00\x00\x00\x00'[0x7cf20]: b'()Ljava/io/File;'[0xb528]: b'/sbin/magisk'[0xb928]: b'ro.product.board'[0xbbd8]: b'/data/local/cfg-zhz'指令: 0x14478 (MOV             X0, X8) => 复杂寄存器/内存操作需要手动解密 : 0x1447c b'(Landroid/content/Context;)V'[0x167e4]: b'calloc\x00\x00'[0x1dd14]: b'assets/%s-sec.dex'[0x1f0e4]: b'android/os/Build'[0x27554]: b'FINGERPRINT'[0x29b1c]: b'.SF\x00\x00\x00\x00\x00'[0x47b14]: b'1\x00\x00\x00\x00\x00\x00\x00'[0x4e3e0]: b'de/robv/android/xposed/XposedBridge'[0x50a34]: b'()Z\x00\x00\x00\x00\x00'[0x51404]: b'currentActivityThread'[0x7b048]: b'close\x00\x00\x00'[0x7cf68]: b'java/io/File'[0xb538]: b'/sbin/.magisk'[0xb93c]: b'ro.product.brand'[0xbbe8]: b'/mnt/windows/BstSharedFolder'[0xbfe0]: b'FeatureJavaAntiDebug'[0x16804]: b'memset\x00\x00'[0x1de78]: b'assets/%s.md'[0x1f0f4]: b'MODEL\x00\x00\x00'[0x27564]: b'Ljava/lang/String;'[0x29b38]: b'.RSA\x00\x00\x00\x00'[0x47b24]: b'1\x00\x00\x00\x00\x00\x00\x00'指令: 0x4e810 (MOV             X0, X21) => 复杂寄存器/内存操作需要手动解密 : 0x4e814  b'com.lody.virtual'[0x51414]: b'()Landroid/app/ActivityThread;'[0x7b070]: b'read\x00\x00\x00\x00'[0x7cf90]: b'getAbsolutePath'[0xad00]: b'FeatureIntegrityCheck'[0xb548]: b'/data/adb/magisk.img'[0xb950]: b'ro.product.device'[0xbbf8]: b'nemud.player_package'[0x16824]: b'fopen\x00\x00\x00'[0x1dfe0]: b'assets/%s/d0'[0x1f3c4]: b'android/content/pm/Signature'[0x26cdc]: b'%s/.config'[0x26da0]: b'%s/.config'[0x276a8]: b'%s/.config'[0x277a8]: b'%s/.config'[0x278a8]: b'%s/.config'[0x47e28]: b'getprop\x00'[0x4ea0c]: b'de/robv/android/xposed/XposedHelpers'[0x5145c]: b'getApplication'[0x7b098]: b'write\x00\x00\x00'[0x7cfa0]: b'()Ljava/lang/String;'[0xb558]: b'/data/adb/magisk.db'[0xb964]: b'ro.product.name'[0xbc08]: b'microvirt.dlhost'[0x16844]: b'fclose\x00\x00'[0x1e554]: b'/proc/self/maps'[0x1f3e8]: b'android/content/pm/PackageInfo'[0x27960]: b'/.%s/1/%d.jar'[0x47e38]: b'r\x00\x00\x00\x00\x00\x00\x00'[0x4ea64]: b'io.va.exposed64'[0x5146c]: b'()Landroid/app/Application;'[0x7b18c]: b'esp showHookInfo, hooked lib: '[0x7d2b8]: b'/files/\x00'[0xb568]: b'/data/adb/.boot_count'[0xb978]: b'ro.hardware'[0xbc18]: b'microvirt.memu_version'[0x16864]: b'fgets\x00\x00\x00'[0x1e564]: b'r\x00\x00\x00\x00\x00\x00\x00'[0x1f40c]: b'android/content/pm/PackageManager'[0x27a18]: b'/.%s/1/%d.'指令: 0x47ea8 (MOV             X0, X21) => 复杂寄存器/内存操作需要手动解密 : 0x47eac b'[Android/aosp'[0x4ea84]: b'/io.va.exposed64/virtual/'[0x51638]: b'getPackageResourcePath'[0x7b220]: b'[\x00\x00\x00\x00\x00\x00\x00'[0x7d3c0]: b'/databases/'[0xb578]: b'/data/adb/magisk_simple'[0xb98c]: b'ro.product.cpu.abi'[0xbc28]: b'persist.nox.model'[0xbcd8]: b'FeatCheckHook'[0x16884]: b'strtoul\x00'指令: 0x1e5c8 (MOV             X0, X21) => 复杂寄存器/内存操作需要手动解密 : 0x1e5cc  b'libart.so'[0x1f430]: b'android/app/ActivityThread'[0x27a58]: b'.jar\x00\x00\x00\x00'指令: 0x47ec0 (MOV             X0, X22) => 复杂寄存器/内存操作需要手动解密 : 0x47ec4  b'[userdebug]'[0x51648]: b'()Ljava/lang/String;'[0x787b4]: b'open\x00\x00\x00\x00'[0x7b24c]: b' ESP_HOOK_LIBJAVACORE'[0x7d4c0]: b'.db\x00\x00\x00\x00\x00'[0xac38]: b'FeatureProtectEnvironment'[0xb588]: b'/data/adb/magisk'[0xb9a0]: b'ro.product.cpu.abi2'[0x168a4]: b'strtoull'[0x1e65c]: b'libart.so'[0x1f454]: b'android/app/ContextImpl'指令: 0x47ed8 (MOV             X0, X23) => 复杂寄存器/内存操作需要手动解密 : 0x47edc  b'[unlocked]'[0x4d408]: b'sdk\x00\x00\x00\x00\x00'[0x51924]: b'/data/app/'[0x787d8]: b'close\x00\x00\x00'[0x7b274]: b' (\x00\x00\x00\x00\x00\x00'[0x7d744]: b'/shared_prefs/'[0xb598]: b'/cache/.disable_magisk'[0xb9b4]: b'ro.build.display.id'[0x168c4]: b'strstr\x00\x00'指令: 0x1e5e0 (MOV             X0, X22) => 复杂寄存器/内存操作需要手动解密 : 0x1e5e4  b'libdvm.so'[0x1f478]: b'getSystemContext'指令: 0x47ef0 (MOV             X0, X24) => 复杂寄存器/内存操作需要手动解密 : 0x47ef4 b'.flash.locked]: [0]'[0x4d41c]: b'google_sdk'[0x519c4]: b'-1/base.apk'[0x787fc]: b'read\x00\x00\x00\x00'[0x7b2a0]: b' JAVACORE_HOOK_OPEN'[0x7d854]: b'.xml\x00\x00\x00\x00'[0xb5a8]: b'/cache/magisk.log'[0xb9c8]: b'ro.build.host'[0x168e4]: b'ptrace\x00\x00'[0x1e6c8]: b'libdvm.so'[0x1f488]: b'()Landroid/app/ContextImpl;'指令: 0x47f08 (MOV             X0, X25) => 复杂寄存器/内存操作需要手动解密 : 0x47f0c[0x4d42c]: b'Andy\x00\x00\x00\x00'[0x51a34]: b'/data/app/'[0x78820]: b'write\x00\x00\x00'[0x7b2cc]: b' JAVACORE_HOOK_CLOSE'[0x7d980]: b'android/os/Environment'[0xb5b8]: b'/init.magisk.rc'[0xb9dc]: b'ro.build.user'[0x16904]: b'mprotect'指令: 0x1e5f8 (MOV             X0, X23) => 复杂寄存器/内存操作需要手动解密 : 0x1e5fc  b'[ro.debuggable]: [1]'[0x1f4b4]: b'currentActivityThread'[0x4817c]: b'0\x00\x00\x00\x00\x00\x00\x00'[0x4d43c]: b'ttVM_Hdragon'[0x51b74]: b'-2/base.apk'[0x78844]: b'pread\x00\x00\x00'[0x7b2f8]: b' JAVACORE_HOOK_READ'[0x7d9a8]: b'getExternalStorageState'[0xb5c8]: b'/data/local/su'[0xb9f0]: b'ro.build.id'[0x16924]: b'strlen\x00\x00'[0x1e734]: b'libvmkid_lemur.so'[0x1f4c4]: b'()Landroid/app/ActivityThread;'[0x48264]: b'which su'[0x4d44c]: b'Droid4X\x00'[0x51d6c]: b'/proc/%d/cmdline'[0x78868]: b'pwrite\x00\x00'[0x7b324]: b' JAVACORE_HOOK_WRITE'[0x7d9b8]: b'()Ljava/lang/String;'[0xb5e4]: b'/data/local/bin/su'[0xba04]: b'ro.build.type'[0x16944]: b'sscanf\x00\x00'指令: 0x1e610 (MOV             X0, X24) => 复杂寄存器/内存操作需要手动解密 : 0x1e614  b'libaoc.so'[0x1f51c]: b'getPackageManager'[0x48274]: b'r\x00\x00\x00\x00\x00\x00\x00'[0x4d45c]: b'nox\x00\x00\x00\x00\x00'[0x51dac]: b'r\x00\x00\x00\x00\x00\x00\x00'[0x7888c]: b'pread64\x00'[0x7b350]: b' JAVACORE_HOOK_READ__CHK'[0x7da20]: b'MEDIA_MOUNTED'[0xb5f4]: b'/data/local/xbin/su'[0xba18]: b'ro.build.tags'[0x16964]: b'free\x00\x00\x00\x00'[0x1e7a0]: b'libaoc.so'[0x1f52c]: b'()Landroid/content/pm/PackageManager;'[0x483a4]: b'/system/app/Superuser.apk'[0x4d46c]: b'sdk_x86\x00'[0x51f0c]: b'getPackageName'[0x788b0]: b'pwrite64'[0x7b37c]: b' JAVACORE_HOOK_WRITE__CHK'[0x7da30]: b'Ljava/lang/String;'[0xb604]: b'/sbin/su'[0xba2c]: b'ro.build.fingerprint'[0x16984]: b'strdup\x00\x00'[0x1f56c]: b'getPackageInfo'[0x48508]: b'/proc/%d/maps'[0x4d47c]: b'sdk_google'[0x51f1c]: b'()Ljava/lang/String;'[0x788d4]: b'mmap\x00\x00\x00\x00'[0x7b3a0]: b' )\x00\x00\x00\x00\x00\x00'[0x7dd9c]: b'/tmp000000001'[0xb614]: b'/system/bin/su'[0xba40]: b'ro.secure'[0x169a4]: b'strcmp\x00\x00'[0x1f57c]: b'(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;'[0x48558]: b'com.saurik.substrate'[0x4d48c]: b'vbox86p\x00'[0x52138]: b'counter\x00'[0x788f8]: b'munmap\x00\x00'[0x7b3cc]: b' ESP_HOOK_LIBNATIVEHELPER'[0x7e0c4]: b'/data/user/1'[0xb624]: b'/system/bin/.ext/su'[0xba54]: b'ro.debuggable'[0x169c4]: b'strcasecmp'[0x1f5dc]: b'signatures'[0x48568]: b'XposedBridge.jar'[0x4d49c]: b'emu64x\x00\x00'[0x52148]: b'I\x00\x00\x00\x00\x00\x00\x00'[0x7891c]: b'fopen\x00\x00\x00'[0x7b3f4]: b' (\x00\x00\x00\x00\x00\x00'[0x7e150]: b'/data/user/2'[0xb634]: b'/system/bin/failsafe/su'[0xba68]: b'sys.initd'[0x169e4]: b'utime\x00\x00\x00'指令: 0x1e284 (MOV             X0, X8) => 复杂寄存器/内存操作需要手动解密 : 0x1e288 b'arm64-v8a'[0x1f5ec]: b'[Landroid/content/pm/Signature;'[0x48578]: b'edxp.jar'[0x4d4ac]: b'android/os/Build'[0x52174]: b'version\x00'[0x7b420]: b' NATIVEHELPER_HOOK_OPEN'[0x7e1dc]: b'/data/user/3'[0xb644]: b'/system/sd/xbin/su'[0xba7c]: b'ro.build.selinux'[0x16a04]: b'mkdir\x00\x00\x00'[0x1f64c]: b'toByteArray'[0x486b4]: b'/data/magisk/resetprop'[0x4d4bc]: b'PRODUCT\x00'[0x52184]: b'Ljava/lang/String;'[0x7b44c]: b' NATIVEHELPER_HOOK_CLOSE'[0x7e270]: b'/data/user/4'[0xb654]: b'/su/xbin/su'[0xba90]: b'service.adb.root'[0x16a24]: b'open\x00\x00\x00\x00'[0x1f660]: b'()[B\x00\x00\x00\x00'指令: 0x48818 (ADD             X0, X9, #a7f4e7065d166ee@PAGEOFF; "7F4E7065D166EEE33C582D6BC63DEFA9204C677"...) => 复杂寄存器/内存操作需要手动解密 : 0x48824  b'/proc/self/attr/prev'[0x4d588]: b'unknown\x00'[0x7b478]: b' NATIVEHELPER_HOOK_READ'[0x7e304]: b'/data/user/5'[0xb664]: b'/su/bin/su'[0x16a44]: b'close\x00\x00\x00'指令: 0x1e464 (MOV             X0, X8) => 复杂寄存器/内存操作需要手动解密 : 0x1e468 b'%s/.%s\x00\x00'[0x1f99c]: b'ro.build.version.sdk'指令: 0x4887c (ADD             X0, X8, #a212ea108c0db10@PAGEOFF; "212EA108C0DB10FC") => 复杂寄存器/内存操作需要手动解密 : 0x48884 b':zygote:'[0x4d59c]: b'Genymotion'[0x7b4a4]: b' NATIVEHELPER_HOOK_WRITE'[0x7e398]: b'/data/user/6'[0xab9c]: b'FeatureGlobalInfo'[0xb674]: b'/magisk/.core/bin/su'[0x16a64]: b'unlink\x00\x00'[0x1f9d0]: b'ro.build.version.preview_sdk'[0x486f0]: b'/proc/self/mounts'[0x4d5ac]: b'Andy\x00\x00\x00\x00'[0x7b4c8]: b' )\x00\x00\x00\x00\x00\x00'[0x7e42c]: b'/data/user/7'[0xb684]: b'/system/usr/we-need-root/su'[0x16a84]: b'stat\x00\x00\x00\x00'[0x1f2b8]: b'%s\x00\x00\x00\x00\x00\x00'[0x1fa84]: b'%s\x00\x00\x00\x00\x00\x00'[0x48700]: b'r\x00\x00\x00\x00\x00\x00\x00'[0x4d5bc]: b'MIT\x00\x00\x00\x00\x00'[0x7b4f4]: b' ESP_HOOK_LIBOPENJDK'[0x7e4c0]: b'/data/user/8'[0xb694]: b'/system/xbin/su'[0x16aa4]: b'time\x00\x00\x00\x00'[0x1f224]: b'Ljava/lang/String;'[0x48934]: b'android/bde/BdeEngineManager'[0x4d5cc]: b'nox\x00\x00\x00\x00\x00'[0x7b51c]: b' (\x00\x00\x00\x00\x00\x00'[0x7e554]: b'/data/user/9'[0xb6a4]: b'/system/etc/init.d/99SuperSUDaemon'[0x16ac4]: b'snprintf'[0x1fb34]: b'I\x00\x00\x00\x00\x00\x00\x00'[0x4d5dc]: b'TiantianVM'[0x7b548]: b' OPENJDK_HOOK_JVM_OPEN'[0x7e5e8]: b'\x00\x00\x00\x00\x00\x00\x00\x00'[0xb6b4]: b'/dev/com.koushikdutta.superuser.daemon'[0x16ae4]: b'strchr\x00\x00'[0x4d5ec]: b'iToolsAVM'[0x7b574]: b' OPENJDK_HOOK_HANDLE_OPEN'[0x7e684]: b'/\x00\x00\x00\x00\x00\x00\x00'[0xb6c4]: b'/system/xbin/daemonsu'[0x16b04]: b'strncmp\x00'[0x1fdec]: b'/proc/self/maps'[0x4d5fc]: b'Netease\x00'[0x7b598]: b' )\x00\x00\x00\x00\x00\x00'[0x7e72c]: b'/files/\x00'[0xb6d4]: b'/system/lib/libxposed_art.so'[0x16b24]: b'pthread_detach'[0x1fe04]: b'/proc/%d/maps'[0x4d60c]: b'android/os/Build'[0x7b5bc]: b' ]\x00\x00\x00\x00\x00\x00'[0x7e750]: b'/data/data'[0xb6f0]: b'/system/lib64/libxposed_art.so'[0x16b44]: b'pthread_self'[0x1fe40]: b'r\x00\x00\x00\x00\x00\x00\x00'[0x4d61c]: b'MANUFACTURER'[0x7b740]: b'open\x00\x00\x00\x00'[0x7f2ac]: b'/\x00\x00\x00\x00\x00\x00\x00'[0xb700]: b'/system/xposed.prop'[0x16b64]: b'opendir\x00'指令: 0x1fe8c (MOV             X0, X22) => 复杂寄存器/内存操作需要手动解密 : 0x1fe90  b'r-xp\x00\x00\x00\x00'[0x4d6e8]: b'generic\x00'[0x7b7a0]: b'close\x00\x00\x00'[0x7f354]: b'/databases/'[0xb710]: b'/cache/recovery/xposed.zip'[0x16b84]: b'readdir\x00'指令: 0x1fea4 (MOV             X0, X23) => 复杂寄存器/内存操作需要手动解密 : 0x1fea8    r--p\x00\x00\x00\x00[0x4d6fc]: b'generic_x86'[0x7b7cc]: b'read\x00\x00\x00\x00'[0x7f388]: b'/data/data'[0xb720]: b'/system/framework/XposedBridge.jar'[0x16ba4]: b'closedir'[0x1ff68]: b'/proc/%d/cmdline'[0x4d70c]: b'Andy\x00\x00\x00\x00'[0x7b7f8]: b'write\x00\x00\x00'[0x7fee4]: b'/\x00\x00\x00\x00\x00\x00\x00'[0xb730]: b'/system/bin/app_process64_xposed'[0x16bc4]: b'mmap\x00\x00\x00\x00'[0x1ff8c]: b'r\x00\x00\x00\x00\x00\x00\x00'[0x4d71c]: b'TTVM\x00\x00\x00\x00'[0x7be70]: b'JVM_Open'[0x7ff8c]: b'/shared_prefs/'[0xb740]: b'/system/bin/app_process32_xposed'[0x16be4]: b'munmap\x00\x00'[0x200e4]: b'/proc/self/fd/%d'[0x4d72c]: b'android/os/Build'[0x7bed4]: b'__read_chk'[0x7ffc0]: b'/data/data'[0xb750]: b'/magisk/xposed/system/lib/libsigchain.so'[0x16c04]: b'lseek\x00\x00\x00'[0x4d73c]: b'BRAND\x00\x00\x00'[0x7bf00]: b'__write_chk'[0x80bb4]: b'/storage/emulated'[0xb760]: b'/magisk/xposed/system/lib/libart.so'[0x16c24]: b'fstat\x00\x00\x00'[0x4d808]: b'generic\x00'[0x7c174]: b'handleOpen'[0x814ec]: b'/mnt/sdcard'[0xb770]: b'/magisk/xposed/system/lib/libart-disassembler.so'[0x16c44]: b'read\x00\x00\x00\x00'[0x4d81c]: b'generic_x86'[0x7c3e8]: b'__read_chk'[0x815bc]: b'/storage/'[0xb780]: b'/magisk/xposed/system/lib/libart-compiler.so'[0x16c64]: b'select\x00\x00'[0x4d82c]: b'Andy\x00\x00\x00\x00'[0x7c414]: b'__write_chk'[0x8168c]: b'/storage/emulated'[0xb790]: b'/system/bin/app_process32_orig'[0x16c84]: b'bsd_signal'[0x4d83c]: b'ttVM_Hdragon'[0x8181c]: b'/mnt/sdcard'[0xb7a0]: b'/system/bin/app_process64_orig'[0x16ca4]: b'fork\x00\x00\x00\x00'[0x4d84c]: b'Droid4X\x00'[0x818ec]: b'/storage/'[0xb7b0]: b'/system/lib/libmemtrack_real.so'[0x16cc4]: b'prctl\x00\x00\x00'[0x4d85c]: b'nox\x00\x00\x00\x00\x00'[0x80b58]: b'/storage/emulated'[0xb7c0]: b'/system/lib64/libmemtrack_real.so'[0x16ce4]: b'setrlimit'[0x4d86c]: b'vbox86p\x00'[0x80cf0]: b'/mnt/sdcard'[0xb7d0]: b'/system/lib/libriru_edxp.so'[0x16d04]: b'getppid\x00'[0x4d87c]: b'generic_x86_64'[0x80dc0]: b'/storage/'[0xb7e0]: b'/system/lib64/libriru_edxp.so'[0x16d24]: b'getpid\x00\x00'[0x4d88c]: b'iToolsAVM'[0x80e90]: b'/storage/emulated'[0xb7f0]: b'/system/lib/libwhale.edxp.so'[0x16d44]: b'waitpid\x00'[0x4d89c]: b'emu64x\x00\x00'[0x80fcc]: b'/mnt/sdcard'[0xb800]: b'/system/lib64/libwhale.edxp.so'[0x16d64]: b'kill\x00\x00\x00\x00'[0x4d8ac]: b'emulator'[0x81094]: b'/storage/'[0xb810]: b'/system/framework/edxp.jar'[0x16d84]: b'flock\x00\x00\x00'[0x4d8bc]: b'android/os/Build'[0x812d4]: b'/storage/sdcard1'[0xb820]: b'/system\x00'[0x16da4]: b'write\x00\x00\x00'[0x4d8cc]: b'DEVICE\x00\x00'[0x81348]: b'/storage/sdcard1'[0xb83c]: b'/system/bin'[0x16dc4]: b'execve\x00\x00'[0x4d998]: b'sdk\x00\x00\x00\x00\x00'[0x81bac]: b'/storage/sdcard1'[0xb84c]: b'/system/sbin'[0x16de4]: b'execv\x00\x00\x00'[0x4d9ac]: b'google_sdk'[0x82158]: b'.lock\x00\x00\x00'[0xb85c]: b'/system/xbin'[0x16e04]: b'execl\x00\x00\x00'[0x4d9bc]: b'Droid4X\x00'[0x82220]: b'.flock\x00\x00'[0xb86c]: b'/vendor/bin'[0x16e24]: b'sysconf\x00'[0x4d9cc]: b'TiantianVM'[0x822e8]: b'.so\x00\x00\x00\x00\x00'[0xb87c]: b'/sbin\x00\x00\x00'[0x16e44]: b'__system_property_get'[0x4d9dc]: b'Andy\x00\x00\x00\x00'[0x823b0]: b'.tmp\x00\x00\x00\x00'[0xb88c]: b'/etc\x00\x00\x00\x00'[0x16e64]: b'ftruncate'[0x4d9ec]: b'Android SDK built for x86_64'[0x82480]: b'.temp\x00\x00\x00'[0x16e84]: b'gettid\x00\x00'[0x4d9fc]: b'Android SDK built for x86'[0x8255c]: b'.luac\x00\x00\x00'[0x16ea4]: b'pread64\x00'[0x4da0c]: b'iToolsAVM'[0x8262c]: b'.lua\x00\x00\x00\x00'[0x16ec4]: b'pwrite64'[0x4da1c]: b'MuMu\x00\x00\x00\x00'[0x826fc]: b'.png\x00\x00\x00\x00'[0x16ee4]: b'pread\x00\x00\x00'[0x4da2c]: b'sdk_gphone64'[0x827cc]: b'.csb\x00\x00\x00\x00'[0x16f04]: b'pwrite\x00\x00'[0x4da3c]: b'android/os/Build'[0x8289c]: b'.ttf\x00\x00\x00\x00'[0x16708]: b'libc.so\x00'[0x4da4c]: b'MODEL\x00\x00\x00'[0x82964]: b'.jpg\x00\x00\x00\x00'[0xa8dc]: b'FeatureLibcProtection'[0x4db18]: b'goldfish'[0x82a2c]: b'.manifest'[0x4db2c]: b'vbox86\x00\x00'[0x82af4]: b'.js\x00\x00\x00\x00\x00'[0x4db3c]: b'nox\x00\x00\x00\x00\x00'[0x82bbc]: b'.html\x00\x00\x00'[0x4db4c]: b'ttVM_x86'[0x82c84]: b'.css\x00\x00\x00\x00'[0x4db5c]: b'android/os/Build'[0x82d54]: b'-journal'[0x4db6c]: b'HARDWARE'[0x82e1c]: b'-shm\x00\x00\x00\x00'[0x4dc38]: b'generic/sdk/generic'[0x82ee4]: b'-wal\x00\x00\x00\x00'[0x4dc4c]: b'generic_x86/sdk_x86/generic_x86'[0x82fac]: b'bugle_db'[0x4dc5c]: b'Andy\x00\x00\x00\x00'[0x83b2c]: b'.xml\x00\x00\x00\x00'[0x4dc6c]: b'ttVM_Hdragon'[0x83b98]: b'.\x00\x00\x00\x00\x00\x00\x00'[0x4dc7c]: b'generic_x86_64'[0x83ca0]: b'.db\x00\x00\x00\x00\x00'[0x4dc8c]: b'generic/google_sdk/generic'[0x83d40]: b'.\x00\x00\x00\x00\x00\x00\x00'[0x4dc9c]: b'vbox86p\x00'[0x85f54]: b'libc.so\x00'[0x4dcac]: b'generic/vbox86p/vbox86p'[0x85f6c]: b'open\x00\x00\x00\x00'[0x4dcbc]: b'google/sdk_gphone64'[0x85f88]: b'close\x00\x00\x00'[0x4dccc]: b'emulator'[0x85fa4]: b'read\x00\x00\x00\x00'[0x4dcdc]: b'android/os/Build'[0x85fc0]: b'write\x00\x00\x00'[0x4dcec]: b'FINGERPRINT'[0x85fdc]: b'munmap\x00\x00'[0xbc38]: b'FeatCheckEmulator'[0x860ac]: b'pread64\x00'[0x860c8]: b'pwrite64'[0x860e4]: b'mmap64\x00\x00'

检测分析

FeatureMemoryChecker

  • 初始化 inotify 监控(自身进程) :

    • 分配内存存储 inotify 相关数据(文件描述符、监控事件掩码等)。
    • 调用 inotify_init() 创建 inotify 实例,用于监控文件系统事件。
    • 监控自身进程的 /proc/self/mem(进程内存镜像)和 /proc/self/pagemap(进程页映射信息),监控事件掩码为 35(结合 inotify 事件定义,可能包含 IN_ACCESS、IN_MODIFY 等常用事件)。
    • 创建线程 TF_EmptyMemory_4F168,传入监控相关数据。

inotify 事件的处理逻辑( TF_EmptyMemory_4F168 线程的核心处理函数),主要逻辑如下:

  • 循环读取事件
    :通过 read(a1, s, 0xAA0uLL) 从 inotify 文件描述符(a1)循环读取事件(a1 为监控相关数据,包含 inotify 实例的文件描述符)。
  • 事件解析与处理

    • 对读取到的事件数据(存储在 s 中)进行循环解析,每次处理一个事件结构。

    • 检查事件类型(v4 = ((_DWORD )s_1 + 1)),若为 32、2、1 中的任意一种(对应 inotify 特定事件,如访问、修改、删除等),则:

    • 通过 __android_log_print 输出日志(标签 "XOX",状态 507)。

    • 设置全局变量 n551 = 507。

    • 调用 ExitProcess_1D638(507) 强制退出程序。

但似乎我进行内存dump的时候并没有闪退?

核心功能: 监控进程内存相关文件的访问 / 修改行为(可能是调试器或恶意程序的操作),一旦检测到则主动退出以防止被分析或篡改

FeatLibcProtection

DoLibcProtection_166D8

调用dlsym拿libc常用函数的地址 存到全局变量中进行调用

FeatAntiDump

sub_350EC

  1. 检测脱壳工具核心类

    1. top/niunaijun/blackbox/core/VMCore(BlackBox 脱壳工具核心类),触发状态码 531;
    2. java/f8left/fupk3/core/Fupk(FUpk3 脱壳工具核心类),触发状态码 533;
    3. android/app/Aupk(Aupk 脱壳工具核心类),触发状态码 532;
    4. cn/youlor/Unpacker(Unpacker 脱壳工具核心类),触发状态码 534。
  2. 检测脱壳工具相关文件

    1. 检查 /data/local/tmp/FUpk3.txt 或 /data/local/tmp/libFupk3.so(FUpk3 工具的临时文件 / 库文件),触发状态码 533;
    2. 检查 /data/local/tmp/unpacker.config(Unpacker 工具的配置文件),触发状态码 534;
    3. 检查 /data/local/tmp/fext.config(Fext 相关脱壳工具的配置文件),触发状态码 536。
  3. 检测风险方法注册

    1. 检查 dalvik/system/DexFile 类中是否存在 dumpMethodCode 方法(用于 Dump Dex 方法代码的风险方法),触发状态码 535;
    2. 检查 dalvik/system/DexFile 类中是否存在 fartextMethodCode 方法(类似的代码提取风险方法),触发状态码 536。

二、当 n2 == 2 时:注册原生方法并校验环境

  • 尝试查找 com/sagittarius/v6/D 类,并为其注册原生方法(RegisterNatives)。
  • 若类查找失败或方法注册失败,判定为环境异常(可能被脱壳工具篡改),触发状态码 537 并终止应用。

AntiFrida

sub_2E2E0

  1. 检测 Frida 相关线程与内存特征

    1. 遍历/proc/self/task目录,读取每个线程的status文件,检查是否包含gum-js-loop或gmain(Frida 的线程特征)。
    2. 读取/proc/self/maps文件,分析内存映射信息,查找path前缀/data/local/查找是否包含FRIDA_PEER_SETUP_ACTIVE(Frida 的内存特征字符串)。
  2. 检测 linjector 注入工具
    遍历/proc/self/fd目录,分析文件描述符的链接信息,检查是否包含linjector(动态注入工具的特征)。
  3. 结果处理

    1. 若检测到上述任一工具的特征,通过__android_log_print打印日志(标签 “XOX”,级别 7 为 ERROR),设置全局变量n551为对应状态码(如 543、544、545),并调用ExitProcess_1D638强制终止应用进程。
    2. 若未检测到特征,返回常规检测结果。

sub_2E8DC

  1. 初始化与前置检查

    1. 检查全局标记byte_E23C0[0](完整性校验初始化标记),若已初始化则跳过初始化流程,直接进入校验阶段。
    2. 若未初始化且未标记为 “校验失败”,则定位libart.so库文件,检查该库是否正常加载。
  2. 定位关键方法与内存保护调整

    1. 查找libart.so中的_ZN3art9ArtMethod12PrettyMethodEb方法(ArtMethod.PrettyMethod,用于获取方法的字符串描述,是libart.so的核心方法)。
    2. 通过内存地址范围匹配,确定该方法对应的内存页,调整内存保护属性(mprotect设置为可读写执行权限),为后续校验做准备。
  3. 关键方法完整性校验

    • 若不一致(说明方法被篡改,可能是 Hook 或注入导致),则打印日志(标签 “XOX”,级别 7 为 ERROR),设置全局变量n551为状态码547,调用ExitProcess_1D638强制终止应用进程。
    • 若一致,则说明libart.so核心方法未被篡改,正常执行后续逻辑。
    1. 再次获取_ZN3art9ArtMethod12PrettyMethodEb方法的内存地址,记录其原始内存数据(qword_E23B8)和方法地址(qword_E23C8),并标记初始化完成(byte_E23C0[0] = 1)。
    2. 后续调用时,校验当前_ZN3art9ArtMethod12PrettyMethodEb方法的内存数据与原始记录是否一致:

LogProtection

sub_34F88

  • 先通过sub_2DB60函数加载并定位libandroid_runtime.so库(Android 运行时核心库,包含日志相关系统函数)。
  • 若定位成功,进一步通过sub_2023C解密得到目标函数名__android_log_buf_write(Android 系统底层日志写入函数,所有应用日志最终都会通过该函数输出)。
  1. 执行 Hook 操作

    1. 调用HOOK_2D820函数对__android_log_buf_write进行 Hook,将其原始执行逻辑替换为自定义函数sub_3504C 为空函数
    2. 保存 Hook 后的函数地址到全局变量off_E2540,用于后续可能的恢复或二次操作。
  2. 结果返回

    1. 若 Hook 成功,返回替换后的函数地址;若定位库失败或 Hook 失败,返回对应错误标识(0相关结果)。

FeatCheckEmulator

核心函数 sub_4D3D0 的作用:

  • 准备模拟器特征字符串列表
    :通过一系列解密函数(sub_20BDC 等)生成一组字符串,这些字符串是常见的模拟器标识,包括:sdk、google_sdk、Andy、ttVM_Hdragon(天天龙模拟器)、Droid4X(海马玩模拟器)、nox(夜神模拟器)、sdk_x86、sdk_google、vbox86p(VirtualBox 模拟器)、emu64x(64 位模拟器)。
  • 获取系统
    PRODUCT属性值:调用 sub_1F1D0 函数,获取 Android 系统中 android.os.Build.PRODUCT 属性的字符串值(该属性通常标识设备的产品名称,模拟器会有特定值)。
  • 匹配模拟器特征:检查获取到的 PRODUCT 属性值中是否包含上述列表中的任何一个模拟器标识。

    • 若包含,则返回 1(判定为模拟器);
    • 若遍历完所有标识都不匹配,则返回 0(判定为非模拟器)

sub_4D550

  1. 准备模拟器制造商特征列表
    通过一系列解密函数(sub_2165C等)生成一组字符串,这些字符串是常见模拟器的制造商标识,包括:unknown、Genymotion(知名模拟器)、Andy(安迪模拟器)、MIT(可能关联特定模拟器)、nox(夜神模拟器)、TiantianVM(天天模拟器)、iToolsAVM(iTools 模拟器)、Netease(网易模拟器)。
  2. 获取系统MANUFACTURER属性值
    调用辅助函数sub_1F1D0(之前分析过的 JNI 工具函数),获取 Android 系统中android.os.Build.MANUFACTURER属性的字符串值(该属性通常标识设备的制造商名称,模拟器会有特定的制造商标识)。
  3. 匹配模拟器特征检查获取到的MANUFACTURER属性值中是否包含上述列表中的任何一个模拟器制造商标识:

    1. 若包含,则返回1(判定为模拟器);
    2. 若遍历完所有标识都不匹配,则返回0(判定为非模拟器)。

sub_4D6B0

  1. 准备模拟器特征标识列表
    通过解密函数(sub_21F1C等)生成一组模拟器相关特征字符串,包括:generic、generic_x86(通用 x86 架构标识,常见于模拟器)、Andy(安迪模拟器)、TTVM(天天模拟器相关)。
  2. 获取系统BRAND属性值
    调用辅助函数sub_1F1D0(JNI 工具函数),获取 Android 系统android.os.Build.BRAND属性的字符串值。该属性标识设备品牌,模拟器通常会使用通用品牌名或专属品牌标识。
  3. 特征匹配判断检查获取到的BRAND属性值是否包含上述特征列表中的任意一个标识:

    1. 包含则返回1,判定为模拟器;
    2. 遍历所有标识均不匹配则返回0,判定为非模拟器。

sub_4D7D0

  1. 生成模拟器特征标识列表
    通过一系列解密函数(sub_2245C等)生成 11 个模拟器相关特征字符串,包括:generic、generic_x86、generic_x86_64(通用架构标识,模拟器常用)、Andy(安迪模拟器)、ttVM_Hdragon(天天模拟器)、Droid4X(海马玩模拟器)、nox(夜神模拟器)、vbox86p(VirtualBox 模拟器)、iToolsAVM(iTools 模拟器)、emu64x(64 位模拟器)、emulator(直接模拟器标识)。
  2. 获取系统DEVICE属性值
    调用辅助函数sub_1F1D0(JNI 工具函数),获取 Android 系统android.os.Build.DEVICE属性的字符串值。该属性标识设备的具体型号或设备代号,模拟器会带有专属标识。
  3. 特征匹配与结果返回检查获取到的DEVICE属性值是否包含上述特征列表中的任意一个标识:

    1. 若包含,返回1,判定为模拟器;
    2. 遍历所有标识均不匹配,返回0,判定为非模拟器。

sub_4D960

  1. 生成模拟器特征标识列表
    通过解密函数(sub_22FBC等)生成 10 个模拟器相关特征字符串,覆盖主流模拟器及 SDK 测试设备标识:sdk、google_sdk、Droid4X(海马玩模拟器)、TiantianVM(天天模拟器)、Andy(安迪模拟器)、Android SDK built for x86_64(x86_64 架构 SDK 模拟器)、Android SDK built for x86(x86 架构 SDK 模拟器)、iToolsAVM(iTools 模拟器)、MuMu(沐沐模拟器)、sdk_gphone64(64 位 SDK 测试设备,常见于模拟器)。
  2. 获取系统MODEL属性值
    调用辅助函数sub_1F1D0(JNI 工具函数),获取 Android 系统android.os.Build.MODEL属性的字符串值。该属性标识设备的型号名称,模拟器通常会显示 SDK 相关名称或专属型号标识。
  3. 特征匹配与结果返回检查获取到的MODEL属性值是否包含上述特征列表中的任意一个标识:

    1. 若包含,返回1,判定为模拟器;
    2. 遍历所有标识均不匹配,返回0,判定为非模拟器。

sub_4DAE0

  1. 生成模拟器硬件特征列表
    通过解密函数(sub_23A3C等)生成 4 个模拟器专属的硬件特征字符串:goldfish(Android 官方模拟器的硬件标识)、vbox86(VirtualBox 模拟器相关硬件标识)、nox(夜神模拟器)、ttVM_x86(天天模拟器 x86 架构版本)。
  2. 获取系统HARDWARE属性值
    调用辅助函数sub_1F1D0(JNI 工具函数),获取 Android 系统android.os.Build.HARDWARE属性的字符串值。该属性标识设备的硬件型号,模拟器的硬件标识通常是固定的专属名称,与真实设备差异明显。
  3. 特征匹配与结果返回检查获取到的HARDWARE属性值是否包含上述特征列表中的任意一个标识:

    1. 若包含,返回1,判定为模拟器;
    2. 遍历所有标识均不匹配,返回0,判定为非模拟器。

sub_4DC00

  1. 生成模拟器指纹特征列表通过解密函数(sub_23F7C等)生成 10 个模拟器相关的FINGERPRINT特征字符串,涵盖通用模拟器、架构专属模拟器及知名第三方模拟器标识:

    1. 通用类:generic/sdk/generic、generic/google_sdk/generic、emulator
    2. 架构专属类:generic_x86/sdk_x86/generic_x86、generic_x86_64
    3. 第三方模拟器类:Andy(安迪模拟器)、ttVM_Hdragon(天天模拟器)、vbox86p(VirtualBox 模拟器)
    4. SDK 测试设备类:google/sdk_gphone64、generic/vbox86p/vbox86p
  2. 获取系统FINGERPRINT属性值
    调用辅助函数sub_1F1D0(JNI 工具函数),获取 Android 系统android.os.Build.FINGERPRINT属性的字符串值。该属性是设备的唯一指纹标识,由厂商、设备型号、系统版本等信息组合而成,模拟器的指纹标识具有明显的专属特征,且不易篡改。
  3. 特征匹配与结果返回检查获取到的FINGERPRINT属性值是否包含上述特征列表中的任意一个标识:

    1. 若包含,返回1,判定为模拟器;
    2. 遍历所有标识均不匹配,返回0,判定为非模拟器。

sub_4DD80

  1. 准备 MuMu 模拟器专属文件列表函数中涉及的文件包括:

    1. /etc/mumu-configs/device-prop-configs/mumu.config(MuMu 模拟器的设备属性配置文件)
    2. /data/local/cfg-gdaeg、/data/local/cfg-yzi、/data/local/cfg-hzg、/data/local/cfg-znz、/data/local/cfg-ndi、/data/local/cfg-zhz(MuMu 模拟器本地配置文件系列)
    3. /mnt/windows/BstSharedFolder 等(MuMu 模拟器与 Windows 共享文件夹的挂载路径)
  2. 文件存在性检查
    函数首先尝试访问 /etc/mumu-configs/device-prop-configs/mumu.config 文件,若该文件存在,则直接返回 1(判定为 MuMu 模拟器)。若该文件不存在,会依次检查上述 /data/local/cfg-* 系列文件和共享文件夹路径,只要其中任意一个文件 / 路径存在,就返回 1;若所有文件 / 路径都不存在,则返回 0。

sub_4DE00

  1. 准备模拟器专属系统属性列表函数中涉及的系统属性包括:

    1. microvirt.dlhost(Microvirt 系列模拟器的属性,如 Memu 模拟器)
    2. microvirt.memu_version(Memu 模拟器的版本属性)
    3. persist.nox.model(夜神模拟器的设备型号属性)
  2. 系统属性存在性检查
    函数通过_system_property_get_E1DC0函数依次检查上述系统属性是否存在。只要其中任意一个系统属性能被成功获取(返回值大于等于 1),则返回1(判定为目标模拟器);若所有属性都不存在,则返回0。

一、Magisk 相关核心文件

路径
说明
/data/magisk/resetprop
Magisk 用于修改系统属性的工具文件
/dev/.magisk.unblock
Magisk 相关的设备文件,用于权限控制
/sbin/.magisk/
Magisk 核心组件的挂载路径
/sbin/.core/mirror
Magisk 镜像挂载路径,用于系统分区修改
/sbin/.core/img
Magisk 模块存储路径
/sbin/.core/db-0/magisk.db
Magisk 数据库文件,记录模块和配置信息
/sbin/magiskinit
Magisk 初始化程序
/sbin/magisk
Magisk 主程序
/sbin/.magisk
Magisk 核心目录的隐藏路径
/data/adb/magisk.img
Magisk 虚拟文件系统镜像
/data/adb/magisk.db
Magisk 数据库(存储于 /data/adb 时的路径)
/data/adb/.boot_count
Magisk 记录启动次数的文件
/data/adb/magisk_simple
Magisk 简易模式标识文件
/data/adb/magisk
Magisk 数据存储目录(/data/adb 下)

二、通用 Root 工具文件

路径
说明
/data/local/su
常见的 su 权限工具路径(本地存储)
/data/local/bin/su
su 工具在 bin 目录的路径
/data/local/xbin/su
su 工具在 xbin 目录的路径
/sbin/su
系统 sbin 目录下的 su 工具
/system/bin/su
系统 bin 目录下的 su 工具
/system/bin/.ext/su
系统 bin 扩展目录下的 su 工具
/system/bin/failsafe/su
系统 failsafe 目录下的 su 工具
/system/sd/xbin/su
系统 sd 分区 xbin 目录下的 su 工具
/su/xbin/su
su 工具在 /su 目录的路径
/su/bin/su
su 工具在 /su 目录 bin 下的路径
/magisk/.core/bin/su
Magisk 环境下的 su 工具路径
/system/usr/we-need-root/su
第三方 Root 工具的特殊路径
/system/xbin/su
系统 xbin 目录下的 su 工具

三、挂载与系统配置文件

路径
说明
/cache/.disable_magisk
禁用 Magisk 的标识文件
/cache/magisk.log
Magisk 日志文件
/init.magisk.rc
Magisk 初始化脚本文件

FeatCheckRoot

sub_487F4

  1. 打开文件/proc/self/attr/prev(进程自身属性历史文件);
  2. 读取该文件内容;
  3. 在读取的内容中搜索字符串 “:zygote:”;
  4. 若找到则返回 1,否则返回 0(无论文件打开是否成功,未找到时均返回 0)。

其核心目的是通过检查进程属性历史,判断当前进程是否与 zygote 进程存在关联。

sub_48674

  1. 第一步:检查进程与 zygote 的关联
    调用chckRoot1_487F4()函数,若返回 1(即进程属性历史中存在:zygote:),则直接返回 1(判定为 Root 相关状态)。
  2. 第二步:检查 Magisk 工具文件是否存在

    1. 首先检查/data/magisk/resetprop(Magisk 用于修改系统属性的工具文件),若存在则返回 1(判定为存在 Magisk)。
    2. 若上述文件不存在,继续检查一组与 Magisk 相关的设备文件(如/dev/.magisk.unblock等,由v2 = &dev__magisk_unblock指向的列表),只要其中一个存在,就返回 1。
  3. 第三步:检查挂载信息中的 Magisk 痕迹若前两步未检测到痕迹,则读取/proc/self/mounts(进程挂载信息文件),并在内容中搜索一组与 Magisk 相关的路径字符串(如/sbin/.magisk/、/sbin/.core/mirror等,由初始化函数定义)。

    1. 若搜索到任何一个目标字符串,返回 1(判定为存在 Magisk 挂载痕迹)。
    2. 若未搜索到或文件操作失败,返回 0(未检测到 Root 相关痕迹)。

sub_48908

JNI检测是否存在特定类   android/bde/BdeEngineManager

sub_48230

popen(which,su) 检测返回结果

sub_483DC

检测su 文件

access遍历  可能的su文件

sub_47AC4

一、核心检测的系统属性与目标值

系统属性名
检测目标值
属性含义
ro_debuggable
"1"
系统调试开关,设为 1 表示开启系统级调试(默认 0,开启后易被篡改)
service_adb_root
"1"
ADB root 权限开关,设为 1 表示允许通过 ADB 获取 root 权限
ro_secure
"0"
系统安全等级开关,设为 0 表示降低安全等级(默认 1,关闭后系统限制减少)
sys_initd
"1"
init.d 脚本支持开关,设为 1 表示启用 init.d(常用于 Root 后自启脚本,存在安全风险)

二、分版本检测逻辑(以 Android SDK 34 为分界)

SDK 版本 < 34(低版本 Android 系统)

按优先级依次检测,满足任一条件即返回1(风险状态):

  • 条件 1:ro_debuggable 属性存在且值为 "1";
  • 条件 2:若条件 1 不满足,检测 service_adb_root 属性存在且值为 "1";
  • 条件 3:若条件 2 不满足,检测 ro_secure 属性存在且值为 "0";
  • 条件 4:若条件 3 不满足,检测 sys_initd 属性存在且值为 "1"。

SDK 版本 ≥ 34(高版本 Android 系统)

检测逻辑与低版本一致,但去掉了优先级顺序,直接并列检测 4 个条件,满足任一即返回1(风险状态):

  • ro_debuggable = "1";
  • service_adb_root = "1";
  • ro_secure = "0";
  • sys_initd = "1"。

三、关键补充说明

  • 所有属性检测均通过 _system_property_get_E1DC0 函数获取属性值,若获取失败(返回值 < 1),部分分支直接判定为风险状态(返回 1);

sub_47DF0

popen(getprop) 检测返回结果

  1. 执行系统命令获取属性信息

    1. 调用 popen 执行 getprop 命令(Android 系统获取所有系统属性的命令),以只读(r)模式读取输出结果。
    2. getprop 命令会返回设备所有系统属性的键值对,函数通过 fgets 逐行读取这些内容到缓冲区 s。
  2. 检测关键不安全特征逐行匹配缓冲区内容,若包含以下任一特征字符串,立即记录状态码、打印日志并终止进程:

    检测的特征字符串
    含义说明
    触发的状态码
    [Android/aosp
    设备系统为 Android 原生 AOSP 版本(无厂商安全加固,易被篡改)
    551
    [userdebug]
    系统为调试版本(userdebug 编译类型,默认开启调试权限,安全限制宽松)
    548
    [unlocked]
    设备引导加载器(Bootloader)已解锁(解锁后可刷入第三方 ROM、获取 Root 权限)
    549
    .flash.locked]: [0]
    设备闪存锁定状态为 0(即未锁定,允许修改系统分区)
    549
    [ro.debuggable]: [1]
    系统调试开关已开启(ro.debuggable\=1,允许系统级调试,存在被篡改风险)
    550

sub_4837C

access检测/system/app/Superuser.apk

sub_47714

  1. 读取挂载信息文件
    打开 /proc/mounts 文件(系统挂载信息的核心文件,记录所有分区的挂载路径、类型、权限等),以只读模式逐行读取内容。
  2. 解析挂载项并检测可写权限对每一行挂载信息,通过 sscanf 解析出挂载路径、挂载点、文件系统类型和挂载权限等字段,重点检查挂载权限中是否包含 rw(可写标识):

    1. 函数中通过 qword_E2938 数组关联关键系统目录(如 /system、/system/bin、/system/xbin、/vendor/bin、/sbin、/etc 等),这些目录默认应为只读挂载,若被修改为可写则存在安全风险。
    2. 若解析到某系统目录的挂载权限包含 rw,则设置标记 v6 为 1,表示检测到可写挂载。
  3. 结果返回
    函数最终返回 v6 & 1,即 1 表示存在系统分区可写挂载(风险状态),0 表示所有检测的系统分区均为只读挂载(正常状态)。

FeatCheckHook

sub_4E3A4

一、Xposed 框架检测

  1. 检查 Xposed 核心类
    尝试查找de.robv.android.xposed.XposedBridge类,若该类存在或触发异常(说明环境中存在 Xposed 相关组件),则初步判定存在 Xposed 框架。
  2. 异常栈追踪验证
    若检测到异常,通过获取异常栈信息(java.lang.Throwable.getStackTrace),并解析栈元素的字符串表示,进一步确认是否存在 Xposed 相关的调用痕迹。

二、虚拟环境检测

  1. VirtualApp 标识检测
    分析栈信息中是否包含com.lody.virtual(VirtualApp 的包名特征),若存在则判定为运行在 VirtualApp 虚拟环境中。
  2. XposedHelpers 类补充验证
    尝试查找de.robv.android.xposed.XposedHelpers类,进一步确认 Xposed 框架的存在。
  3. 进程与路径特征检测

    1. 检测进程中是否包含io.va.exposed64(Exposed 框架的进程特征);
    2. 检查系统路径中是否存在/io.va.exposed64/virtual/(Exposed 虚拟环境的路径特征)。

三、结果返回

若上述任一检测条件满足(存在 Xposed 框架、VirtualApp 或 Exposed 环境),函数返回true;否则返回false。

sub_48458

assess检测以下文件

路径
说明
/system/lib/libxposed_art.so
Xposed 框架核心库(32 位)
/system/lib64/libxposed_art.so
Xposed 框架核心库(64 位)
/system/xposed.prop
Xposed 框架属性文件
/cache/recovery/xposed.zip
Xposed 框架刷机包路径
/system/framework/XposedBridge.jar
Xposed 框架桥接文件
/system/bin/app_process64_xposed
Xposed 注入的进程文件(64 位)
/system/bin/app_process32_xposed
Xposed 注入的进程文件(32 位)
/magisk/xposed/system/lib/libsigchain.so
Magisk 版 Xposed 组件库
/magisk/xposed/system/lib/libart.so
Magisk 版 Xposed 替换的运行时库
/magisk/xposed/system/lib/libart-disassembler.so
Magisk 版 Xposed 反汇编库
/magisk/xposed/system/lib/libart-compiler.so
Magisk 版 Xposed 编译器库
/system/bin/app_process32_orig
Xposed 替换前的原始进程文件(32 位)
/system/bin/app_process64_orig
Xposed 替换前的原始进程文件(64 位)
/system/lib/libmemtrack_real.so
Xposed 相关的内存追踪库(32 位)
/system/lib64/libmemtrack_real.so
Xposed 相关的内存追踪库(64 位)
/system/lib/libriru_edxp.so
Riru 版 EdXposed 核心库(32 位)
/system/lib64/libriru_edxp.so
Riru 版 EdXposed 核心库(64 位)
/system/lib/libwhale.edxp.so
Whale 版 EdXposed 核心库(32 位)
/system/lib64/libwhale.edxp.so
Whale 版 EdXposed 核心库(64 位)
/system/framework/edxp.jar
EdXposed 框架桥接文件

sub_484D4

  1. 读取进程内存映射文件

    1. 生成当前进程的/proc/%d/maps路径(%d为当前进程 PID),通过系统调用打开该文件。
    2. 逐段读取文件内容到缓冲区v20,分析进程的内存映射信息。
  2. 检测 Xposed/EdXposed 特征检查内存映射内容中是否包含以下任一特征:

    1. Xposed 核心库特征字符串(由v11指向,对应 Xposed 框架的关键库标识);
    2. XposedBridge.jar(Xposed 框架的桥接文件标识);
    3. edxp.jar(EdXposed 框架的桥接文件标识)。
  3. 结果返回
    若检测到上述任一特征,返回1(判定存在 Xposed/EdXposed 框架);若读取完毕未检测到特征,返回0(判定无风险)。

FeatCheckPmsHook

sub_4ED18

  1. 定位关键类与字段

    1. 查找android.app.ActivityThread类,该类是 Android 应用进程的核心控制类。
    2. 获取其静态字段sPackageManager(该字段指向IPackageManager接口实例,负责应用包管理相关操作)。
  2. 检测动态代理特征

    • 若IPackageManager被动态代理(即sPackageManager是Proxy实例),说明包管理接口可能被篡改,函数会打印日志(标签 “XOX”,级别 7 为 ERROR),设置全局变量n551为状态码546,并调用ExitProcess_1D638强制终止应用进程。
    • 若未被代理,返回检测结果(0表示正常)。
    1. 查找java.lang.reflect.Proxy类(Java 动态代理的核心类)。
    2. 检查ActivityThread.sPackageManager是否是Proxy的实例:

该函数通过检测IPackageManager是否被动态代理,判断应用的包管理功能是否被恶意篡改(常见于 Hook 工具对应用安装、卸载等行为的拦截场景)。一旦检测到风险,立即终止应用,防止恶意操作(如静默安装恶意应用、篡改包信息等),保障应用的包管理安全性。

FeatureAntiMthook

检测MT管理器

sub_50DAC

  1. env-\>FindClass bin/mt/apksignaturekillerplus/HookApplication
  2. Dlopen  libmthook.so

sub_50E7C

遍历所有 FD,用 open 打开并读取 FD 对应的目标路径(或通过 readlink 获取链接指向)。检测是否打开了指定前缀路径的文件

FeatureJavaAntiDebug

509C8

JNI调用

android.os.Debug.isDebuggerConnected() 静态方法,该方法返回 boolean 类型,true 表示进程已被调试器连接,false 表示未被调试。

FeatureNativeAntiDebug

4F8A0

  1. 遍历进程的所有线程目录
    代码首先通过 snprintf 生成路径 /proc/%d/task(%d 为目标进程 PID),然后用 opendir 打开该目录。/proc/[pid]/task 目录包含进程所有线程(TID)的子目录,代码通过 readdir 遍历这些线程目录。
  2. 筛选有效的线程 ID(TID)
     对每个目录项(线程名)进行检查,确保其为纯数字(线程 ID 是数字),过滤掉非数字命名的目录(如 . 和 ..)。
  3. 读取线程的
    status文件对每个有效的线程,生成路径 /proc/%d/task/%s/status(%s 为线程 TID),通过 openat 打开该文件,读取内容到缓冲区 s2。
  4. 检查TracerPid字段在 status 文件内容中搜索 TracerPid: 关键字,找到后解析其值:

    1. 并传入回调函数4FB7C
    1. 若 TracerPid 为非 0 值,说明进程被调试器跟踪;

    2. 定位并解析 Uid: 字段
      循环读取文件内容,通过 strncmp 匹配 Uid: 关键字(长度 4)。找到后从字段后解析数字形式的 UID 值,利用 atol 转换为整数。
    3. 资源清理与结果返回
      关闭文件描述符,返回解析得到的 UID 值。主逻辑会将该 UID 与进程预期 UID 对比,若不一致则判定为被调试。

4F6B8

  1. 生成进程 maps 文件路径
    通过 snprintf 拼接路径 /proc/%d/task/%d/maps(两个 %d 均为目标进程 PID)。/proc/[pid]/task/[tid]/maps 文件记录了进程(线程)的内存映射信息,包含加载的动态库路径。
  2. 打开并读取 maps 文件
    用 syscall_B232C 调用 SYS_openat 打开 maps 文件,若打开成功(返回值非负),通过 read_C76C 读取文件内容到缓冲区 s_1(每次读取 1024 字节)。
  3. 筛选动态库路径循环读取 maps 文件内容,通过 sscanf 提取每行中的动态库路径(maps 文件每行末尾记录映射文件路径,动态库以 .so 结尾)。

    1. 调用 sub_1FC64(推测是字符串包含判断函数)检查提取的路径是否包含 .so,找到第一个动态库路径后跳出筛选循环。
  4. 动态库合法性校验基于提取的动态库路径(haystack)执行多层校验,全部通过则判定为 “合法”(返回 0),否则判定为 “违规”(返回 1):

    1. 校验 :若动态库路径是 (预设合法库libhello.so),视为违规。
    2. 校验 :若动态库路径匹配 off_DC5F8 数组中的路径(已知合法路径,如 /data/local/tmp/  /data/data/tools 下的指定库),视为违规

4FD70

读取/proc/self/cmdline

  • 匹配 "android_server"
  • 匹配 "gdb"

结尾

部分代码逻辑由AI分析,并没有手动写代码验证,可能存在一些不准确的地方

· 今 日 推 荐 ·

本文内容来自网络,如有侵权请联系删除

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-27 23:24:25 HTTP/2.0 GET : https://c.mffb.com.cn/a/477135.html
  2. 运行时间 : 0.245952s [ 吞吐率:4.07req/s ] 内存消耗:4,662.64kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=5b2776278ceedbe63a7aa5139ff0fa09
  1. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/runtime/temp/cefbf809ba1a84190cb04b0cb7abcf79.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001148s ] mysql:host=127.0.0.1;port=3306;dbname=c_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001682s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000779s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000655s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001399s ]
  6. SELECT * FROM `set` [ RunTime:0.000607s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001464s ]
  8. SELECT * FROM `article` WHERE `id` = 477135 LIMIT 1 [ RunTime:0.004580s ]
  9. UPDATE `article` SET `lasttime` = 1774625065 WHERE `id` = 477135 [ RunTime:0.013544s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000812s ]
  11. SELECT * FROM `article` WHERE `id` < 477135 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001185s ]
  12. SELECT * FROM `article` WHERE `id` > 477135 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001103s ]
  13. SELECT * FROM `article` WHERE `id` < 477135 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002129s ]
  14. SELECT * FROM `article` WHERE `id` < 477135 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.017999s ]
  15. SELECT * FROM `article` WHERE `id` < 477135 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.022960s ]
0.253206s