Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Android Shamiko模块证书问题 #200

Open
ARKSAVE opened this issue Apr 16, 2024 · 18 comments
Open

Android Shamiko模块证书问题 #200

ARKSAVE opened this issue Apr 16, 2024 · 18 comments
Labels
enhancement New feature or request

Comments

@ARKSAVE
Copy link

ARKSAVE commented Apr 16, 2024

安卓12,红米k40,MIUI13,激活shamiko后导入的243f0bfb.0文件失效(系统证书里找不到,模块也没用),请问有其他的解决方案吗

@ARKSAVE ARKSAVE added the enhancement New feature or request label Apr 16, 2024
@ghost
Copy link

ghost commented Apr 17, 2024

先试试把shamiko删掉,如果证书恢复正常,则应该是shamiko模块后台操作导致的。现在都2024年了,隐藏Root无特殊情况就别使用早就停止维护的shamiko模块了,而且它不开源,可能含有某些后门程序。
可以按照下面方法解决:
1.如果你的手机支持KernelSU建议换用KernelSU,删掉shamiko用KernelSU自带的root隐藏功能。
2.也可以改用德尔塔面具。(不支持刷了GSI系统的Vivo机型,否则掉触控驱动。)先删掉shamiko,否则变砖,然后卸载Magisk(选择还原原厂镜像),重启后再卸载magisk app,安装Kitsune Mask(德尔塔面具),隐藏root用Kitsune Mask自带的magiskhide即可。注意Kitsune Mask千万别刷shamiko否则变真砖
操作有一定风险,请注意备份数据。

@ARKSAVE
Copy link
Author

ARKSAVE commented Apr 17, 2024

感谢大佬

@ghost
Copy link

ghost commented Apr 17, 2024

感谢大佬

不用谢

@ARKSAVE
Copy link
Author

ARKSAVE commented Apr 24, 2024

大佬您好,我换了德尔塔面具,发现似乎不是面具或shamiko的关系,我将根证书导入/etc/security/cacerts/文件夹后(安卓13)在系统证书内还是找不到对应的证书

@ghost
Copy link

ghost commented Apr 27, 2024

抱歉,这个我就不知道了,昨天专门测试Vivo Y52S刷了个安卓12L系统(AndyYan的LineageOS 19 BVN GSI通用系统),测试能用,这个机型只能用面具24.3(24300)suu修改版,用遵守排除列表隐藏magisk。另一个红米5刷了第三方安卓11,测试Apatch和最新德尔塔面具都能用。均为EXT4文件系统。我这两个手机都刷不了安卓13,没有安卓13手机,没法测试。你可以下载个MT管理器查看/system/etc/security/cacerts/下面有没有proxypin证书(应该是243f0bfb.0这个文件),有就是系统限制无解了,没有243f0bfb.0的话可以尝试一下Apatch(类似kernelsu但兼容性更好也更易用)或者降级安卓12或刷安卓13GSI https://sourceforge.net/projects/andyyan-gsi/ (注意备份数据)如果可能的话。

@ARKSAVE
Copy link
Author

ARKSAVE commented Apr 27, 2024

我换了Apatch,但是MT挂载system读写失败,然后我用了模块,现在已经可以用了,感谢大佬指导

@ikbs
Copy link

ikbs commented Jun 6, 2024

我换了Apatch,但是MT挂载system读写失败,然后我用了模块,现在已经可以用了,感谢大佬指导

你好,请问是什么模块

@ARKSAVE
Copy link
Author

ARKSAVE commented Jun 7, 2024

我换了Apatch,但是MT挂载system读写失败,然后我用了模块,现在已经可以用了,感谢大佬指导

你好,请问是什么模块

proxypin的模块
Uploading Screenshot_2024-06-07-11-44-47-412_com.network.proxy.jpg…

@orzlenmo
Copy link

orzlenmo commented Aug 7, 2024

不行,小米10pro android13情况下,刷的apatch,使用模块方式安装,系统证书里面没有,mt目录里去看了也没有

@1q23lyc45
Copy link

1q23lyc45 commented Aug 16, 2024

不行,小米10pro android13情况下,刷的apatch,使用模块方式安装,系统证书里面没有,mt目录里去看了也没有

可以先试试德尔塔面具(Kitsune Mask)
下载地址:https://github.com/HuskyDG/magisk-files/releases
源码:https://github.com/KitsuneMagisk/Magisk/tree/kitsune

如果德尔塔也不行,可能你内核不支持overlayfs,这种情况请刷KernelSU的GKI内核,不要用APatch或者KernelSU LKM修补法,否则没效果。

如果仍然不行,估计是ROM使用了"write failed: EROFS: Read-only file system"这个文件系统。现在MIUI好多EROFS文件系统的。解决方法,要么刷GSI系统,要么降级到MIUI 11及以下版本。如果能关闭AVB,可以用终极大招:解包system分区,把证书文件(在模块里面有)放里面,然后再打包回去,只不过这样一旦升级系统就无效了,不升级系统的无所谓

@orzlenmo
Copy link

orzlenmo commented Aug 16, 2024

不行,小米10pro android13情况下,刷的补丁,使用模块方式安装,系统证书里面没有,mt目录里去了也没有

可以先试德尔塔面膜(Kitsune Mask) 下载地址:https://github.com/HuskyDG/magisk-files/releases 源码:https://github.com/KitsuneMagisk/Magisk/tree/kitsune

如果德尔塔也行,可能你的内核不支持overlayfs,这种情况请刷KernelSU的GKI内核,不要用APatch或者KernelSU LKM修复法,否则没效果。

如果仍然不行,估计是ROM使用了“写入失败:EROFS:只读文件系统”这个文件系统。现在MIUI有EROFS文件系统的。解决方法,或者刷GSI系统,或者降级到MIUI 11及以下版本。如果能关闭AVB,可以用终极大招:解包系统分区,把证书文件(在模块里面有)放里面,然后再备份重新启动,只要这样一旦升级系统就无效了,不升级系统的无

感谢您的回答,最后我再github上找到了另一个直接执行移动证书的脚本,执行下就移到系统了,重启以后会失效,不过这样也好,我想用时候执行下就好https://github.com/bigwolftime/mount_cert_with_sh

@wanghongenpin wanghongenpin changed the title Android证书问题 Android Shamiko模块证书问题 Aug 22, 2024
@wanghongenpin wanghongenpin pinned this issue Aug 22, 2024
@shenghuang147
Copy link

shenghuang147 commented Aug 22, 2024

本人环境说明

  • 系统版本: MIUI 14.0.2.0
  • 安卓版本: Android 13
  • Magisk-ProxyPinCA版本: 1.2.0 (Magisk内模块显示的版本号)

如果你使用了 Shamiko 的白名单模式,那么该模块将可能不生效,即便该模块已经成功地在 /system/etc/security/cacerts 中注入了证书,您在系统证书中也看不到 ProxyPin CA 这个证书。
(这个问题网络上讨论得比较少,不确定是只在 MIUI14 上有还是因为使用 Shamiko 的白名单模式的人少,当然可能只是我菜了,大佬都不屑于讨论这么简单的问题。)

解决方法快速预览

解决方法

方法1:

  • 关闭 Shamiko 模块或者不使用白名单模式

方法2:

/system/etc/security/cacerts 挂在到 tmpfs

  • 可以使用 Magisk 模块进行挂载

  • 也可以不使用 Magisk 模块,进行手动配置(这样不仅可以挂载 ProxyPin 的证书还可以同时挂载其他证书)

使用Magisk-ProxyPinCA模块注入证书

  1. 安装 Magisk-ProxyPinCA 模块
  2. 该模块post-fs-data.sh 修改为以下内容
#!/system/bin/sh


exec > /data/local/tmp/ProxyPinCA.log
exec 2>&1

#set -x

MODDIR=${0%/*}

set_context() {
    [ "$(getenforce)" = "Enforcing" ] || return 0

    default_selinux_context=u:object_r:system_file:s0
    selinux_context=$(ls -Zd $1 | awk '{print $1}')

    if [ -n "$selinux_context" ] && [ "$selinux_context" != "?" ]; then
        chcon -R $selinux_context $2
    else
        chcon -R $default_selinux_context $2
    fi
}

#LOG_PATH="/data/local/tmp/ProxyPinCA.log"
echo "[$(date +%F) $(date +%T)] - ProxyPinCA post-fs-data.sh start."
chown -R 0:0 ${MODDIR}/system/etc/security/cacerts
if [ -d /apex/com.android.conscrypt/cacerts ]; then
    # 检测到 android 14 以上,存在该证书目录
    CERT_HASH=243f0bfb

    CERT_FILE=${MODDIR}/system/etc/security/cacerts/${CERT_HASH}.0
    echo "[$(date +%F) $(date +%T)] - CERT_FILE: ${CERT_FILE}"
    if ! [ -e "${CERT_FILE}" ]; then
        echo "[$(date +%F) $(date +%T)] - ProxyPinCA certificate not found."
        exit 0
    fi

    TEMP_DIR=/data/local/tmp/cacerts-copy
    rm -rf "$TEMP_DIR"
    mkdir -p -m 700 "$TEMP_DIR"
    mount -t tmpfs tmpfs "$TEMP_DIR"

    # 复制证书到临时目录
    cp -f /apex/com.android.conscrypt/cacerts/* "$TEMP_DIR"
    cp -f $CERT_FILE "$TEMP_DIR"

    chown -R 0:0 "$TEMP_DIR"
    set_context /apex/com.android.conscrypt/cacerts "$TEMP_DIR"

    # 检查新证书是否成功添加
    CERTS_NUM="$(ls -1 "$TEMP_DIR" | wc -l)"
    if [ "$CERTS_NUM" -gt 10 ]; then
        mount -o bind "$TEMP_DIR" /apex/com.android.conscrypt/cacerts
         for pid in 1 $(pgrep zygote) $(pgrep zygote64); do
            nsenter --mount=/proc/${pid}/ns/mnt -- \
                mount --bind "$TEMP_DIR" /apex/com.android.conscrypt/cacerts
        done
        echo "[$(date +%F) $(date +%T)] - Mount success!"
    else
        echo "[$(date +%F) $(date +%T)] - Mount failed!"
    fi

    # 卸载临时目录
    umount "$TEMP_DIR"
    rmdir "$TEMP_DIR"
else
    echo "[$(date +%F) $(date +%T)] - Android version lower than 14 detected"
    TEMP_DIR="/data/local/tmp/cacerts-copy"
    SYSTEM_CACERTS_DIR="/system/etc/security/cacerts"
    IMPORT_CA_DIR=${MODDIR}/system/etc/security/cacerts

    rm -rf "$TEMP_DIR"
    mkdir -p -m 700 $TEMP_DIR
    # 复制系统证书到临时目录
    cp $SYSTEM_CACERTS_DIR/* $TEMP_DIR
    # 复制 ProxyPin 证书到临时目录
    cp $IMPORT_CA_DIR/* $TEMP_DIR/
    set_context $SYSTEM_CACERTS_DIR "$TEMP_DIR"
    # 将 /system/etc/security/cacerts 挂载到 tmpfs
    mount -t tmpfs tmpfs $SYSTEM_CACERTS_DIR
    chown -R 0:0 $TEMP_DIR
    chmod -R 644 $TEMP_DIR
    # 将临时目录中的证书移动到 系统证书目录
    mv $TEMP_DIR/* $SYSTEM_CACERTS_DIR/
    echo "[$(date +%F) $(date +%T)] - Mount success!"
fi

if [ $(id -u) -ne 0 ]; then
    echo "This script must be run as root" 1>&2
    exit 1
fi

不知道有没有办法判断 Shamiko 模块起否启用,如果有的话可以改进脚本,如果有知道的欢迎补充

手动配置开机自动注入证书

此方法不需要安装 Magisk-ProxyPinCA 模块,它不仅适用于 ProxyPin 也可以同时挂载其他多个CA证书

你需要将下面的注入脚本放到 /data/adb/post-fs-data.d 目录下赋予可执行权限,这样在每次开机时就会自动加载注入脚本。

#!/system/bin/sh

set -e

exec > /mnt/inject-system-cert.log
exec 2>&1

TEMP_DIR="/mnt/ca-copy"
SYSTEM_CACERTS_DIR="/system/etc/security/cacerts"
# 要注入的证书需要放到以下目录
IMPORT_CA_DIR="/data/adb/cacerts"

if [ -d $IMPORT_CA_DIR ]; then
	CA_COUNT=$(find $IMPORT_CA_DIR -maxdepth 1 -type f -name "*.0")
	[[ -z "$CA_COUNT" ]] && \
	echo "No valid CA certificates in $IMPORT_CA_DIR directory" && \
	exit 1
else
	mkdir -p $IMPORT_CA_DIR
	echo "No valid CA certificates in $IMPORT_CA_DIR directory"
	exit 1
fi

set_context() {
    [ "$(getenforce)" = "Enforcing" ] || return 0

    default_selinux_context=u:object_r:system_file:s0
    selinux_context=$(ls -Zd $1 | awk '{print $1}')

    if [ -n "$selinux_context" ] && [ "$selinux_context" != "?" ]; then
        chcon -R $selinux_context $2
    else
        chcon -R $default_selinux_context $2
    fi
}

inject_system_cacerts() {
    mkdir -p -m 700 $TEMP_DIR
    # 复制系统证书到临时目录
    cp $SYSTEM_CACERTS_DIR/* $TEMP_DIR
    # 将要注入的证书导入到临时目录
    cp $IMPORT_CA_DIR/* $TEMP_DIR/
    set_context $SYSTEM_CACERTS_DIR "$TEMP_DIR"
    # 将 /system/etc/security/cacerts 挂载到 tmpfs
    mount -t tmpfs tmpfs $SYSTEM_CACERTS_DIR
    chown -R 0:0 $TEMP_DIR
    chmod -R 644 $TEMP_DIR
    # 将临时目录中的证书移动到 系统证书目录
    mv $TEMP_DIR/* $SYSTEM_CACERTS_DIR/
    echo "[$(date +%F) $(date +%T)] - Mount success!"
}

inject_system_cacerts

if [ $(id -u) -ne 0 ]; then
    echo "This script must be run as root" 1>&2
    exit 1
fi

将你所有要注入的CA证书都放到 /data/adb/cacerts 目录下

当你想注入新的证书但又不想重启时,你只需要将新证书放到 /data/adb/cacerts 目录下并且以 root 权限执行此脚本即可

方法3:

  • 给进程单独挂证书,这个我不会,但我成功过一次。无法确定我成功的那一次是挂给哪几个进程。后面尝试了几次都不行,如果有大佬了解请帮忙补充。
  • 参考: issuecomment-1641430409

参考链接

Dr-TSNG/ZygiskNext#39 (comment)
https://www.lategege.com/?p=1452
mitmproxy/mitmproxy#6460

如果有更好的解决办法也欢迎各位告知我。

@SeaRat
Copy link

SeaRat commented Oct 26, 2024

先试试把shamiko删掉,如果证书恢复正常,则应该是shamiko模块后台操作导致的。现在都2024年了,隐藏Root无特殊情况就别使用早就停止维护的shamiko模块了,而且它不开源,可能含有某些后门程序。 可以按照下面方法解决: 1.如果你的手机支持KernelSU建议换用KernelSU,删掉shamiko用KernelSU自带的root隐藏功能。 2.也可以改用德尔塔面具。(不支持刷了GSI系统的Vivo机型,否则掉触控驱动。)先删掉shamiko,否则变砖,然后卸载Magisk(选择还原原厂镜像),重启后再卸载magisk app,安装Kitsune Mask(德尔塔面具),隐藏root用Kitsune Mask自带的magiskhide即可。注意Kitsune Mask千万别刷shamiko否则变真砖 操作有一定风险,请注意备份数据。

有什么开源的隐藏root模块推荐吗?我用的lsposed,这玩意和shamiko是捆绑的啊,不用shamiko就漏了

@1q23lyc45
Copy link

1q23lyc45 commented Oct 26, 2024

先试试把shamiko删掉,如果证书恢复正常,则应该是shamiko模块后台操作导致的。现在都2024年了,隐藏Root无特殊情况就别使用早就停止维护的shamiko模块了,而且它不开源,可能含有某些后门程序。 可以按照下面方法解决: 1.如果你的手机支持KernelSU建议换用KernelSU,删掉shamiko用KernelSU自带的root隐藏功能。 2.也可以改用德尔塔面具。(不支持刷了GSI系统的Vivo机型,否则掉触控驱动。)先删掉shamiko,否则变砖,然后卸载Magisk(选择还原原厂镜像),重启后再卸载magisk app,安装Kitsune Mask(德尔塔面具),隐藏root用Kitsune Mask自带的magiskhide即可。注意Kitsune Mask千万别刷shamiko否则变真砖 操作有一定风险,请注意备份数据。

有什么开源的隐藏root模块推荐吗?我用的lsposed,这玩意和shamiko是捆绑的啊,不用shamiko就漏了

Zygisk Assistant 效果很不错,建议搭配Magisk27以上
https://github.com/snake-4/Zygisk-Assistant
另外也可以尝试
Kitsune Mask(德尔塔面具), KernelSU, APatch自带的隐藏
自用方案 德尔塔面具+ZygiskAssistant 可以完美过momo(除了数据未加密和bl不能隐藏) 如需要隐藏bl可以 SafetyNetFix https://github.com/kdrag0n/safetynet-fix 还有PlayIntegrityFix https://github.com/chiteroman/PlayIntegrityFix 任选其一,推荐后面那个
还有HideMyApplist用来隐藏App的
https://github.com/Dr-TSNG/Hide-My-Applist

@SeaRat
Copy link

SeaRat commented Oct 26, 2024

先试试把shamiko删掉,如果证书恢复正常,则应该是shamiko模块后台操作导致的。现在都2024年了,隐藏Root无特殊情况就别使用早就停止维护的shamiko模块了,而且它不开源,可能含有某些后门程序。 可以按照下面方法解决: 1.如果你的手机支持KernelSU建议换用KernelSU,删掉shamiko用KernelSU自带的root隐藏功能。 2.也可以改用德尔塔面具。(不支持刷了GSI系统的Vivo机型,否则掉触控驱动。)先删掉shamiko,否则变砖,然后卸载Magisk(选择还原原厂镜像),重启后再卸载magisk app,安装Kitsune Mask(德尔塔面具),隐藏root用Kitsune Mask自带的magiskhide即可。注意Kitsune Mask千万别刷shamiko否则变真砖 操作有一定风险,请注意备份数据。

有什么开源的隐藏root模块推荐吗?我用的lsposed,这玩意和shamiko是捆绑的啊,不用shamiko就漏了

Zygisk Assistant 效果很不错,建议搭配Magisk27以上 https://github.com/snake-4/Zygisk-Assistant 另外也可以尝试 Kitsune Mask(德尔塔面具), KernelSU, APatch自带的隐藏 自用方案 德尔塔面具+ZygiskAssistant 可以完美过momo(除了数据未加密和bl不能隐藏) 如需要隐藏bl可以 SafetyNetFix https://github.com/kdrag0n/safetynet-fix 还有PlayIntegrityFix https://github.com/chiteroman/PlayIntegrityFix 任选其一,推荐后面那个

ksu,zygisknext,playintegrityfix 这三个我现在都在用,我先试试把 shamiko 卸载了会不会漏,会漏再用 Zygisk-Assistant 。
另外我想问下 zygisknext 是不是不开源呢,在发布页没看见源码?

@SeaRat
Copy link

SeaRat commented Oct 26, 2024

先试试把shamiko删掉,如果证书恢复正常,则应该是shamiko模块后台操作导致的。现在都2024年了,隐藏Root无特殊情况就别使用早就停止维护的shamiko模块了,而且它不开源,可能含有某些后门程序。 可以按照下面方法解决: 1.如果你的手机支持KernelSU建议换用KernelSU,删掉shamiko用KernelSU自带的root隐藏功能。 2.也可以改用德尔塔面具。(不支持刷了GSI系统的Vivo机型,否则掉触控驱动。)先删掉shamiko,否则变砖,然后卸载Magisk(选择还原原厂镜像),重启后再卸载magisk app,安装Kitsune Mask(德尔塔面具),隐藏root用Kitsune Mask自带的magiskhide即可。注意Kitsune Mask千万别刷shamiko否则变真砖 操作有一定风险,请注意备份数据。

有什么开源的隐藏root模块推荐吗?我用的lsposed,这玩意和shamiko是捆绑的啊,不用shamiko就漏了

Zygisk Assistant 效果很不错,建议搭配Magisk27以上 https://github.com/snake-4/Zygisk-Assistant 另外也可以尝试 Kitsune Mask(德尔塔面具), KernelSU, APatch自带的隐藏 自用方案 德尔塔面具+ZygiskAssistant 可以完美过momo(除了数据未加密和bl不能隐藏) 如需要隐藏bl可以 SafetyNetFix https://github.com/kdrag0n/safetynet-fix 还有PlayIntegrityFix https://github.com/chiteroman/PlayIntegrityFix 任选其一,推荐后面那个

哦,我忘了切换分支了, zygisknext 的源码在 master 分支上

@1q23lyc45
Copy link

有什么开源的隐藏root模块推荐吗?我用的lsposed,这玩意和shamiko是捆绑的啊,不用shamiko就漏了

Zygisk Assistant 效果很不错,建议搭配Magisk27以上 https://github.com/snake-4/Zygisk-Assistant 另外也可以尝试 Kitsune Mask(德尔塔面具), KernelSU, APatch自带的隐藏 自用方案 德尔塔面具+ZygiskAssistant 可以完美过momo(除了数据未加密和bl不能隐藏) 如需要隐藏bl可以 SafetyNetFix https://github.com/kdrag0n/safetynet-fix 还有PlayIntegrityFix https://github.com/chiteroman/PlayIntegrityFix 任选其一,推荐后面那个

哦,我忘了切换分支了, zygisknext 的源码在 master 分支上

zygisknext原来开源现在不开源了,那个源码是最终开源版本的,https://github.com/Dr-TSNG/ZygiskNext/releases/tag/v4-0.9.1.1 版本号0.9.1.1
有两个开源的zygisknext分支,其中一个是https://github.com/Admirepowered/Zygisk_mod (归档了,不过也能用) 第二个是 https://github.com/PerformanC/ReZygisk (仍在wip阶段,暂时没有release,actions上有CI版本)

@SeaRat
Copy link

SeaRat commented Oct 26, 2024

有什么开源的隐藏root模块推荐吗?我用的lsposed,这玩意和shamiko是捆绑的啊,不用shamiko就漏了

Zygisk Assistant 效果很不错,建议搭配Magisk27以上 https://github.com/snake-4/Zygisk-Assistant 另外也可以尝试 Kitsune Mask(德尔塔面具), KernelSU, APatch自带的隐藏 自用方案 德尔塔面具+ZygiskAssistant 可以完美过momo(除了数据未加密和bl不能隐藏) 如需要隐藏bl可以 SafetyNetFix https://github.com/kdrag0n/safetynet-fix 还有PlayIntegrityFix https://github.com/chiteroman/PlayIntegrityFix 任选其一,推荐后面那个

哦,我忘了切换分支了, zygisknext 的源码在 master 分支上

zygisknext原来开源现在不开源了,那个源码是最终开源版本的,https://github.com/Dr-TSNG/ZygiskNext/releases/tag/v4-0.9.1.1 版本号0.9.1.1 有两个开源的zygisknext分支,其中一个是https://github.com/Admirepowered/Zygisk_mod (归档了,不过也能用) 第二个是 https://github.com/PerformanC/ReZygisk (仍在wip阶段,暂时没有release,actions上有CI版本)

闭源就闭源吧,反正我只能继续用。现在把shamiko换成zygisk-assistant了,和原来效果一样,这样就行了😂

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

6 participants