Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
iblessing — iblessing est un toolkit de sécurité pour iOS, il inclut principalement la collecte d'informations sur les applications, l'analyse statique et l'analyse dynamique. Il peut être utilisé pour le reverse engineering, l'analyse binaire et la recherche de vulnérabilités. | Kitploit
Outils/GitHubGitHub/soulghost/iblessing
Analyse StatiqueAnalyse Dynamique (Sandboxing)Sécurité iOSAnalyse des VulnérabilitésExploitationRétro-ingénierieSécurité MobileAnalyse de Binaires
GitHubsoulghost/iblessing

iblessing

iblessing est un toolkit de sécurité pour iOS, il inclut principalement la collecte d'informations sur les applications, l'analyse statique et l'analyse dynamique. Il peut être utilisé pour le reverse engineering, l'analyse binaire et la recherche de vulnérabilités.

68495il y a 4 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôt

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

Build Status Releases

iblessing

  • iblessing est un toolkit d'exploitation de sécurité iOS, il comprend principalement la collecte d'informations sur l'application, l'analyse statique et l'analyse dynamique.
  • iblessing est basé sur unicorn engine, capstone engine et keystone engine.

Fonctionnalités

  • 🔥 Multi-plateforme : Testé sur macOS et Ubuntu.

  • Extraction d'informations statiques d'apps iOS, incluant métadonnées, deeplinks, URLs, etc.

  • Analyseur Mach-O et simulateur de liaison de symboles dyld

  • Réalisation et analyse de classes Objective-C

  • Scanners effectuant une analyse dynamique du code assembleur arm64 pour trouver des informations clés ou des surfaces d'attaque

  • Scanners utilisant unicorn pour simuler partiellement l'exécution du code Mach-O arm64 et trouver certaines fonctionnalités

  • Générateurs pouvant fournir un traitement secondaire sur le rapport du scanner pour démarrer un serveur de requêtes, ou générer un script pour IDA

  • Super scanner de xrefs objc_msgSend 😄

    • Émulation de méthodes objc et de sous-programmes (tels que les blocks) pour générer des xrefs comme flare-emu
    • Détection de wrapper de fonctions objc et génération d'appels utilisateur IDA
    • Analyse des sous-fonctions objc_msgSend
    • Xrefs de block objc vers objc_msgSend dans les arguments et les listes de capture
    • Format de rapport incluant json, etc.
    • Analyse des classes et méthodes Swift
    • Suivi des branches et des appels
    • SimProcedures pour symboles externes
  • Tests

  • Support des scanners Android

  • Journaux de diagnostic

  • Infrastructure de scanner plus flexible pour nouveaux plugins de scanner

Support

En cas de besoin de support concernant iblessing ou tout ce qui y est associé, vous pouvez :

  • créer un issue et fournir les informations nécessaires
  • contacter Sou1gh0st sur Twitter
  • envoyer un mail à xiuyutong1994#163.com
  • envoyer un mail à xiuyutong1994#gmail.com

Journal des modifications

  • 2021.06.27 - Nouvelle architecture (Programme Shell + Bibliothèque Centrale) et support des plugins (beta)
  • 2021.01.23 - Ajout des signatures de méthodes pour les bibliothèques système (Foundation, UIKit), capacités analytiques renforcées (https://github.com/Soulghost/iblessing/wiki/System-Libraries-(Foundation,-UIKit)-Simple-SimProcedure)
  • 2020.11.30 - Informations de réflexion Objc (https://github.com/Soulghost/iblessing/wiki/Objc-Reflection-Info)
  • 2020.10.24 - Instantanés d'appels Objc (https://github.com/Soulghost/iblessing/wiki/Objc-Call-Snapshots)
  • 2020.10.04 - Support de la liste des catégories Objc
  • 2020.09.28 - Support des bibliothèques statiques et des fichiers Mach-O fat
  • 2020.09.22 - État de base du programme et branchement conditionnel
  • 2020.09.04 - Validation de méthode, inférence, support de objc_msgSendSuper
  • 2020.08.11 - iblessing est désormais un outil multi-plateforme, supportant macOS et Linux 😆
  • 2020.08.08 - Amélioration du scanner de xrefs objc_msgSend, ajout du support des xrefs de sous-programmes, incluant les arguments de block et la liste de capture
  • 2020.07.30 - Amélioration du scanner de wrapper de symboles, ajout de scripts IDA pour le renommage des wrappers de symboles et la modification de prototype
  • 2020.07.21 - Première version

Pour commencer

⚠️⚠️⚠️ Les scanners binaires nécessitent 12 Go d'espace mémoire virtuelle pour charger un fichier Mach-O, mais n'en consommeront pas autant. Vous devez donc vous assurer que la mémoire physique de votre machine de travail est supérieure à 12 Go, ou que la mémoire virtuelle allouable est supérieure à 12 Go via le mécanisme de fichier d'échange.

  1. Vous pouvez télécharger le binaire iblessing pré-publié et en profiter.
  2. Exécutez chmod +x sur le binaire.
  3. Pour plus de tutoriels, veuillez consulter la Documentation & Aide ci-dessous.

Comment utiliser

  • Versions https://github.com/Soulghost/iblessing/releases

Binaire tout-en-un

  • iblessing-darwin-all/iblessing-linux

Programme Shell + Dylib

  • décompressez iblessing-framework.tar.gz
  • iblessing-darwin/iblessing-linux + libiblessing-core.dylib/libiblessing-core.so

Développez vos propres outils basés sur le framework iblessing

  • décompressez iblessing-framework.tar.gz
  • votre binaire + libiblessing-core.dylib/libiblessing-core.so + include/iblessing-core
  • exemple de code : iblessing-core/otool.cpp

Comment compiler

CMake

  • Plateforme : macOS, Linux

Pour commencer à compiler iblessing, veuillez suivre les étapes ci-dessous :``` git clone --recursive -j4 https://github.com/Soulghost/iblessing cd iblessing ./compile-cmake.sh

root@kitploit:~
## Raccourcis
- [Concepts de base](https://github.com/Soulghost/iblessing#basic-concepts)
- Scanners
  - [Analyse des AppInfos](https://github.com/Soulghost/iblessing#scan-for-appinfos) ⚠️ Actuellement non disponible sous Linux
  - [Analyse des XREFs de classes](https://github.com/Soulghost/iblessing#scan-for-class-xrefs)
  - [Analyse de toutes les XREFs objc_msgSend](https://github.com/Soulghost/iblessing#scan-for-all-objc_msgsend-xrefs)
  - [Analyse des wrappers de symboles simples](https://github.com/Soulghost/iblessing/blob/features/anti_wrapper/README.md#scan-for-symbol-wrappers)

- Générateurs
  - [Génération du serveur de requêtes pour les XREFs objc_msgSend](https://github.com/Soulghost/iblessing#generate-objc_msgsend-xrefs-query-server)
  - [Génération de scripts IDA pour les XREFs objc_msgSend](https://github.com/Soulghost/iblessing#generate-ida-scripts-for-objc_msgsend-xrefs)
  - [Génération de scripts IDA pour le renommage des wrappers de fonctions objc et la modification des prototypes](https://github.com/Soulghost/iblessing/blob/features/anti_wrapper/README.md#genereate-ida-script-for-objc-runtime-function-rename-and-prototype-modification)

***S'il y a des erreurs, vous pouvez compiler manuellement capstone et unicorn, puis glisser libcapstone.a et libunicorn.a dans le dossier vendor/libs du projet Xcode.***

Si tout cela s'exécute correctement, vous pouvez trouver le binaire dans le répertoire build :```
> ls ./build
iblessing

> file ./build/iblessing
./build/iblessing: Mach-O 64-bit executable x86_64

Documentation et Aide

Aperçu```

$ 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:~
## Concepts de base
### Scanner
Un scanner est un composant utilisé pour produire un rapport d'analyse grâce à l'analyse statique et dynamique de fichiers binaires, par exemple, le scanner objc-msg-xref peut analyser dynamiquement la plupart des références croisées 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

Générateur

Un générateur est un composant qui effectue un traitement secondaire sur le rapport généré par le scanner, par exemple, il peut générer des scripts IDA basés sur le rapport de références croisées du 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:~
## Utilisation de base
### Rechercher des AppInfos
⚠️ **Parce que certaines dépendances à Cocoa n'ont pas encore été supprimées (comme l'analyseur bplist), il n'est actuellement pas disponible sous Linux.**```
> iblessing -m scan -i app-info -f <path-to-app-bundle>

Prenons WeChat comme exemple:```

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:~
### Analyser les XREFs de classes
***Avis : Binaires ARM64 uniquement***```
iblessing -m scan -i objc-class-xref -f <path-to-binary> -d 'classes=<classname_to_scan>,<classname_to_scan>,...'

cela crée un binaire hello qui remplace effectivement la commande CMD par défaut par ["node", "index.js"]. L'image amorçable est générée en utilisant Bazel.

  1. Modèles d'images communautaires sécurisées : La configuration de construction Bazel peut intégrer de manière optionnelle npm-audit pour analyser les dépendances vulnérables avant la création de l'image. Pour une analyse détaillée de la conception des images communautaires, référez-vous à notre blog technique : Construire une image Docker infaillible pour les images communautaires.

  2. Images durcies sécurisées : Nous étendons les images de base sécurisées de l'étape 1 en appliquant le script de durcissement. Le script met en œuvre les recommandations du benchmark CIS et définit des configurations de sécurité pour optimiser encore davantage la posture de sécurité du conteneur.```

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:~
### Scan for All objc_msgSend XREFs
***Avis : Binaires ARM64 uniquement***

#### Mode simple```
iblessing -m scan -i objc-msg-xref -f <path-to-binary>

Mode anti-wrapper```

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

root@kitploit:~
Le mode anti-wrapper détectera les wrappers objc_msgSend et effectuera des transformations, telles que :```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

Exemple d'utilisation :```

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:~
Le rapport peut être utilisé par les générateurs, maintenant allons-y.

### Générer un serveur de requêtes de références croisées objc_msgSend
Vous pouvez démarrer un serveur via le générateur objc-msg-xref-server d'iblessing pour interroger toutes les références croisées objc_msgSend.```
iblessing -m generator -i objc-msg-xref-server -f <path-to-report-generated-by-objc-msg-xref-scanner>

Spécifier l'hôte et le port d'écoute

L'adresse d'écoute par défaut est 127.0.0.1:2345, vous pouvez la spécifier avec l'option -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:~
#### Exemple d'utilisation
***Remarque : objc-msg-xref est basé sur unicorn, pour accélérer l'analyse, nous ne suivons aucun appel, donc le résultat est partiellement manquant.***```
> 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

Ensuite, vous pouvez ouvrir http://127.0.0.1:2345 dans un navigateur pour interroger les xrefs objc_msgSend de votre choix :

Générer des scripts IDA pour les xrefs objc_msgSend

Vous pouvez ajouter les xrefs objc_msgSend générés par le scanner objc-msg-xref pour rendre votre parcours de rétro-ingénierie plus rapide et plus confortable.``` iblessing -m generator -i ida-objc-msg-xref -f

root@kitploit:~
#### Exemple d'utilisation
***Remarque : objc-msg-xref est basé sur unicorn, pour accélérer l'analyse, nous ne suivons aucun appel, donc le résultat est partiellement manquant.***```
> 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)

Ensuite, ouvrez votre IDA -> Fichier -> Script File et chargez le script, cette étape peut prendre beaucoup de temps. Et une fois terminé, vous pouvez trouver de nombreuses références croisées pour la méthode objc :

Rechercher les wrappers de symboles

Un fichier Mach-O peut contenir plusieurs wrappers de symboles importés de bibliothèques dynamiques couramment utilisés, par exemple :

root@kitploit:~
__Z8getValuev
__Z8getValuev
``````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

Nous pouvons convertir le wrapper par usercall:```arm __text:00000001003842CC ; id __usercall objc_msgSend_61@(id@, const char *@, ...) __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

root@kitploit:~
Le scanner peut générer un rapport pour enregistrer tous les wrappers, puis vous pouvez utiliser le générateur `ida-symbol-wrapper-naming` pour générer des scripts IDA et implémenter ce changement de nom de wrapper et de prototype.

#### Comment utiliser```
iblessing -m scan -i symbol-wrapper -f <path-to-binary> -d 'symbols=_objc_msgSend,_objc_retain,_objc_release'
iblessing -m scan -i symbol-wrapper -f <path-to-binary> -d 'symbols=*'

Exemple d'utilisation

Nous prendrons TikTok China comme exemple :```

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@(id@) 1;0x100022198;_objc_retainAutoreleasedReturnValue;id __usercall f@(id@) 2;0x1000221a0;_objc_release;id __usercall f@(id@) 3;0x1000221a8;_objc_msgSend;id __usercall f@(id@, const char*@, ...) 4;0x100022448;_objc_release;id __usercall f@(id@) 5;0x10009c19c;_objc_autoreleaseReturnValue;id __usercall f@(id@) 6;0x1000b6f94;_objc_msgSend;id __usercall f@(id@, const char*@, ...) 7;0x100100248;_objc_autoreleaseReturnValue;id __usercall f@(id@)

root@kitploit:~
Ensuite, nous pouvons générer des scripts ida à partir de ce rapport.

### Générer un script IDA pour le renommage de fonctions Runtime Objc et la modification de prototypes```
iblessing -m generator -i ida-symbol-wrapper-naming -f <path-to-report-from-symbol-wrapper>

Exemple d'utilisation```

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@(id@)', idc.PT_SILENT)) idc.set_name(0x100022198, '_objc_retainAutoreleasedReturnValue', ida_name.SN_FORCE) idc.apply_type(0x100022198, idc.parse_decl('id __usercall f@(id@)', idc.PT_SILENT)) idc.set_name(0x1000221a0, '_objc_release', ida_name.SN_FORCE) idc.apply_type(0x1000221a0, idc.parse_decl('id __usercall f@(id@)', idc.PT_SILENT)) idc.set_name(0x1000221a8, '_objc_msgSend', ida_name.SN_FORCE) idc.apply_type(0x1000221a8, idc.parse_decl('id __usercall f@(id@, const char*@, ...)', idc.PT_SILENT)) idc.set_name(0x100022448, '_objc_release', ida_name.SN_FORCE)

root@kitploit:~
Ensuite ouvrez votre IDA -> File -> Script File et chargez le script, cette étape peut prendre beaucoup de temps. Et une fois terminé, vous pouvez observer quelques changements dans le code décompilé :
![](https://raw.githubusercontent.com/Soulghost/iblessing/features/anti_wrapper/resource/images/ida_wrapped_call_before.png?raw=true)

:arrow_down: :arrow_down: :arrow_down:

![](https://raw.githubusercontent.com/Soulghost/iblessing/features/anti_wrapper/resource/images/ida_wrapped_call_after.png?raw=true)

# À suivre
Télécharger l’outil