Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
iblessing — iblessing è un toolkit per la sicurezza iOS, che include principalmente raccolta di informazioni sulle applicazioni, analisi statica e analisi dinamica. Può essere utilizzato per reverse engineering, analisi binaria e ricerca di vulnerabilità. | Kitploit
Strumenti/GitHubGitHub/soulghost/iblessing
Analisi StaticaAnalisi Dinamica (Sandboxing)Sicurezza iOSAnalisi delle VulnerabilitàExploitReverse EngineeringSicurezza MobileAnalisi di Binari
GitHubsoulghost/iblessing

iblessing

iblessing è un toolkit per la sicurezza iOS, che include principalmente raccolta di informazioni sulle applicazioni, analisi statica e analisi dinamica. Può essere utilizzato per reverse engineering, analisi binaria e ricerca di vulnerabilità.

684954 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Vedi Repository

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

Build Status Releases

iblessing

  • iblessing è un toolkit per la sicurezza iOS, include principalmente raccolta di informazioni sull'applicazione, analisi statica e analisi dinamica.
  • iblessing si basa su unicorn engine, capstone engine e keystone engine.

Funzionalità

  • 🔥 Multipiattaforma: Testato su macOS e Ubuntu.

  • Estrazione statica di informazioni da app iOS, inclusi metadati, deeplink, URL, ecc.

  • Parser Mach-O e simulatore di bind di simboli dyld

  • Realizzazione e parsing di classi Objective-C

  • Scanner per analisi dinamica del codice assembly arm64 alla ricerca di informazioni chiave o superfici di attacco

  • Scanner che utilizzano unicorn per simulare parzialmente l'esecuzione del codice Mach-O arm64 e trovare alcune caratteristiche

  • Generatori che possono fornire elaborazione secondaria sul report dello scanner per avviare un server di query o generare script per IDA

  • Super scanner objc_msgSend xrefs 😄

    • Emulazione di metodi objc e sottoprocedure (come i blocchi) per generare xrefs come flare-emu
    • Rilevamento wrapper di funzioni objc e generazione di usercall per IDA
    • Analisi delle sottofunzioni di objc_msgSend
    • Blocchi objc che portano a objc_msgSend xrefs negli argomenti e nella lista di cattura
    • Formato report inclusi json, ecc.
    • Parsing di classi e metodi Swift
    • Seguire diramazioni e chiamate
    • SimProcedures per simboli esterni
  • Test

  • Supporto scanner Android

  • Log diagnostici

  • Infrastruttura scanner più flessibile per nuovi plugin scanner

Supporto

Se hai bisogno di supporto riguardo a iblessing o qualsiasi cosa ad esso associata, puoi:

  • creare un issue e fornire le informazioni necessarie
  • contattare Sou1gh0st su Twitter
  • inviare una mail a xiuyutong1994#163.com
  • inviare una mail a xiuyutong1994#gmail.com

Changelog

  • 2021.06.27 - Nuova architettura (Shell Programm + Core Library) e supporto plugin (beta)
  • 2021.01.23 - Aggiunte firme dei metodi per le librerie di sistema (Foundation, UIKit), capacità analitiche ulteriormente migliorate (https://github.com/Soulghost/iblessing/wiki/System-Libraries-(Foundation,-UIKit)-Simple-SimProcedure)
  • 2020.11.30 - Informazioni di reflection Objc (https://github.com/Soulghost/iblessing/wiki/Objc-Reflection-Info)
  • 2020.10.24 - Snapshot delle chiamate Objc (https://github.com/Soulghost/iblessing/wiki/Objc-Call-Snapshots)
  • 2020.10.04 - Supporto lista categorie Objc
  • 2020.09.28 - Supporto librerie statiche e Mach-O fat
  • 2020.09.22 - Stato programma di base e diramazione condizionale
  • 2020.09.04 - Validazione dei metodi, inferenza, supporto objc_msgSendSuper
  • 2020.08.11 - Ora iblessing è uno strumento multipiattaforma, supporta sia macOS che Linux 😆
  • 2020.08.08 - Migliorato scanner objc_msgSend xref, aggiunto supporto xref per subroutine, inclusi argomenti blocco e lista di cattura
  • 2020.07.30 - Migliorato scanner symbol-wrapper, aggiunti script IDA per rinominare wrapper e modificare prototipi
  • 2020.07.21 - Prima release

Per iniziare

⚠️⚠️⚠️ Gli scanner binari richiedono 12GB di spazio di memoria virtuale per caricare un file Mach-O, ma non ne consumeranno così tanto. Quindi è necessario assicurarsi che la memoria fisica della macchina di lavoro sia maggiore di 12GB, o che la memoria virtuale allocabile sia maggiore di 12GB tramite il meccanismo di swap.

  1. Puoi scaricare il binario iblessing pre-rilasciato e usarlo.
  2. Esegui chmod +x per il binario
  3. Per ulteriori tutorial, controlla la Documentazione e Aiuto qui sotto.

Come usare

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

Tutto in un unico binario

  • iblessing-darwin-all/iblessing-linux

Shell Program + Dylib

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

Sviluppa i tuoi strumenti basati su iblessing Framework

  • untar iblessing-framework.tar.gz
  • il tuo binario + libiblessing-core.dylib/libiblessing-core.so + include/iblessing-core
  • codice di esempio: iblessing-core/otool.cpp

Come compilare

CMake

  • Piattaforma: macOS, Linux

Per iniziare a compilare iblessing, segui i passaggi seguenti:``` git clone --recursive -j4 https://github.com/Soulghost/iblessing cd iblessing ./compile-cmake.sh

root@kitploit:~
## Shortcuts
- [Concetti di base](https://github.com/Soulghost/iblessing#basic-concepts)
- Scanner
  - [Scansiona per AppInfos](https://github.com/Soulghost/iblessing#scan-for-appinfos) ⚠️ Attualmente non disponibile su Linux
  - [Scansiona per XREF delle classi](https://github.com/Soulghost/iblessing#scan-for-class-xrefs)
  - [Scansiona per tutti gli XREF di objc_msgSend](https://github.com/Soulghost/iblessing#scan-for-all-objc_msgsend-xrefs)
  - [Scansiona per i Simple Symbol Wrappers](https://github.com/Soulghost/iblessing/blob/features/anti_wrapper/README.md#scan-for-symbol-wrappers)
 
- Generatori
  - [Genera il server di query per Xref di objc_msgSend](https://github.com/Soulghost/iblessing#generate-objc_msgsend-xrefs-query-server)
  - [Genera script IDA per xref di objc_msgSend](https://github.com/Soulghost/iblessing#generate-ida-scripts-for-objc_msgsend-xrefs)
  - [Genera script IDA per il rinomina del wrapper di funzioni objc e modifica del prototipo](https://github.com/Soulghost/iblessing/blob/features/anti_wrapper/README.md#genereate-ida-script-for-objc-runtime-function-rename-and-prototype-modification)

***Se ci sono errori, puoi compilare manualmente capstone e unicorn, quindi trascina libcapstone.a e libunicorn.a nella cartella vendor/libs del progetto Xcode.***

Se tutto viene eseguito correttamente, puoi trovare il binario nella directory build:```
> ls ./build
iblessing

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

Documentazione e Aiuto

Anteprima```

$ 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:~
## Concetti di base
### Scanner
Uno scanner è un componente utilizzato per produrre un report di analisi tramite analisi statica e dinamica di file binari; ad esempio, lo scanner objc-msg-xref è in grado di analizzare dinamicamente la maggior parte dei cross-riferimenti di 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

Generatore

Un generatore è un componente che esegue elaborazioni secondarie sul report generato dallo scanner, ad esempio, può generare script IDA basati sul report dei riferimenti incrociati dello 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:~
## Utilizzo base
### Ricerca di AppInfos
⚠️ **Poiché alcune delle dipendenze da Cocoa non sono state rimosse (come il parser bplist), attualmente non è disponibile su Linux.**```
> iblessing -m scan -i app-info -f <path-to-app-bundle>

Prendiamo WeChat come esempio:```

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:~
### Scansione per XREF di classe
***Avviso: Solo binari ARM64***```
iblessing -m scan -i objc-class-xref -f <path-to-binary> -d 'classes=<classname_to_scan>,<classname_to_scan>,...'

INPUT:```

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:~
### Scansiona tutti gli XREF di objc_msgSend
***Avviso: Solo binari ARM64***

#### Modalità Semplice```
iblessing -m scan -i objc-msg-xref -f <path-to-binary>

Modalità Anti-Wrapper```

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

root@kitploit:~
La modalità anti-wrapper rileverà i wrapper di objc_msgSend e applicherà trasformazioni, come:```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

Esempio di Utilizzo:```

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:~
Il report può essere usato dai generatori, ora andiamo.

### Generate objc_msgSend Xrefs Query Server
Puoi avviare un server tramite il generatore objc-msg-xref-server di iblessing per interrogare tutti gli xref di objc_msgSend.```
iblessing -m generator -i objc-msg-xref-server -f <path-to-report-generated-by-objc-msg-xref-scanner>

Specifica l'host e la porta di ascolto

L'indirizzo di ascolto predefinito è 127.0.0.1:2345, è possibile specificarlo tramite l'opzione -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:~
#### Esempio di utilizzo
***Nota: l'objc-msg-xref si basa su unicorn, per velocizzare l'analisi non seguiamo nessuna chiamata, quindi il risultato è parzialmente incompleto.***```
> 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

Successivamente, puoi aprire http://127.0.0.1:2345 con un browser per interrogare qualsiasi objc_msgSend xref desideri:

Generare script IDA per gli objc_msgSend xref

Puoi aggiungere gli objc_msgSend xref generati dallo scanner objc-msg-xref per rendere il tuo percorso di reverse engineering più veloce e confortevole.``` iblessing -m generator -i ida-objc-msg-xref -f

root@kitploit:~
#### Esempio di Utilizzo
***Avviso: objc-msg-xref è basato su unicorn, per accelerare l'analisi non seguiamo alcuna chiamata, quindi il risultato è parzialmente mancante.***```
> 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)

Successivamente apri IDA -> File -> Script File e carica lo script, questo passaggio potrebbe richiedere molto tempo. E quando è finito, puoi trovare molti xref per il metodo objc:

Scansione per i wrapper di simboli

Un file Mach-O può contenere più wrapper di simboli importati da librerie dinamiche di uso comune, come:```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:~
Possiamo convertire il wrapper tramite 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

Lo scanner può generare un report per registrare tutti i wrapper, quindi puoi usare il generatore ida-symbol-wrapper-naming per generare script IDA e implementare la ridenominazione del wrapper e il cambio di prototipo.

Come Usare```

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:~
#### Esempio di utilizzo
Prenderemo TikTok Cina come esempio:```
> 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>)

Successivamente, possiamo generare ida scripts da questo report.

Genera IDA Script per Objc Runtime Function Rename e Prototype Modification```

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

root@kitploit:~
#### Esempio di utilizzo```
> 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)

Successivamente apri IDA -> File -> Script File e carica lo script, questo passaggio potrebbe richiedere molto tempo. Quando sarà terminato, potrai osservare alcune modifiche nel codice decompilato:

⬇️ ⬇️ ⬇️

Continua...

Scarica lo strumento