QQBackup / qq-win-db-key

全平台 QQ 聊天数据库解密
Other
469 stars 52 forks source link

Android 7 光速虚拟机内 Frida 无法正常运行 #28

Closed Pevernow closed 2 months ago

Pevernow commented 3 months ago

采用光速虚拟机提供手机上的安卓7模拟器,内核可能是anbox。(x86的模拟器不支持这个项目)

selinux已经调整为宽松模式 在su环境下运行了frida-server 根本没有安装magisk,不存在magisk hide干扰问题。

始终报这个错。

zygote进程存在,但还有一个zygote64? 是不是要访问另一个?

Pevernow commented 3 months ago

本机是vivo的,root不了。 电脑模拟器试过,x86架构不支持。 聊天记录是手Q的,怎么导出导入备份都只能在手Q NT上完成操作。

Young-Lord commented 3 months ago

模拟器内getprop发一下,以及怀疑这个环境本身就用不了 电脑模拟器也有arm64架构的,比如AndroidStudio里的

Young-Lord commented 3 months ago

也可以试着把代码里的pid对应修改,看看先运行QQ后hook会不会有问题

Pevernow commented 3 months ago

模拟器内getprop发一下,以及怀疑这个环境本身就用不了 电脑模拟器也有arm64架构的,比如AndroidStudio里的

早上也试了vs2022 里的android sdk提供的arm模拟器。

用不了,用AVD创建的虚拟机,总是会卡死在开机界面,调大内存也没用。看日志发现似乎有错误,zygote和几个服务被反复kill然后一直重启。

可能一定要用android studio里的?

Pevernow commented 3 months ago

模拟器内getprop发一下,以及怀疑这个环境本身就用不了 电脑模拟器也有arm64架构的,比如AndroidStudio里的

离谱的地方在于,这个环境支持magisk(后来装了),也能hook上zygote64。。。。

Young-Lord commented 3 months ago

也可以试着看看先运行QQ后hook会不会有问题

这个呢?

Pevernow commented 3 months ago

也可以试着看看先运行QQ后hook会不会有问题

这个呢?

我在开frida-server前就挂着QQ后台了,还是一样。。。

还有什么办法吗?

Pevernow commented 3 months ago

模拟器内getprop发一下,以及怀疑这个环境本身就用不了 电脑模拟器也有arm64架构的,比如AndroidStudio里的

这个getprop怎么搞?

Young-Lord commented 3 months ago

模拟器内getprop发一下,以及怀疑这个环境本身就用不了 电脑模拟器也有arm64架构的,比如AndroidStudio里的

这个getprop怎么搞?

虚拟机终端内(和frida-server一样的)用root权限运行,把所有输出文件形式贴上来

Pevernow commented 3 months ago

模拟器内getprop发一下,以及怀疑这个环境本身就用不了 电脑模拟器也有arm64架构的,比如AndroidStudio里的

这个getprop怎么搞?

虚拟机终端内(和frida-server一样的)用root权限运行,把所有输出文件形式贴上来

手机上不好建txt我就直接贴了。

这个是没sudo环境下的。

[gsm.version.ril-impl]: [android reference-ril 1.0]

[ro.bootimage.build.date]: [2023年11月25日 星期六 16时01分47秒 CST]

[ro.build.date]: [2023年11月25日 星期六 16时01分47秒 CST]

[ro.build.description]: [PD2302-user 13 TP1A.220624.014 compiler10312225 release-keys] [ro.build.display.id]: [TP1A.220624.014 release-keys]

Pevernow commented 3 months ago

这个是su环境下的

``` [ARGH]: [ARGH] [android.host.adb.port]: [6556] [android.host.adb.server.port]: [6038] [config.disable_consumerir]: [1] [config.disable_cpukills]: [0] [config.disable_rtt]: [1] [config.disable_samplingprof]: [1] [config.disable_serial]: [1] [config.disable_wakekills]: [0] [dalvik.vm.appimageformat]: [lz4] [dalvik.vm.dex2oat-Xms]: [64m] [dalvik.vm.dex2oat-Xmx]: [512m] [dalvik.vm.heapgrowthlimit]: [384m] [dalvik.vm.heapsize]: [512m] [dalvik.vm.image-dex2oat-Xms]: [64m] [dalvik.vm.image-dex2oat-Xmx]: [64m] [dalvik.vm.isa.arm.features]: [default] [dalvik.vm.isa.arm.variant]: [cortex-a15] [dalvik.vm.isa.arm64.features]: [default] [dalvik.vm.isa.arm64.variant]: [generic] [dalvik.vm.stack-trace-file]: [/data/anr/traces.txt] [dalvik.vm.usejit]: [true] [dalvik.vm.usejitprofiles]: [true] [debug.atrace.tags.enableflags]: [0] [debug.egl.callstack]: [1] [debug.force_rtl]: [0] [debug.sf.nobootanimation]: [1] [dev.bootcomplete]: [1] [gsm.current.phone-type]: [1] [gsm.loc.cid]: [0] [gsm.loc.lac]: [0] [gsm.network.type]: [Unknown] [gsm.nitz.time]: [1719716431014] [gsm.operator.alpha]: [TelKila] [gsm.operator.iso-country]: [cn] [gsm.operator.isroaming]: [false] [gsm.operator.numeric]: [460011] [gsm.sim.operator.alpha]: [Android] [gsm.sim.operator.iso-country]: [cn] [gsm.sim.operator.numeric]: [460011] [gsm.sim.state]: [READY] [gsm.version.ril-impl]: [android reference-ril 1.0] [init.svc.adbd]: [stopped] [init.svc.audioserver]: [running] [init.svc.cameraserver]: [running] [init.svc.debuggerd]: [running] [init.svc.debuggerd64]: [running] [init.svc.drm]: [running] [init.svc.gatekeeperd]: [running] [init.svc.healthd]: [running] [init.svc.installd]: [running] [init.svc.keystore]: [running] [init.svc.lmkd]: [running] [init.svc.logd]: [running] [init.svc.logd-reinit]: [stopped] [init.svc.media]: [running] [init.svc.mediacodec]: [running] [init.svc.mediadrm]: [running] [init.svc.mediaextractor]: [running] [init.svc.netd]: [running] [init.svc.ril-daemon]: [running] [init.svc.servicemanager]: [running] [init.svc.su_daemon]: [running] [init.svc.surfaceflinger]: [running] [init.svc.vold]: [running] [init.svc.wpa_supplicant]: [running] [init.svc.zygote]: [running] [init.svc.zygote_secondary]: [running] [log.tag.GLSActivity]: [V] [log.tag.am_focused_activity]: [I] [net.bt.name]: [Android] [net.change]: [net.dns1] [net.dns1]: [172.19.0.2] [net.dns2]: [8.8.8.8] [net.eth0.dns1]: [114.114.114.114] [net.eth0.dns2]: [8.8.8.8] [net.eth1.dns1]: [114.114.114.114] [net.eth1.dns2]: [8.8.8.8] [net.hostname]: [android-661b9ac5ea7912f8] [net.qtaguid_enabled]: [0] [net.tcp.default_init_rwnd]: [60] [persist.NaviBar.enable]: [1] [persist.service.bdroid.bdaddr]: [22:22:35:61:bc:e1] [persist.sys.dalvik.vm.lib.2]: [libart.so] [persist.sys.gps.lpp]: [] [persist.sys.timezone]: [Asia/Shanghai] [persist.sys.usb.config]: [none] [persist.sys.webview.vmsize]: [142273664] [pm.dexopt.ab-ota]: [speed-profile] [pm.dexopt.bg-dexopt]: [speed-profile] [pm.dexopt.boot]: [verify-profile] [pm.dexopt.core-app]: [speed] [pm.dexopt.first-boot]: [interpret-only] [pm.dexopt.forced-dexopt]: [speed] [pm.dexopt.install]: [interpret-only] [pm.dexopt.nsys-library]: [speed] [pm.dexopt.shared-apk]: [speed] [rild.libpath]: [libreference-ril.so] [ro.adb.secure]: [1] [ro.allow.mock.location]: [0] [ro.baseband]: [unknown] [ro.board.platform]: [] [ro.boot.console]: [tty0] [ro.boot.hardware]: [mt6985] [ro.boot.serialno]: [77e9ab6e6bb1e2f5] [ro.bootimage.build.date]: [2023年11月25日 星期六 16时01分47秒 CST] [ro.bootimage.build.date.utc]: [1700899307] [ro.bootimage.build.fingerprint]: [vivo/PD2302/PD2302:13/TP1A.220624.014/compiler10312225:user/release-keys] [ro.bootloader]: [unknown] [ro.bootmode]: [unknown] [ro.build.characteristics]: [nosdcard] [ro.build.date]: [2023年11月25日 星期六 16时01分47秒 CST] [ro.build.date.utc]: [1700899307] [ro.build.description]: [PD2302-user 13 TP1A.220624.014 compiler10312225 release-keys] [ro.build.display.id]: [TP1A.220624.014 release-keys] [ro.build.fingerprint]: [vivo/PD2302/PD2302:13/TP1A.220624.014/compiler10312225:user/release-keys] [ro.build.flavor]: [PD2302-user] [ro.build.host]: [compiler] [ro.build.id]: [TP1A.220624.014] [ro.build.product]: [PD2302] [ro.build.tags]: [release-keys] [ro.build.type]: [user] [ro.build.user]: [compiler] [ro.build.version.all_codenames]: [REL] [ro.build.version.base_os]: [] [ro.build.version.codename]: [REL] [ro.build.version.incremental]: [compiler10312225] [ro.build.version.preview_sdk]: [0] [ro.build.version.release]: [7.1.2] [ro.build.version.sdk]: [25] [ro.build.version.security_patch]: [2017-08-05] [ro.carrier]: [unknown] [ro.com.google.locationfeatures]: [1] [ro.config.alarm_alert]: [Alarm_Classic.ogg] [ro.config.channelId]: [10000] [ro.config.guid]: [eb74ae84e571af0b9f78745a9d0ec7df] [ro.config.iptables.disable]: [1] [ro.config.notification_sound]: [pixiedust.ogg] [ro.config.ringtone]: [Ring_Synth_04.ogg] [ro.config.version_code]: [4421] [ro.crypto.state]: [unsupported] [ro.debuggable]: [0] [ro.device_owner]: [false] [ro.hardware]: [mt6985] [ro.hardware.egl]: [mali] [ro.hardware.gralloc]: [mali] [ro.hardware.vulkan]: [mali] [ro.opengles.version]: [196608] [ro.product.board]: [k6985v1_64] [ro.product.brand]: [vivo] [ro.product.cpu.abi]: [arm64-v8a] [ro.product.cpu.abilist]: [arm64-v8a,armeabi-v7a,armeabi] [ro.product.cpu.abilist32]: [armeabi-v7a,armeabi] [ro.product.cpu.abilist64]: [arm64-v8a] [ro.product.device]: [PD2302] [ro.product.locale]: [zh-CN] [ro.product.locale.language]: [zh] [ro.product.locale.region]: [CN] [ro.product.manufacturer]: [vivo] [ro.product.model]: [V2302A] [ro.product.name]: [PD2302] [ro.radio.use-ppp]: [no] [ro.revision]: [0] [ro.runtime.firstboot]: [1719716431735] [ro.secure]: [1] [ro.serialno]: [77e9ab6e6bb1e2f5] [ro.setupwizard.mode]: [EMULATOR] [ro.sf.lcd_density]: [560] [ro.sys.sdcardfs]: [1] [ro.wifi.channels]: [] [ro.zygote]: [zygote64_32] [security.perf_harden]: [1] [selinux.reload_policy]: [1] [service.bootanim.exit]: [1] [status.battery.level]: [5] [status.battery.level_raw]: [50] [status.battery.level_scale]: [9] [status.battery.state]: [Slow] [sys.boot_completed]: [1] [sys.sysctl.extra_free_kbytes]: [41343] [sys.sysctl.tcp_def_init_rwnd]: [60] [sys.usb.config]: [mtp] [sys.usb.configfs]: [0] [sys.usb.state]: [mtp] [testing.mediascanner.skiplist]: [/storage/emulated/0/Android/,/storage/emulated/0/tencent/] [vold.has_adoptable]: [1] [vold.post_fs_data_done]: [1] [wifi.interface]: [wlan0] [wlan.driver.status]: [ok] ```
Young-Lord commented 3 months ago

su环境下的ps -A发一下

Young-Lord commented 3 months ago

以及把运行本项目的python脚本时的输出发一下

Young-Lord commented 3 months ago

以及把运行本项目的python脚本时的输出发一下

原因是如果已经运行了,按理说是不用再spawn的,因此我很怀疑你给的信息是否和实际相符

Pevernow commented 3 months ago

以及把运行本项目的python脚本时的输出发一下

原因是如果已经运行了,按理说是不用再spawn的,因此我很怀疑你给的信息是否和实际相符

Screenshot_20240706_092915

Pevernow commented 3 months ago

以及把运行本项目的python脚本时的输出发一下

原因是如果已经运行了,按理说是不用再spawn的,因此我很怀疑你给的信息是否和实际相符

frida-server 是手动下载的同版本,在su环境下运行后,termux终端就卡住了,看不到有什么输出。

Pevernow commented 3 months ago

su环境下的ps -A发一下 Screenshot_20240706_093826 Screenshot_20240706_093820 Screenshot_20240706_093807 Screenshot_20240706_093754 Screenshot_20240706_093745

Young-Lord commented 3 months ago

貌似确实是这个问题,也就是脚本里没有成功获取到pid,从而认为QQ未运行 试试:将an.py整个替换为以下内容,运行后给我看看输出:

import frida
import platform
import os
import sys
import subprocess

PACKAGE = "com.tencent.mobileqq"
ON_TERMUX = None
print(platform.system())
print("ANDROID_ROOT" in os.environ.keys())
print(os.path.exists("/data/data/com.termux"))
print("TERMUX_VERSION" in os.environ.keys())
def isOnTermux() -> bool:
    global ON_TERMUX
    if ON_TERMUX is not None:
        return ON_TERMUX
    if (
        platform.system() == "Linux"
        and "ANDROID_ROOT" in os.environ.keys()
        and (
            os.path.exists("/data/data/com.termux")
            or ("TERMUX_VERSION" in os.environ.keys())
        )
    ):
        ON_TERMUX = True
        return True
    ON_TERMUX = False
    return False

if __name__ == "__main__":
    jscode = general_script

    if isOnTermux():
        print("on termux")
        device = frida.get_remote_device()
        pid_command = "su -c pidof " + PACKAGE
    else:
        print("not termux")
        device = frida.get_usb_device()
        pid_command = "adb shell su -c pidof " + PACKAGE
    running = True
    try:
        print(pid_command)
        ret=subprocess.check_output(pid_command, shell=True)
        print(ret)
        pid = int(
            ret.decode()
            .strip()
            .split(" ")[0]
        )
    except:
        import traceback
        traceback.print_exc()
        running = False
    if running:
        print(PACKAGE + " is already running", pid)
        session = device.attach(pid)
        script = session.create_script(jscode)
    else:
        pid = device.spawn([PACKAGE])
        session = device.attach(pid)
        script = session.create_script(jscode)
        device.resume(pid)
    print("QQ running!! pid = %d" % pid)
Pevernow commented 3 months ago

貌似确实是这个问题,也就是脚本里没有成功获取到pid,从而认为QQ未运行 试试:将an.py整个替换为以下内容,运行后给我看看输出:

import frida
import platform
import os
import sys
import subprocess

PACKAGE = "com.tencent.mobileqq"
ON_TERMUX = None
print(platform.system())
print("ANDROID_ROOT" in os.environ.keys())
print(os.path.exists("/data/data/com.termux"))
print("TERMUX_VERSION" in os.environ.keys())
def isOnTermux() -> bool:
    global ON_TERMUX
    if ON_TERMUX is not None:
        return ON_TERMUX
    if (
        platform.system() == "Linux"
        and "ANDROID_ROOT" in os.environ.keys()
        and (
            os.path.exists("/data/data/com.termux")
            or ("TERMUX_VERSION" in os.environ.keys())
        )
    ):
        ON_TERMUX = True
        return True
    ON_TERMUX = False
    return False

if __name__ == "__main__":
    jscode = general_script

    if isOnTermux():
        print("on termux")
        device = frida.get_remote_device()
        pid_command = "su -c pidof " + PACKAGE
    else:
        print("not termux")
        device = frida.get_usb_device()
        pid_command = "adb shell su -c pidof " + PACKAGE
    running = True
    try:
        print(pid_command)
        ret=subprocess.check_output(pid_command, shell=True)
        print(ret)
        pid = int(
            ret.decode()
            .strip()
            .split(" ")[0]
        )
    except:
        import traceback
        traceback.print_exc()
        running = False
    if running:
        print(PACKAGE + " is already running", pid)
        session = device.attach(pid)
        script = session.create_script(jscode)
    else:
        pid = device.spawn([PACKAGE])
        session = device.attach(pid)
        script = session.create_script(jscode)
        device.resume(pid)
    print("QQ running!! pid = %d" % pid)

Screenshot_20240706_115442

Pevernow commented 3 months ago

想起来一件事,新版termux的su -c用法好像改了,后面最好要用引号把命令包进去。

Pevernow commented 3 months ago

Screenshot_20240706_120017

Young-Lord commented 3 months ago

想起来一件事,新版termux的su -c用法好像改了,后面最好要用引号把命令包进去。

这样啊?再试试:

import frida
import platform
import os
import sys
import subprocess

PACKAGE = "com.tencent.mobileqq"

if __name__ == "__main__":
    jscode = ''

    if 1:
        print("on termux")
        device = frida.get_remote_device()
        pid_command = "su -c 'pidof " + PACKAGE + "'"

    running = True
    try:
        print(pid_command)
        ret=subprocess.check_output(pid_command, shell=True)
        print(ret)
        pid = int(
            ret.decode()
            .strip()
            .split(" ")[0]
        )
    except:
        import traceback
        traceback.print_exc()
        running = False
    if running:
        print(PACKAGE + " is already running", pid)
        session = device.attach(pid)
        script = session.create_script(jscode)
    else:
        pid = device.spawn([PACKAGE])
        session = device.attach(pid)
        script = session.create_script(jscode)
        device.resume(pid)
    print("QQ running!! pid = %d" % pid)
Pevernow commented 3 months ago

想起来一件事,新版termux的su -c用法好像改了,后面最好要用引号把命令包进去。

这样啊?再试试:

import frida
import platform
import os
import sys
import subprocess

PACKAGE = "com.tencent.mobileqq"

if __name__ == "__main__":
    jscode = ''

    if 1:
        print("on termux")
        device = frida.get_remote_device()
        pid_command = "su -c 'pidof " + PACKAGE + "'"

    running = True
    try:
        print(pid_command)
        ret=subprocess.check_output(pid_command, shell=True)
        print(ret)
        pid = int(
            ret.decode()
            .strip()
            .split(" ")[0]
        )
    except:
        import traceback
        traceback.print_exc()
        running = False
    if running:
        print(PACKAGE + " is already running", pid)
        session = device.attach(pid)
        script = session.create_script(jscode)
    else:
        pid = device.spawn([PACKAGE])
        session = device.attach(pid)
        script = session.create_script(jscode)
        device.resume(pid)
    print("QQ running!! pid = %d" % pid)

Screenshot_20240706_121137

Young-Lord commented 3 months ago

还真是这个问题,试下刚push的最新版

Young-Lord commented 3 months ago

如何?

Pevernow commented 3 months ago

如何?

Screenshot_20240706_125402

Young-Lord commented 3 months ago

?你QQ后台挂着吗

Pevernow commented 3 months ago

?你QQ后台挂着吗

Screenshot_20240706_130919 挂着

Young-Lord commented 3 months ago

不好意思没push,再试试刚push的

Pevernow commented 3 months ago

不好意思没push,再试试刚push的

Screenshot_20240706_131210

Young-Lord commented 3 months ago

好,完全没相关资料的奇怪issue。 你Python frida版本(pip3 list | grep rida)和frida-server版本匹配吗?

Pevernow commented 3 months ago

好,完全没相关资料的奇怪issue。 你Python frida版本(pip3 list | grep rida)和frida-server版本匹配吗?

Screenshot_2024_0706_131902 我确定过版本,pkg安装的frida是16.1.1的 server我下载的也是16.1.1 arm64的 pip不知道为什么看不到版本

Pevernow commented 3 months ago

Screenshot_20240706_132136

Young-Lord commented 3 months ago

能试试这个吗? https://github.com/QQBackup/qq-win-db-key/blob/master/教程 - NTQQ (Android).md#导出数据库

实在不行,闲鱼150买个二手小米5保证能跑

Pevernow commented 3 months ago

Screenshot_20240706_135810

Young-Lord commented 3 months ago

pkg装那个flask-python包把版本搞乱了,大概需要一个pip3 install --upgrade pygments

Young-Lord commented 2 months ago

看起来这个issue的Author已经不需要折腾这些奇怪的环境了,那就不管了(