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
iblessing — iblessing é um kit de ferramentas de exploração de segurança iOS, que inclui principalmente coleta de informações de aplicativos, análise estática e análise dinâmica. Pode ser usado para engenharia reversa, análise binária e mineração de vulnerabilidades. | Kitploit
Ferramentas/GitHubGitHub/soulghost/iblessing
Análise EstáticaAnálise Dinâmica (Sandboxing)Segurança iOSAnálise de VulnerabilidadesExploraçãoEngenharia ReversaSegurança MóvelAnálise de BináriosTop em Segurança iOS nº10
GitHub
684958há 4 anosRevisado pelo Kitploit
soulghost/iblessing

iblessing

iblessing é um kit de ferramentas de exploração de segurança iOS, que inclui principalmente coleta de informações de aplicativos, análise estática e análise dinâmica. Pode ser usado para engenharia reversa, análise binária e mineração de vulnerabilidades.

Ver Repositório

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

☠️ ██╗██████╗ ██╗ ███████╗███████╗███████╗██╗███╗ ██╗ ██████╗ ██║██╔══██╗██║ ██╔════╝██╔════╝██╔════╝██║████╗ ██║██╔════╝ ██║██████╔╝██║ █████╗ ███████╗███████╗██║██╔██╗ ██║██║ ███╗ ██║██╔══██╗██║ ██╔══╝ ╚════██║╚════██║██║██║╚██╗██║██║ ██║ ██║██████╔╝███████╗███████╗███████║███████║██║██║ ╚████║╚██████╔╝ ╚═╝╚═════╝ ╚══════╝╚══════╝╚══════╝╚══════╝╚═╝╚═╝ ╚═══╝ ╚═════╝

Build Status Releases

iblessing

  • iblessing é um conjunto de ferramentas de segurança para iOS, que inclui principalmente coleta de informações da aplicação, análise estática e análise dinâmica.
  • iblessing é baseado no unicorn engine, capstone engine e keystone engine.

Funcionalidades

  • 🔥 Multiplataforma: Testado no macOS e Ubuntu.

  • Extração de informações estáticas de apps iOS, incluindo metadados, deep links, URLs, etc.

  • Analisador Mach-O e simulador de ligação de símbolos dyld

  • Realização e análise de classes Objective-C

  • Scanners que realizam análise dinâmica de código assembly arm64 e encontram informações chave ou superfície de ataque

  • Scanners que usam unicorn para simular parcialmente a execução de código Mach-O arm64 e encontrar algumas características

  • Geradores que podem fornecer processamento secundário no relatório do scanner para iniciar um servidor de consultas, ou gerar script para o IDA

  • Super scanner de xrefs objc_msgSend 😄

    • Emulação de métodos e subs objc (como blocos) para gerar xrefs como o flare-emu
    • Detecção de wrapper de funções objc e geração de usercall para IDA
    • Análise de funções filhas de objc_msgSend
    • Xrefs de bloco objc para objc_msgSend em argumentos e lista de captura
    • Formato de relatório incluindo json, etc.
    • Análise de classes e métodos Swift
    • Seguindo ramificações e chamadas
    • SimProcedures para símbolos externos
  • Testes

  • Suporte a Scanners Android

  • Logs de diagnóstico

  • Infraestrutura de scanner mais flexível para novos plugins de scanner

  • Suporte

    Caso precise de suporte em relação ao iblessing ou qualquer coisa associada a ele, você pode:

    • criar uma issue e fornecer informações necessárias
    • contatar Sou1gh0st no Twitter
    • enviar e-mail para xiuyutong1994#163.com
    • enviar e-mail para xiuyutong1994#gmail.com

    Changelog

    • 2021.06.27 - Nova arquitetura (Shell Programm + Core Library) e suporte a plugins (beta)
    • 2021.01.23 - Adicionadas assinaturas de métodos para bibliotecas do sistema (Foundation, UIKit), capacidades analíticas aprimoradas (https://github.com/Soulghost/iblessing/wiki/System-Libraries-(Foundation,-UIKit)-Simple-SimProcedure)
    • 2020.11.30 - Informações de reflexão Objc (https://github.com/Soulghost/iblessing/wiki/Objc-Reflection-Info)
    • 2020.10.24 - Snapshots de chamadas Objc (https://github.com/Soulghost/iblessing/wiki/Objc-Call-Snapshots)
    • 2020.10.04 - Suporte a lista de categorias Objc
    • 2020.09.28 - Suporte a bibliotecas estáticas e fat mach-o
    • 2020.09.22 - Estado básico do programa e ramificação condicional
    • 2020.09.04 - Validação de métodos, inferência, suporte a objc_msgSendSuper
    • 2020.08.11 - Agora o iblessing é uma ferramenta multiplataforma, suporta macOS e Linux 😆
    • 2020.08.08 - Melhoria no scanner de xrefs objc_msgSend, adicionado suporte a sub xref, incluindo argumentos de bloco e lista de captura
    • 2020.07.30 - Melhoria no scanner de wrapper de símbolos e adicionados scripts IDA para renomeação de wrapper de símbolo e modificação de protótipo
    • 2020.07.21 - Primeira versão

    Introdução

    ⚠️⚠️⚠️ Os scanners binários exigem 12 GB de espaço de memória virtual para carregar um arquivo mach-o, mas não consumirão tanto. Portanto, você precisa garantir que a memória física da sua máquina de trabalho seja superior a 12 GB, ou garantir que a memória virtual alocável seja superior a 12 GB através do mecanismo de arquivo swap.

    1. Você pode baixar o binário pré-lançado do iblessing e aproveitá-lo.
    2. execute chmod +x no binário
    3. Para mais tutoriais, consulte a Documentação e Ajuda abaixo.

    Como Usar

    • Lançamentos https://github.com/Soulghost/iblessing/releases

    Binário Tudo em Um

    • iblessing-darwin-all/iblessing-linux

    Shell Program + Dylib

    • descompacte iblessing-framework.tar.gz
    • iblessing-darwin/iblessing-linux + libiblessing-core.dylib/libiblessing-core.so

    Desenvolva Suas Próprias Ferramentas Baseadas no Framework iblessing

    • descompacte iblessing-framework.tar.gz
    • seu binário + libiblessing-core.dylib/libiblessing-core.so + include/iblessing-core
    • código de exemplo: iblessing-core/otool.cpp

    Como Compilar

    CMake

    • Plataforma: macOS, Linux

    Para começar a compilar o iblessing, siga os passos abaixo:``` git clone --recursive -j4 https://github.com/Soulghost/iblessing cd iblessing ./compile-cmake.sh

    root@kitploit:~
    ## Atalhos
    - [Conceitos Básicos](https://github.com/Soulghost/iblessing#basic-concepts)
    - Digitalizadores
      - [Digitalizar para AppInfos](https://github.com/Soulghost/iblessing#scan-for-appinfos) ⚠️ Atualmente não disponível no Linux
      - [Digitalizar para Class XREFs](https://github.com/Soulghost/iblessing#scan-for-class-xrefs)
      - [Digitalizar para todas as objc_msgSend XREFs](https://github.com/Soulghost/iblessing#scan-for-all-objc_msgsend-xrefs)
      - [Digitalizar para Wrappers de Símbolos Simples](https://github.com/Soulghost/iblessing/blob/features/anti_wrapper/README.md#scan-for-symbol-wrappers)
     
    - Geradores
      - [Gerar Servidor de Consulta de Xrefs objc_msgSend](https://github.com/Soulghost/iblessing#generate-objc_msgsend-xrefs-query-server)
      - [Gerar Scripts IDA para xrefs de objc_msgSend](https://github.com/Soulghost/iblessing#generate-ida-scripts-for-objc_msgsend-xrefs)
      - [Gerar Scripts IDA para renomeação de wrapper de função objc e modificação de protótipo](https://github.com/Soulghost/iblessing/blob/features/anti_wrapper/README.md#genereate-ida-script-for-objc-runtime-function-rename-and-prototype-modification)
    
    ***Se houver algum erro, você pode compilar manualmente o capstone e o unicorn e, em seguida, arrastar libcapstone.a e libunicorn.a para o vendor/libs do projeto Xcode.***
    
    Se tudo isso for executado com sucesso, você pode encontrar o binário no diretório build:```
    > ls ./build
    iblessing
    
    > file ./build/iblessing
    ./build/iblessing: Mach-O 64-bit executable x86_64
    

    Documentação & Ajuda

    Pré-visualização```

    $ iblessing -h

    root@kitploit:~
           ☠️
           ██╗██████╗ ██╗     ███████╗███████╗███████╗██╗███╗   ██╗ ██████╗
           ██║██╔══██╗██║     ██╔════╝██╔════╝██╔════╝██║████╗  ██║██╔════╝
           ██║██████╔╝██║     █████╗  ███████╗███████╗██║██╔██╗ ██║██║  ███╗
           ██║██╔══██╗██║     ██╔══╝  ╚════██║╚════██║██║██║╚██╗██║██║   ██║
           ██║██████╔╝███████╗███████╗███████║███████║██║██║ ╚████║╚██████╔╝
           ╚═╝╚═════╝ ╚══════╝╚══════╝╚══════╝╚══════╝╚═╝╚═╝  ╚═══╝ ╚═════╝
    

    [] iblessing iOS Security Exploiting Toolkit Beta 0.1.1 (http://blog.asm.im) [] Author: Soulghost (高级页面仔) @ (https://github.com/Soulghost)

    Usage: iblessing [options...] Options: -m, --mode mode selection: * scan: use scanner * generator: use generator -i, --identifier choose module by identifier: * : use specific scanner * : use specific generator -f, --file input file path -o, --output output file path -l, --list list available scanners -d, --data extra data -h, --help Shows this page

    root@kitploit:~
    ## Conceitos Básicos
    ### Scanner
    Um scanner é um componente usado para produzir relatórios de análise através de análise estática e dinâmica de arquivos binários, por exemplo, o scanner objc-msg-xref pode analisar dinamicamente a maioria das referências cruzadas de objc_msgSend.```
    [*] Scanner List:
        - app-info: extract app infos
        - objc-class-xref: scan for class xrefs
        - objc-msg-xref: generate objc_msgSend xrefs record
        - predicate: scan for NSPredicate xrefs and sql injection surfaces
        - symbol-wrapper: detect symbol wrappers
    

    Gerador

    Um gerador é um componente que realiza processamento secundário no relatório gerado pelo scanner, por exemplo, pode gerar scripts do IDA com base no relatório de referências cruzadas do scanner objc-msg-xref.``` [*] Generator List: - ida-objc-msg-xref: generator ida scripts to add objc_msgSend xrefs from objc-msg-xref scanner's report - objc-msg-xref-server: server to query objc-msg xrefs - objc-msg-xref-statistic: statistics among objc-msg-send reports

    root@kitploit:~
    ## Uso Básico
    ### Escanear AppInfos
    ⚠️ **Porque algumas dependências do Cocoa ainda não foram removidas (como o analisador bplist), atualmente não está disponível no Linux.**```
    > iblessing -m scan -i app-info -f <path-to-app-bundle>
    

    Vamos usar o WeChat como exemplo:```

    iblessing -m scan -i app-info -f WeChat.app [] set output path to /opt/one-btn/tmp/apps/WeChat/Payload [] input file is WeChat.app [] start App Info Scanner [+] find default plist file Info.plist! [] find version info: Name: 微信(WeChat) Version: 7.0.14(18E226) ExecutableName: WeChat [] Bundle Identifier: com.tencent.xin [] the app allows HTTP requests without exception domains! [+] find app deeplinks |-- wechat:// |-- weixin:// |-- fb290293790992170:// |-- weixinapp:// |-- prefs:// |-- wexinVideoAPI:// |-- QQ41C152CF:// |-- wx703:// |-- weixinULAPI:// [] find app callout whitelist |-- qqnews:// |-- weixinbeta:// |-- qqnewshd:// |-- qqmail:// |-- whatsapp:// |-- wxwork:// |-- wxworklocal:// |-- wxcphonebook:// |-- mttbrowser:// |-- mqqapi:// |-- mqzonev2:// |-- qqmusic:// |-- tenvideo2:// ... [+] find 507403 string literals in binary [] process with string literals, this maybe take some time [+] find self deeplinks URLs: |-- weixin://opennativeurl/devicerankview |-- weixin://dl/offlinepay/?appid=%@ |-- weixin://opennativeurl/rankmyhomepage ... [+] find other deeplinks URLs: |-- wxpay://f2f/f2fdetail |-- file://%@?lang=%@&fontRatio=%.2f&scene=%u&version=%u&type=%llu&%@=%d&qqFaceFolderPath=%@&platform=iOS&netType=%@&query=%@&searchId=%@&isHomePage=%d&isWeAppMore=%d&subType=%u&extParams=%@&%@=%@&%@=%@ ... [*] write report to path /opt/one-btn/tmp/apps/WeChat/Payload/WeChat.app_info.iblessing.txt

    ls -alh -rw-r--r--@ 1 soulghost wheel 29K Jul 23 14:01 WeChat.app_info.iblessing.txt

    root@kitploit:~
    ### Digitalizar Class XREFs
    ***Aviso: Apenas Binários ARM64***```
    iblessing -m scan -i objc-class-xref -f <path-to-binary> -d 'classes=<classname_to_scan>,<classname_to_scan>,...'
    

    Dicionários Brutos

    Uma coleção de dicionários usados pelo hashcat e John the Ripper, organizados por serviço alvo, mecanismo de hash e origem dos dados. Pequeno trecho de script shell auxiliar para gerar uma lista de palavras com cem milhões de entradas com base no diretório de entrada analisado...

    root@kitploit:~
    $ ./raw-dictionaries_hashcat_helper.sh
    

    restore-symbol WeChat -o WeChat.restored iblessing -m scan -i objc-class-xref -f WeChat.restored -d 'classes=NSPredicate' [] set output path to /opt/one-btn/tmp/apps/WeChat/Payload [] input file is WeChat [+] detect mach-o header 64 [+] detect litten-endian [] start Objc Class Xref Scanner [] try to find OBJC_CLASS$_NSPredicate [] Step 1. locate class refs [+] find OBJC_CLASS$_NSPredicate at 0x108eb81d8 [] Step 2. find __TEXT,__text [+] find __TEXT,__text at 0x4000 [] Step 3. scan in __text [] start disassembler at 0x100004000 [] \ 0x1002e1a50/0x1069d9874 (2.71%) [+] find OBJC_CLASS$_NSPredicate ref at 0x1002e1a54 ... [] Step 4. symbolicate ref addresses [+] OBJC_CLASS$_NSPredicate -| [+] find OBJC_CLASS$_NSPredicate ref -[WCWatchNotificationMgr addYoCount:contact:type:] at 0x1002e1a54 [+] find OBJC_CLASS$_NSPredicate ref -[NotificationActionsMgr handleSendMsgResp:] at 0x1003e0e28 [+] find OBJC_CLASS$_NSPredicate ref -[FLEXClassesTableViewController searchBar:textDidChange:] at 0x1004a090c [+] find OBJC_CLASS$_NSPredicate ref +[GameCenterUtil parameterValueForKey:fromQueryItems:] at 0x1005a823c [+] find OBJC_CLASS$_NSPredicate ref +[GameCenterUtil getNavigationBarColorForUrl:defaultColor:] at 0x1005a8cd8 ...

    root@kitploit:~
    ### Escaneie Todas as objc_msgSend XREFs
    ***Aviso: ARM64 Binaries Only***
    
    #### Modo Simples```
    iblessing -m scan -i objc-msg-xref -f <path-to-binary>
    

    Modo Anti-Wrapper```

    iblessing -m scan -i objc-msg-xref -f WeChat -d 'antiWrapper=1'

    root@kitploit:~
    O modo anti-wrapper detectará wrappers de objc_msgSend e fará transformações, tais como:```arm
    ; __int64 __usercall objc_msgSend_X0_X22_X20@<X0>(void *obj@<X0>, const char *sel@<X22>, id anyObj@<X20>, ...)
    objc_msgSend_X0_X22_X20:
    MOV             X1, X22
    MOV             X2, X20
    B               objc_msgSend
    

    Exemplo de Uso:```

    iblessing -m scan -i objc-msg-xref -f WeChat -d 'antiWrapper=1' [] set output path to /opt/one-btn/tmp/apps/WeChat/Payload [] input file is WeChat [+] detect mach-o header 64 [+] detect litten-endian

    [] !!! Notice: enter anti-wrapper mode, start anti-wrapper scanner [] start Symbol Wrapper Scanner [] try to find wrappers for_objc_msgSend [] Step1. find __TEXT,__text [+] find __TEXT,__text at 0x100004000 [+] mapping text segment 0x100000000 ~ 0x107cb0000 to unicorn engine [] Step 2. scan in __text [] start disassembler at 0x100004000 [] / 0x1069d986c/0x1069d9874 (100.00%) [] reach to end of __text, stop [+] anti-wrapper finished

    [] start ObjcMethodXrefScanner Exploit Scanner [] Step 1. realize all app classes [] realize classes 14631/14631 (100.00%) [+] get 667318 methods to analyze [] Step 2. dyld load non-lazy symbols [] Step 3. track all calls [] progress: 667318 / 667318 (100.00%) [] Step 4. serialize call chains to file [] saved to /opt/one-btn/tmp/apps/WeChat/Payload/WeChat_method-xrefs.iblessing.txt

    ls -alh WeChat_method-xrefs.iblessing.txt -rw-r--r-- 1 soulghost wheel 63M Jul 23 14:46 WeChat_method-xrefs.iblessing.txt

    head WeChat_method-xrefs.iblessing.txt iblessing methodchains,ver:0.2; chainId,sel,prefix,className,methodName,prevMethods,nextMethods 182360,0x1008a0ab8,+[A8KeyControl initialize],+,A8KeyControl,initialize,[],[4429#0x1008a1064@4376#0x1008a1050@13769#0x1008a10d0] 182343,0x1008a0ad0,+[A8KeyControl_QueryStringTransferCookie initialize],+,A8KeyControl_QueryStringTransferCookie,initialize,[],[4429#0x1008a1064@4376#0x1008a1050@13769#0x1008a10d0] 145393,0x1008c2220,+[A8KeyResultCookieWriter initWithDomain:weakWebView:andCompleteBlock:],+,A8KeyResultCookieWriter,initWithDomain:weakWebView:andCompleteBlock:,[145386#0x10036367c],[] 145396,0x1008c3df8,+[A8KeyResultCookieWriter setA8KeyCookieExpireTime:],+,A8KeyResultCookieWriter,setA8KeyCookieExpireTime:,[145386#0x1003636e8],[] 145397,0x1008c27e8,+[A8KeyResultCookieWriter writeCompleteMarkerCookieValue:forKey:],+,A8KeyResultCookieWriter,writeCompleteMarkerCookieValue:forKey:,[145386#0x10036380c],[] 253456,0x0,+[AAOperationReq init],+,AAOperationReq,init,[253455#0x1039a9d30],[] 253457,0x0,+[AAOperationReq setBaseRequest:],+,AAOperationReq,setBaseRequest:,[253455#0x1039a9d8c],[] 186847,0x0,+[AAOperationRes length],+,AAOperationRes,length,[186845#0x10342aa54],[]

    root@kitploit:~
    O relatório pode ser usado pelos geradores, agora vamos.
    
    ### Generate objc_msgSend Xrefs Query Server
    Você pode iniciar um servidor através do gerador objc-msg-xref-server do iblessing para consultar todos os xrefs de objc_msgSend.```
    iblessing -m generator -i objc-msg-xref-server -f <path-to-report-generated-by-objc-msg-xref-scanner>
    

    Especificar o Host e a Porta de Escuta

    O endereço de escuta padrão é 127.0.0.1:2345, você pode especificá-lo usando a opção -d.``` iblessing -m generator -i objc-msg-xref-server -f WeChat_method-xrefs.iblessing.txt -d 'host=0.0.0.0;port=12345'

    root@kitploit:~
    #### Exemplo de Uso
    ***Aviso: o objc-msg-xref é baseado em unicorn, para acelerar a análise, não seguimos nenhuma chamada, então o resultado está parcialmente faltando.***```
    > iblessing -m generator -i objc-msg-xref-server -f WeChat_method-xrefs.iblessing.txt
    [*] set output path to /opt/one-btn/tmp/apps/WeChat/Payload
    [*] input file is WeChat_method-xrefs.iblessing.txt
    [*] start ObjcMsgXREFServerGenerator
      [*] load method-chain db for version iblessing methodchains,ver:0.2;
      [*] table keys chainId,sel,prefix,className,methodName,prevMethods,nextMethods
    	[-] bad line 104467,0x0,+[TPLock P,	],+,TPLock,P,	,[104426#0x1043b9904],[]
    	[-] bad line 114905,0x0,?[0x108ce1578 (,],?,0x108ce1578,(,,[114900#0x1011e8c68],[]
    	[-] bad line 104464,0x0,?[? P,	],?,?,P,	,[104426#0x1043b98a8],[]
    	[-] bad line 139234,0x0,?[? X
    	[-] bad line ],?,?,X
    	[-] bad line ,[139205#0x1013c222c],[]
    	[+] load storage from disk succeeded!
      [*] listening on http://127.0.0.1:2345
    

    Em seguida, você pode abrir http://127.0.0.1:2345 com um navegador para consultar quaisquer objc_msgSend xrefs que desejar:

    Gerar Scripts IDA para objc_msgSend xrefs

    Você pode adicionar objc_msgSend xrefs gerados a partir do scanner objc-msg-xref para tornar sua jornada de engenharia reversa mais rápida e confortável.``` iblessing -m generator -i ida-objc-msg-xref -f

    root@kitploit:~
    #### Exemplo de Uso
    ***Aviso: o objc-msg-xref é baseado no unicorn, para acelerar a análise, não seguimos nenhuma chamada, então o resultado está parcialmente ausente.***```
    > iblessing -m generator -i ida-objc-msg-xref -f WeChat_method-xrefs.iblessing.txt
    [*] set output path to /opt/one-btn/tmp/apps/WeChat/Payload
    [*] input file is WeChat_method-xrefs.iblessing.txt
    [*] start IDAObjMsgXREFGenerator
      [*] load method-chain db for version iblessing methodchains,ver:0.2;
      [*] table keys chainId,sel,prefix,className,methodName,prevMethods,nextMethods
    	[-] bad line 104467,0x0,+[TPLock P,	],+,TPLock,P,	,[104426#0x1043b9904],[]
    	[-] bad line 114905,0x0,?[0x108ce1578 (,],?,0x108ce1578,(,,[114900#0x1011e8c68],[]
    	[-] bad line 104464,0x0,?[? P,	],?,?,P,	,[104426#0x1043b98a8],[]
    	[-] bad line 139234,0x0,?[? X
    	[-] bad line ],?,?,X
    	[-] bad line ,[139205#0x1013c222c],[]
    	 [+] load storage from disk succeeded!
      [*] Generating XREF Scripts ...
      [*] saved to /opt/one-btn/tmp/apps/WeChat/Payload/WeChat_method-xrefs.iblessing.txt_ida_objc_msg_xrefs.iblessing.py
      
    > ls -alh WeChat_method-xrefs.iblessing.txt_ida_objc_msg_xrefs.iblessing.py
    -rw-r--r--  1 soulghost  wheel    23M Jul 23 16:16 WeChat_method-xrefs.iblessing.txt_ida_objc_msg_xrefs.iblessing.py
    
    > head WeChat_method-xrefs.iblessing.txt_ida_objc_msg_xrefs.iblessing.py
    def add_objc_xrefs():
        ida_xref.add_cref(0x10036367c, 0x1008c2220, XREF_USER)
        ida_xref.add_cref(0x1003636e8, 0x1008c3df8, XREF_USER)
        ida_xref.add_cref(0x10036380c, 0x1008c27e8, XREF_USER)
        ida_xref.add_cref(0x103add16c, 0x700006e187a8, XREF_USER)
        ida_xref.add_cref(0x102cbee0c, 0x101143ee8, XREF_USER)
        ida_xref.add_cref(0x10085c92c, 0x1005e9360, XREF_USER)
        ida_xref.add_cref(0x10085c8bc, 0x1005e9274, XREF_USER)
        ida_xref.add_cref(0x10085c8dc, 0x1005e92bc, XREF_USER)
        ida_xref.add_cref(0x10085c8cc, 0x1005e9298, XREF_USER)
    

    Próximo, abra o IDA -> File -> Script File e carregue o script; esta etapa pode demorar bastante. Quando terminar, você encontrará muitas referências cruzadas (xrefs) para o método objc:

    Digitalizar wrappers de símbolos

    Um arquivo Mach-O pode conter múltiplos wrappers de símbolos importados de bibliotecas dinâmicas comumente usados, como:```arm __text:00000001003842D8 sub_1003842CC ; CODE XREF: -[BDARVLynxTracker eventV3:params:adExtraData:]+168↑p __text:00000001003842D8 ; -[BDARVLynxTracker eventV3:params:adExtraData:]+214↑p ... __text:00000001003842D8 MOV X1, X27 __text:00000001003842DC MOV X2, X19 __text:00000001003842E0 B objc_msgSend

    root@kitploit:~
    Podemos converter o wrapper por usercall:```arm
    __text:00000001003842CC ; id __usercall objc_msgSend_61@<X0>(id@<X23>, const char *@<X28>, ...)
    __text:00000001003842CC _objc_msgSend_61                        ; CODE XREF: -[BDARVLynxTracker eventV3:params:adExtraData:]+2CC↑p
    __text:00000001003842CC                                         ; -[BDARVLynxTracker eventV3:params:adExtraData:]+320↑p ...
    __text:00000001003842CC                 MOV             X0, X23
    __text:00000001003842D0                 MOV             X1, X28
    __text:00000001003842D4                 B               objc_msgSend
    

    O scanner pode gerar um relatório para registrar todos os wrappers. Em seguida, você pode usar o gerador ida-symbol-wrapper-naming para gerar scripts IDA e implementar a renomeação do wrapper e a alteração do protótipo.

    Como Usar```

    iblessing -m scan -i symbol-wrapper -f -d 'symbols=_objc_msgSend,_objc_retain,_objc_release' iblessing -m scan -i symbol-wrapper -f -d 'symbols=*'

    root@kitploit:~
    #### Exemplo de Uso
    Vamos usar o TikTok China como exemplo:```
    > iblessing -m scan -i symbol-wrapper -f /opt/one-btn/tmp/apps/抖音短视频/Payload/Aweme -d 'symbols=*'
    [*] set output path to /Users/soulghost/Desktop/git/iblessing-public/iblessing/build/Debug
    [*] input file is /opt/one-btn/tmp/apps/抖音短视频/Payload/Aweme
    [+] detect mach-o header 64
    [+] detect litten-endian
    [*] start Symbol Wrapper Scanner
      [*] try to find wrappers for_objc_autoreleaseReturnValue, _objc_msgSend, _objc_release, _objc_releaseAndReturn, _objc_retain, _objc_retainAutorelease, _objc_retainAutoreleaseAndReturn, _objc_retainAutoreleaseReturnValue, _objc_retainAutoreleasedReturnValue
      [*] Step1. find __TEXT,__text
    	[+] find __TEXT,__text at 0x100004000
    	[+] mapping text segment 0x100000000 ~ 0x106da0000 to unicorn engine
      [*] Step 2. scan in __text
    	[*] start disassembler at 0x100004000
    	[*] / 0x106b68a54/0x106b68a58 (100.00%)
    	[*] reach to end of __text, stop
    
      [*] Step 3. serialize wrapper graph to file
    	[*] saved to /Users/soulghost/Desktop/git/iblessing-public/iblessing/build/Debug/Aweme_wrapper-graph.iblessing.txt
    
    > head Aweme_wrapper-graph.iblessing.txt
    iblessing symbol-wrappers,ver:0.1;
    wrapperId;address;name;prototype
    0;0x100022190;_objc_retainAutoreleasedReturnValue;id __usercall f@<x0>(id@<x0>)
    1;0x100022198;_objc_retainAutoreleasedReturnValue;id __usercall f@<x0>(id@<x0>)
    2;0x1000221a0;_objc_release;id __usercall f@<x0>(id@<x22>)
    3;0x1000221a8;_objc_msgSend;id __usercall f@<x0>(id@<x0>, const char*@<x20>, ...)
    4;0x100022448;_objc_release;id __usercall f@<x0>(id@<x21>)
    5;0x10009c19c;_objc_autoreleaseReturnValue;id __usercall f@<x0>(id@<x0>)
    6;0x1000b6f94;_objc_msgSend;id __usercall f@<x0>(id@<x0>, const char*@<x1>, ...)
    7;0x100100248;_objc_autoreleaseReturnValue;id __usercall f@<x0>(id@<x0>)
    

    Em seguida, podemos gerar scripts ida a partir deste relatório.

    Gerar Script IDA para Renomear Funções do Runtime Objc e Modificação de Protótipo```

    iblessing -m generator -i ida-symbol-wrapper-naming -f

    root@kitploit:~
    #### Exemplo de Uso```
    > iblessing -m generator -i ida-symbol-wrapper-naming -f Aweme_wrapper-graph.iblessing.txt
    [*] set output path to /Users/soulghost/Desktop/git/iblessing-public/iblessing/build/Debug
    [*] input file is Aweme_wrapper-graph.iblessing.txt
    [*] start IDAObjMsgXREFGenerator
      [*] load symbol-wrappers db for version iblessing symbol-wrappers,ver:0.1;
      [*] table keys wrapperId;address;name;prototype
      [*] Generating Naming Scripts ...
      [*] saved to /Users/soulghost/Desktop/git/iblessing-public/iblessing/build/Debug/Aweme_wrapper-graph.iblessing.txt_ida_symbol_wrapper_naming.iblessing.py
      
    > head Aweme_wrapper-graph.iblessing.txt_ida_symbol_wrapper_naming.iblessing.py
    def namingWrappers():
        idc.set_name(0x100022190, '_objc_retainAutoreleasedReturnValue', ida_name.SN_FORCE)
        idc.apply_type(0x100022190, idc.parse_decl('id __usercall f@<x0>(id@<x0>)', idc.PT_SILENT))
        idc.set_name(0x100022198, '_objc_retainAutoreleasedReturnValue', ida_name.SN_FORCE)
        idc.apply_type(0x100022198, idc.parse_decl('id __usercall f@<x0>(id@<x0>)', idc.PT_SILENT))
        idc.set_name(0x1000221a0, '_objc_release', ida_name.SN_FORCE)
        idc.apply_type(0x1000221a0, idc.parse_decl('id __usercall f@<x0>(id@<x22>)', idc.PT_SILENT))
        idc.set_name(0x1000221a8, '_objc_msgSend', ida_name.SN_FORCE)
        idc.apply_type(0x1000221a8, idc.parse_decl('id __usercall f@<x0>(id@<x0>, const char*@<x20>, ...)', idc.PT_SILENT))
        idc.set_name(0x100022448, '_objc_release', ida_name.SN_FORCE)
    

    Em seguida, abra o seu IDA -> Arquivo -> Arquivo de Script e carregue o script, este passo pode demorar muito tempo. E quando estiver concluído, Você pode observar algumas mudanças no código descompilado:

    ⬇️ ⬇️ ⬇️

    Continua

    Baixar ferramenta