9.2 KiB
Compartilhamento de UIActivity
A partir do iOS 6, é possível para aplicativos de terceiros compartilhar dados (itens) por meio de mecanismos específicos como o AirDrop, por exemplo. Do ponto de vista do usuário, esse recurso é a conhecida folha de atividade de compartilhamento do sistema que aparece após clicar no botão "Compartilhar".
Uma lista completa dos mecanismos de compartilhamento integrados disponíveis pode ser encontrada em UIActivity.ActivityType. Se não considerado apropriado para o aplicativo, os desenvolvedores têm a possibilidade de excluir alguns desses mecanismos de compartilhamento.
Enviando itens
Ao testar o Compartilhamento de UIActivity, você deve prestar atenção especial em:
- os dados (itens) sendo compartilhados,
- as atividades personalizadas,
- os tipos de atividade excluídos.
O compartilhamento de dados via UIActivity
funciona criando um UIActivityViewController
e passando os itens desejados (URLs, texto, uma imagem) em init(activityItems:applicationActivities:)
.
Se você tiver o código-fonte, deve dar uma olhada no UIActivityViewController
:
- Inspecione as atividades passadas para o método
init(activityItems:applicationActivities:)
. - Verifique se ele define atividades personalizadas (também sendo passadas para o método anterior).
- Verifique os
excludedActivityTypes
, se houver.
Se você só tem o aplicativo compilado/instalado, tente procurar pelo método e propriedade anterior, por exemplo:
$ rabin2 -zq Telegram\ X.app/Telegram\ X | grep -i activityItems
0x1000df034 45 44 initWithActivityItems:applicationActivities:
Recebendo itens
Ao receber itens, você deve verificar:
- se o aplicativo declara tipos de documentos personalizados olhando em UTIs exportados/importados ("Informações" na guia do projeto Xcode). A lista de todas as UTIs declaradas pelo sistema pode ser encontrada na Documentação do Desenvolvedor da Apple arquivada.
- se o aplicativo especifica quais tipos de documentos que ele pode abrir olhando em Tipos de Documentos ("Informações" na guia do projeto Xcode). Se presente, eles consistem em nome e uma ou mais UTIs que representam o tipo de dados (por exemplo, "public.png" para arquivos PNG). O iOS usa isso para determinar se o aplicativo é elegível para abrir um determinado documento (especificar UTIs exportados/importados não é suficiente).
- se o aplicativo verifica corretamente os dados recebidos olhando para a implementação de
application:openURL:options:
(ou sua versão obsoletaUIApplicationDelegate application:openURL:sourceApplication:annotation:
) no delegado do aplicativo.
Se não tiver o código-fonte, você ainda pode dar uma olhada no arquivo Info.plist
e procurar por:
UTExportedTypeDeclarations
/UTImportedTypeDeclarations
se o aplicativo declara tipos de documentos personalizados exportados/importados.CFBundleDocumentTypes
para ver se o aplicativo especifica quais tipos de documentos que ele pode abrir.
Uma explicação muito completa sobre o uso dessas chaves pode ser encontrada no Stackoverflow, mas aqui você tem um resumo:
UTExportedTypeDeclarations
: Use-os para definir suas próprias UTIs que seu aplicativo deseja ensinar ao sistema em que está instalado. Uma UTI descreve um pedaço de dados (não necessariamente dados localizados dentro de um arquivo!) e requer pelo menos um identificador (com.example.MyCoolDataType
). Além disso, pode ter um nome (My Cool Data Type
), uma ou mais extensões de nome de arquivo (.myCoolDataType
), um ou mais tipos MIME (x-application/my-cool-data-type
), um ou mais tipos de prancheta (usados ao transferir dados desse tipo usando copiar e colar) e um ou mais tipos de sistema operacional legado. Geralmente, você também deseja que as UTIs se conformem às UTIs existentes (por exemplo, quando você diz que sua UTI se conforma compublic.data
, qualquer processo que possa lidar com dados genéricos também pode lidar com sua UTI).- por exemplo: você define seu próprio formato de dados de arquivo proprietário e deseja que esse formato de dados também seja conhecido por outros aplicativos, plug-ins, extensões, etc.
UTImportedTypeDeclarations
: Você usaUTImportedTypeDeclarations
para ensinar o sistema sobre UTIs que você deseja que sejam conhecidas no sistema, mas que não são suas UTIs.- por exemplo: seu aplicativo é capaz de ler o formato de dados proprietário de outro aplicativo, mas você não sabe se esse aplicativo está instalado no sistema.
CFBundleDocumentTypes
: Você usaCFBundleDocumentTypes
para informar ao sistema quais tipos de documentos seu aplicativo é capaz de abrir. A menos que você também liste suas UTIs aqui, essas UTIs não estão associadas ao seu aplicativo no Finder e seu aplicativo não aparecerá no menuAbrir com >
.
A única coisa que você sempre deve definir para um tipo de documento é o papel. O papel pode ser "Visualizador" (você pode exibir esse tipo de arquivo, mas não pode editá-lo), "Editor" (você pode exibir e editar esse tipo de arquivo) ou "Nenhum" (não é especificado o que você pode fazer com esse tipo de arquivo).- por exemplo: você deseja que seu aplicativo seja associado a determinados tipos de arquivo, identificados por extensão, tipo MIME ou identificador UTI. Se você deseja que seu aplicativo seja associado a um tipo de UTI, o aplicativo deve importar ou exportar o tipo, caso contrário, o tipo pode não ser conhecido pelo sistema e o registro em um tipo de UTI desconhecido não tem efeito algum.
Teste Dinâmico
Para enviar atividades, você pode:
- Hook o método que vimos na análise estática (
init(activityItems:applicationActivities:)
) para obter osactivityItems
eapplicationActivities
. - Descobrir as atividades excluídas hookando a propriedade
excludedActivityTypes
.
Para receber itens, você pode:
- Compartilhar um arquivo com o aplicativo de outro aplicativo ou enviá-lo via AirDrop ou e-mail. Escolha o arquivo para que ele acione o diálogo "Abrir com..." (ou seja, não há um aplicativo padrão que abrirá o arquivo, um PDF, por exemplo).
- Hook
application:openURL:options:
e quaisquer outros métodos que foram identificados em uma análise estática anterior. - Observar o comportamento do aplicativo.
- Além disso, você pode enviar arquivos específicos malformados e/ou usar uma técnica de fuzzing.
Leia mais aqui.
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
Você trabalha em uma empresa de segurança cibernética? Você quer ver sua empresa anunciada no HackTricks? ou você quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Confira os PLANOS DE ASSINATURA!
-
Descubra A Família PEASS, nossa coleção exclusiva de NFTs
-
Adquira o swag oficial do PEASS & HackTricks
-
Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-me no Twitter 🐦@carlospolopm.
-
Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e hacktricks-cloud.