Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
iblessing — iblessing ist ein Toolkit zur iOS-Sicherheitsausnutzung, das hauptsächlich Anwendungsinformationssammlung, statische Analyse und dynamische Analyse umfasst. Es kann für Reverse Engineering, Binäranalyse und Schwachstellensuche verwendet werden. | Kitploit
Tools/GitHubGitHub/soulghost/iblessing
Statische AnalyseDynamische Analyse (Sandboxing)iOS-SicherheitSchwachstellenanalyseExploitationReverse EngineeringMobile SicherheitBinäranalyse
GitHubsoulghost/iblessing

iblessing

iblessing ist ein Toolkit zur iOS-Sicherheitsausnutzung, das hauptsächlich Anwendungsinformationssammlung, statische Analyse und dynamische Analyse umfasst. Es kann für Reverse Engineering, Binäranalyse und Schwachstellensuche verwendet werden.

68495vor 4 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Repository anzeigen

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

Build Status Releases

iblessing

  • iblessing ist ein iOS-Sicherheits-Exploit-Toolkit, das hauptsächlich Informationssammlung von Anwendungen, statische Analyse und dynamische Analyse umfasst.
  • iblessing basiert auf der Unicorn Engine, der Capstone Engine und der Keystone Engine.

Features

  • 🔥 Plattformübergreifend: Getestet auf macOS und Ubuntu.

  • Extraktion statischer Informationen von iOS-Apps, einschließlich Metadaten, Deeplinks, URLs usw.

  • Mach-O-Parser und dyld-Symbolbindungs-Simulator

  • Objective-C-Klassenrealisierung und -Parsing

  • Scanner, die dynamische Analysen für arm64-Assembly-Code durchführen und Schlüsselinformationen oder Angriffsflächen finden

  • Scanner, die Unicorn verwenden, um die Ausführung von Mach-O arm64-Code teilweise zu simulieren und bestimmte Merkmale zu finden

  • Generatoren, die eine sekundäre Verarbeitung des Scanner-Berichts ermöglichen, um einen Abfrageserver zu starten oder Skripte für IDA zu generieren

  • Super objc_msgSend-xrefs-Scanner 😄

    • Emulation von Objc-Methoden und -Subs (z. B. Blöcke) zur Generierung von xrefs wie bei flare-emu
    • Erkennung von Objc-Funktions-Wrappern und Generierung von IDA-Usercalls
    • Analyse von Objc_msgSend-Sub-Funktionen
    • Objc-Block zu Objc_msgSend-xrefs in Argumenten und Capture-Liste
    • Berichtsformat einschließlich JSON usw.
    • Swift-Klassen- und Methoden-Parsing
    • Verfolgung von Verzweigungen und Aufrufen
    • SimProcedures für externe Symbole
  • Tests

  • Android-Scanner-Unterstützung

  • Diagnoseprotokolle

  • Flexiblere Scanner-Infrastruktur für neue Scanner-Plugins

Unterstützung

Falls Sie Unterstützung bezüglich iblessing oder etwas damit Verbundenem benötigen, können Sie:

  • ein Issue erstellen und die notwendigen Informationen bereitstellen
  • Sou1gh0st auf Twitter kontaktieren
  • eine E-Mail an xiuyutong1994#163.com senden
  • eine E-Mail an xiuyutong1994#gmail.com senden

Änderungsprotokoll

  • 2021.06.27 - Neue Architektur (Shell-Programm + Kernbibliothek) und Plugin-Unterstützung (Beta)
  • 2021.01.23 - Methodensignaturen für Systembibliotheken (Foundation, UIKit) hinzugefügt, die Analysefähigkeiten weiter verbessert (https://github.com/Soulghost/iblessing/wiki/System-Libraries-(Foundation,-UIKit)-Simple-SimProcedure)
  • 2020.11.30 - Objc-Reflection-Info (https://github.com/Soulghost/iblessing/wiki/Objc-Reflection-Info)
  • 2020.10.24 - Objc-Call-Snapshots (https://github.com/Soulghost/iblessing/wiki/Objc-Call-Snapshots)
  • 2020.10.04 - Unterstützung für Objc-Kategorienliste
  • 2020.09.28 - Unterstützung für statische Bibliotheken und fat Mach-O
  • 2020.09.22 - Grundlegender Programmzustand und Bedingungsverzweigungen
  • 2020.09.04 - Methodenvalidierung, Inferierung, objc_msgSendSuper-Unterstützung
  • 2020.08.11 - Jetzt ist iblessing ein plattformübergreifendes Tool, das sowohl macOS als auch Linux unterstützt 😆
  • 2020.08.08 - Verbesserung des objc_msgSend-xref-Scanners, Hinzufügen von Sub-xref-Unterstützung, einschließlich Blockargumenten und Capture-Liste
  • 2020.07.30 - Verbesserung des Symbol-Wrapper-Scanners und Hinzufügen von IDA-Skripten für Symbol-Wrapper-Umbenennung und Prototyp-Modifikation
  • 2020.07.21 - Erste Veröffentlichung

Erste Schritte

⚠️⚠️⚠️ Binäre Scanner benötigen 12 GB virtuellen Speicherplatz zum Laden einer Mach-O-Datei, verbrauchen aber nicht so viel. Sie müssen daher sicherstellen, dass der physische Speicher Ihrer Arbeitsmaschine größer als 12 GB ist, oder dass der zuweisbare virtuelle Speicher über den Auslagerungsmechanismus größer als 12 GB ist.

  1. Sie können das vorab veröffentlichte iblessing-Binary herunterladen und es genießen.
  2. Führen Sie chmod +x für das Binary aus.
  3. Weitere Tutorials finden Sie in der Dokumentation & Hilfe weiter unten.

Verwendung

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

All-in-One-Binary

  • iblessing-darwin-all/iblessing-linux

Shell-Programm + Dylib

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

Entwickeln Sie eigene Werkzeuge basierend auf dem iblessing-Framework

  • iblessing-framework.tar.gz entpacken
  • your binary + libiblessing-core.dylib/libiblessing-core.so + include/iblessing-core
  • sample code: iblessing-core/otool.cpp

Erstellung

CMake

  • Plattform: macOS, Linux

Um mit der Kompilierung von iblessing zu beginnen, befolgen Sie bitte die folgenden Schritte:``` git clone --recursive -j4 https://github.com/Soulghost/iblessing cd iblessing ./compile-cmake.sh

root@kitploit:~
## Tastenkombinationen
- [Grundlegende Konzepte](https://github.com/Soulghost/iblessing#basic-concepts)
- Scanner
  - [Scannen nach AppInfos](https://github.com/Soulghost/iblessing#scan-for-appinfos) ⚠️ Derzeit nicht unter Linux verfügbar
  - [Scannen nach Klassen-XREFs](https://github.com/Soulghost/iblessing#scan-for-class-xrefs)
  - [Scannen nach allen objc_msgSend-XREFs](https://github.com/Soulghost/iblessing#scan-for-all-objc_msgsend-xrefs)
  - [Scannen nach einfachen Symbol-Wrappern](https://github.com/Soulghost/iblessing/blob/features/anti_wrapper/README.md#scan-for-symbol-wrappers)
 
- Generatoren
  - [Erstelle objc_msgSend-Xrefs-Abfrageserver](https://github.com/Soulghost/iblessing#generate-objc_msgsend-xrefs-query-server)
  - [Erstelle IDA-Skripte für objc_msgSend-xrefs](https://github.com/Soulghost/iblessing#generate-ida-scripts-for-objc_msgsend-xrefs)
  - [Erstelle IDA-Skripte für objc-Funktions-Wrapper-Umbenennung und Prototypen-Modifikation](https://github.com/Soulghost/iblessing/blob/features/anti_wrapper/README.md#genereate-ida-script-for-objc-runtime-function-rename-and-prototype-modification)

***Falls Fehler auftreten, können Sie capstone und unicorn manuell kompilieren und dann libcapstone.a und libunicorn.a in das vendor/libs-Verzeichnis des Xcode-Projekts ziehen.***

Wenn alles erfolgreich ausgeführt wird, finden Sie die Binärdatei im build-Verzeichnis:```
> ls ./build
iblessing

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

Dokumentation & Hilfe

Vorschau```

$ 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:~
## Grundlegende Konzepte
### Scanner
Ein Scanner ist eine Komponente, die durch statische und dynamische Analyse von Binärdateien einen Analysebericht erstellt, zum Beispiel kann der objc-msg-xref-Scanner die meisten objc_msgSend-Querverweise dynamisch analysieren.```
[*] 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

Generator

Ein Generator ist eine Komponente, die eine sekundäre Verarbeitung des vom Scanner generierten Berichts durchführt, zum Beispiel kann er IDA-Skripte basierend auf dem Kreuzreferenzbericht des objc-msg-xref-Scanners generieren.``` [*] 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:~
## Basic Usage
### Scan for AppInfos
⚠️ **Da einige Abhängigkeiten von Cocoa noch nicht entfernt wurden (z. B. bplist parser), ist es derzeit unter Linux nicht verfügbar.**```
> iblessing -m scan -i app-info -f <path-to-app-bundle>

Nehmen wir WeChat als Beispiel:```

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:~
### Nach Class XREFs suchen
***Hinweis: Nur ARM64 Binaries***```
iblessing -m scan -i objc-class-xref -f <path-to-binary> -d 'classes=<classname_to_scan>,<classname_to_scan>,...'

Bitte fügen Sie den zu übersetzenden Markdown-Inhalt ein.```

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:~
### Alle objc_msgSend XREFs scannen
***Hinweis: Nur ARM64 Binaries***

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

Anti-Wrapper Mode```

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

root@kitploit:~
Der Anti-Wrapper-Modus erkennt objc_msgSend-Wrapper und führt Transformationen durch, wie:```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

Anwendungsbeispiel:```

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:~
Der Bericht kann von den Generatoren verwendet werden, jetzt geht es los.

### objc_msgSend Xrefs-Abfrage-Server generieren
Sie können einen Server über iblessing's objc-msg-xref-server-Generator starten, um alle objc_msgSend-Xrefs abzufragen.```
iblessing -m generator -i objc-msg-xref-server -f <path-to-report-generated-by-objc-msg-xref-scanner>

Geben Sie den Listening-Host und -Port an

Die Standard-Listening-Adresse ist 127.0.0.1:2345, Sie können sie mit der Option -d angeben.``` iblessing -m generator -i objc-msg-xref-server -f WeChat_method-xrefs.iblessing.txt -d 'host=0.0.0.0;port=12345'

root@kitploit:~
#### Verwendungsbeispiel
***Hinweis: Das objc-msg-xref basiert auf unicorn. Um die Analyse zu beschleunigen, folgen wir keinen Aufrufen, daher fehlt ein Teil des Ergebnisses.***```
> 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

Als Nächstes kannst du http://127.0.0.1:2345 in einem Browser öffnen, um beliebige objc_msgSend-Xrefs abzufragen:

IDA-Skripte für objc_msgSend-Xrefs generieren

Du kannst die vom objc-msg-xref-Scanner generierten objc_msgSend-Xrefs hinzufügen, um deine Reverse-Engineering-Arbeit schneller und komfortabler zu gestalten.``` iblessing -m generator -i ida-objc-msg-xref -f

root@kitploit:~
#### Anwendungsbeispiel
***Hinweis: Der objc-msg-xref basiert auf unicorn. Um die Analyse zu beschleunigen, folgen wir keinen Aufrufen, daher fehlt das Ergebnis teilweise.***```
> 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)

Öffnen Sie als Nächstes Ihre IDA -> Datei -> Skriptdatei und laden Sie das Skript. Dieser Schritt kann lange dauern. Wenn er abgeschlossen ist, finden Sie viele XRefs für die ObjC-Methode:

Nach Symbol-Wrappern suchen

root@kitploit:~
A Mach-O file may contain multiple wrappers of commonly used dynamic library imported symbols, such as:
``````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

Wir können den Wrapper per usercall konvertieren:```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:~
Der Scanner kann einen Bericht erstellen, der alle Wrapper aufzeichnet, dann können Sie den Generator `ida-symbol-wrapper-naming` verwenden, um IDA-Skripte zu generieren und diese Umbenennung und Prototypänderung des Wrappers zu implementieren.

#### Verwendung```
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=*'

Anwendungsbeispiel

Wir nehmen TikTok China als Beispiel:```

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:~
Als Nächstes können wir ida Skripte aus diesem Bericht generieren.

### IDA-Skript für Objc-Laufzeit-Funktionsumbenennung und Prototyp-Modifikation generieren```
iblessing -m generator -i ida-symbol-wrapper-naming -f <path-to-report-from-symbol-wrapper>

Anwendungsbeispiel```

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:~
Öffnen Sie als nächstes Ihre IDA -> Datei -> Skriptdatei und laden Sie das Skript. Dieser Schritt kann lange dauern. Wenn es fertig ist, können Sie einige dekompilierte Codeänderungen beobachten:
![](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)

# Fortsetzung folgt
Tool herunterladen