Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/soulghost/iblessing
Статический анализДинамический анализ (песочница)Безопасность iOSАнализ уязвимостейЭксплуатацияОбратная инженерияМобильная безопасностьАнализ Бинарных Файлов
GitHubsoulghost/iblessing

iblessing

iblessing — это набор инструментов для эксплуатации безопасности iOS, в основном включающий сбор информации о приложениях, статический и динамический анализ. Он может использоваться для обратной разработки, анализа бинарных файлов и поиска уязвимостей.

684954 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Репозиторий

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

Build Status Releases

iblessing

  • iblessing — это набор инструментов для обеспечения безопасности iOS, который включает в себя сбор информации о приложении, статический анализ и динамический анализ.
  • iblessing основан на unicorn engine, capstone engine и keystone engine.

Возможности

  • 🔥 Кроссплатформенность: протестирован на macOS и Ubuntu.

  • Извлечение статической информации iOS-приложений, включая метаданные, deeplinks, URL и т.д.

  • Парсер Mach-O и симулятор связывания символов dyld

  • Реализация и разбор Objective-C классов

  • Сканеры, выполняющие динамический анализ кода arm64 и находящие ключевую информацию или поверхности атаки

  • Сканеры, использующие unicorn для частичной симуляции выполнения кода Mach-O arm64 и поиска некоторых особенностей

  • Генераторы, которые могут обеспечить вторичную обработку отчёта сканера для запуска сервера запросов или генерации скрипта для IDA

  • Супер-сканер перекрёстных ссылок objc_msgSend 😄

    • Эмуляция методов objc и подпрограмм (например, блоков) для генерации перекрёстных ссылок, как в flare-emu
    • Обнаружение обёрток функций objc и генерация usercall для IDA
    • Анализ подфункций objc_msgSend
    • Перекрёстные ссылки от блоков objc к objc_msgSend в аргументах и списке захвата
    • Формат отчёта, включая JSON и т.д.
    • Разбор классов и методов Swift
    • Отслеживание ветвлений и вызовов
    • SimProcedures для внешних символов
  • Тесты

  • Поддержка сканеров Android

  • Диагностические логи

  • Более гибкая инфраструктура сканеров для новых плагинов

Поддержка

Если вам нужна поддержка по iblessing или связанным с ним вопросам, вы можете:

  • создать issue и предоставить необходимую информацию
  • связаться с Sou1gh0st в Twitter
  • отправить письмо на xiuyutong1994#163.com
  • отправить письмо на xiuyutong1994#gmail.com

Журнал изменений

  • 2021.06.27 — Новая архитектура (Shell-программа + основная библиотека) и поддержка плагинов (бета)
  • 2021.01.23 — Добавлены сигнатуры методов для системных библиотек (Foundation, UIKit), значительно расширены аналитические возможности (https://github.com/Soulghost/iblessing/wiki/System-Libraries-(Foundation,-UIKit)-Simple-SimProcedure)
  • 2020.11.30 — Информация об отражении Objc (https://github.com/Soulghost/iblessing/wiki/Objc-Reflection-Info)
  • 2020.10.24 — Снимки вызовов Objc (https://github.com/Soulghost/iblessing/wiki/Objc-Call-Snapshots)
  • 2020.10.04 — Поддержка списка категорий Objc
  • 2020.09.28 — Поддержка статических библиотек и fat Mach-O
  • 2020.09.22 — Базовое состояние программы и условное ветвление
  • 2020.09.04 — Валидация методов, вывод типов, поддержка objc_msgSendSuper
  • 2020.08.11 — Теперь iblessing — кроссплатформенный инструмент, поддерживающий macOS и Linux 😆
  • 2020.08.08 — Улучшен сканер перекрёстных ссылок objc_msgSend, добавлена поддержка подпрограмм, включая аргументы блоков и список захвата
  • 2020.07.30 — Улучшен сканер обёрток символов, добавлены скрипты IDA для переименования обёрток символов и модификации прототипов
  • 2020.07.21 — Первый релиз

Начало работы

⚠️⚠️⚠️ Двоичным сканерам требуется 12 ГБ виртуальной памяти для загрузки Mach-O файла, но фактически они не потребляют столько. Поэтому убедитесь, что физическая память вашей рабочей машины превышает 12 ГБ, или что выделяемая виртуальная память превышает 12 ГБ через механизм файла подкачки.

  1. Вы можете скачать предварительно собранный бинарный файл iblessing и начать использовать его.
  2. Выполните chmod +x для бинарного файла.
  3. Для получения дополнительных руководств обратитесь к Документации и справке ниже.

Как использовать

  • Релизы https://github.com/Soulghost/iblessing/releases

Единый бинарный файл

  • iblessing-darwin-all/iblessing-linux

Shell-программа + Dylib

  • распакуйте iblessing-framework.tar.gz
  • iblessing-darwin/iblessing-linux + libiblessing-core.dylib/libiblessing-core.so

Разработка собственных инструментов на основе фреймворка iblessing

  • распакуйте iblessing-framework.tar.gz
  • ваш бинарный файл + libiblessing-core.dylib/libiblessing-core.so + include/iblessing-core
  • пример кода: iblessing-core/otool.cpp

Как собрать

CMake

  • Платформа: macOS, Linux

Чтобы начать компиляцию iblessing, выполните следующие шаги:``` git clone --recursive -j4 https://github.com/Soulghost/iblessing cd iblessing ./compile-cmake.sh

root@kitploit:~
## Быстрые ссылки
- [Основные концепции](https://github.com/Soulghost/iblessing#basic-concepts)
- Сканеры
  - [Сканирование AppInfos](https://github.com/Soulghost/iblessing#scan-for-appinfos) ⚠️ В настоящее время недоступно в Linux
  - [Сканирование перекрестных ссылок классов](https://github.com/Soulghost/iblessing#scan-for-class-xrefs)
  - [Сканирование всех перекрестных ссылок objc_msgSend](https://github.com/Soulghost/iblessing#scan-for-all-objc_msgsend-xrefs)
  - [Сканирование простых оберток символов](https://github.com/Soulghost/iblessing/blob/features/anti_wrapper/README.md#scan-for-symbol-wrappers)
 
- Генераторы
  - [Создание сервера запросов перекрестных ссылок objc_msgSend](https://github.com/Soulghost/iblessing#generate-objc_msgsend-xrefs-query-server)
  - [Создание IDA-скриптов для перекрестных ссылок objc_msgSend](https://github.com/Soulghost/iblessing#generate-ida-scripts-for-objc_msgsend-xrefs)
  - [Создание IDA-скриптов для переименования оберток функций Objective-C и изменения прототипов](https://github.com/Soulghost/iblessing/blob/features/anti_wrapper/README.md#genereate-ida-script-for-objc-runtime-function-rename-and-prototype-modification)

***Если возникли ошибки, вы можете вручную скомпилировать capstone и unicorn, затем перетащить libcapstone.a и libunicorn.a в папку vendor/libs проекта Xcode.***

Если все прошло успешно, вы можете найти бинарный файл в каталоге build:```
> ls ./build
iblessing

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

Документация и помощь

Предпросмотр```

$ 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:~
## Основные понятия
### Сканер
Сканер — это компонент, используемый для выдачи отчета анализа через статический и динамический анализ бинарных файлов. Например, сканер objc-msg-xref может динамически анализировать большинство перекрестных ссылок 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

Генератор

Генератор — это компонент, выполняющий вторичную обработку отчета, сгенерированного сканером. Например, он может генерировать IDA-скрипты на основе отчета о перекрестных ссылках сканера 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:~
## Basic Usage
### Scan for AppInfos
⚠️ **Поскольку некоторые зависимости от Cocoa еще не устранены (например, парсер bplist), в настоящее время это недоступно в Linux.**```
> iblessing -m scan -i app-info -f <path-to-app-bundle>

Давайте возьмем WeChat в качестве примера:```

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:~
### Сканирование на наличие перекрестных ссылок классов
***Примечание: Только двоичные файлы ARM64***```
iblessing -m scan -i objc-class-xref -f <path-to-binary> -d 'classes=<classname_to_scan>,<classname_to_scan>,...'

suyu служит мощной основой для всех, кто хочет погрузиться в сохранение игр, образование или разработку фундаментальных эмуляторов. Его пермиссивная лицензия и архитектура делают его идеальной отправной точкой для исследователей, студентов и разработчиков.


[!IMPORTANT] suyu НЕ предназначен для содействия пиратству. Пользователям рекомендуется легально владеть и сбрасывать (дамп) собственные файлы игр. Команда suyu придерживается строгой позиции против пиратства и не поддерживает его использование в незаконных целях.``` 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:~
### Сканировать все objc_msgSend XREFs
***Примечание: Только ARM64 бинарники***

#### Простой режим```
iblessing -m scan -i objc-msg-xref -f <path-to-binary>

Режим Anti-Wrapper```

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

root@kitploit:~
Режим anti-wrapper будет обнаруживать обертки objc_msgSend и выполнять трансформации, такие как:```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

Пример использования:```

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:~
Отчет может использоваться генераторами, теперь приступим.

### Создание objc_msgSend Xrefs Query Server
Вы можете запустить сервер через генератор objc-msg-xref-server от iblessing для запроса всех objc_msgSend xrefs.```
iblessing -m generator -i objc-msg-xref-server -f <path-to-report-generated-by-objc-msg-xref-scanner>

Укажите хост и порт для прослушивания

По умолчанию адрес прослушивания — 127.0.0.1:2345, вы можете указать его с помощью опции -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:~
#### Пример использования
***Примечание: objc-msg-xref основан на unicorn. Для ускорения анализа мы не обрабатываем вызовы, поэтому результат частично неполный.***```
> 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

Next you can open http://127.0.0.1:2345 with a browser to query any objc_msgSend xrefs you like:

Генерация IDA Scripts для перекрёстных ссылок objc_msgSend

Вы можете добавить перекрёстные ссылки objc_msgSend, созданные сканером objc-msg-xref, чтобы сделать ваш процесс реверс-инжиниринга более быстрым и удобным.``` iblessing -m generator -i ida-objc-msg-xref -f

root@kitploit:~
#### Пример использования
***Примечание: objc-msg-xref основан на unicorn; для ускорения анализа мы не обрабатываем вызовы, поэтому результат частично отсутствует.***```
> 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)

Далее откройте IDA -> File -> Script File и загрузите скрипт, этот шаг может занять много времени. Когда он завершится, вы найдете много xrefs для objc метода:

Сканирование оберток символов

Файл Mach-O может содержать несколько оберток часто используемых импортированных символов динамической библиотеки, например: `objc_msgSend````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:~
Мы можем преобразовать обертку с помощью 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

How to Use

Сканер может создать отчет для записи всех оберток, затем вы можете использовать генератор ida-symbol-wrapper-naming для генерации IDA-скриптов и реализации переименования оберток и изменения прототипов.``` 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:~
#### Пример использования
В качестве примера возьмём TikTok China:```
> 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>)

Далее мы можем создать ida скрипты из этого отчета.

Создать IDA скрипт для переименования функций Objc Runtime и модификации прототипов```

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

root@kitploit:~
#### Пример использования```
> 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)

Затем откройте IDA -> File -> Script File и загрузите скрипт, этот шаг может занять много времени. Когда он завершится, вы сможете наблюдать некоторые изменения в декомпилированном коде:

⬇️ ⬇️ ⬇️

Продолжение следует

Скачать инструмент