Translated ['macos-hardening/macos-security-and-privilege-escalation/mac

This commit is contained in:
Translator 2024-09-03 22:04:55 +00:00
parent af0873f9d7
commit 9b0091c18f

View file

@ -1,16 +1,16 @@
# macOS Uygulamaları - İnceleme, hata ayıklama ve Fuzzing
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking'i öğrenin ve pratik yapın:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** bizi takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}
@ -19,11 +19,11 @@ GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt=
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevler sunan **dark-web** destekli bir arama motorudur.
[**WhiteIntel**](https://whiteintel.io), bir şirketin veya müşterilerinin **stealer malwares** tarafından **tehdit edilip edilmediğini** kontrol etmek için **ücretsiz** işlevsellikler sunan **karanlık ağ** destekli bir arama motorudur.
WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.
WhiteIntel'in ana hedefi, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.
Websitesini ziyaret edebilir ve **ücretsiz** olarak motorlarını deneyebilirsiniz:
Web sitelerini kontrol edebilir ve motorlarını **ücretsiz** deneyebilirsiniz:
{% embed url="https://whiteintel.io" %}
@ -36,17 +36,7 @@ Websitesini ziyaret edebilir ve **ücretsiz** olarak motorlarını deneyebilirsi
otool -L /bin/ls #List dynamically linked libraries
otool -tv /bin/ps #Decompile application
```
{% code overflow="wrap" %}
Aşağıda, macOS uygulamalarını inceleme, hata ayıklama ve bulanıklık testi yapma süreçlerini adım adım açıklanmaktadır.
1. **Uygulamaları İnceleme**: Uygulamanın işlevselliğini ve güvenlik önlemlerini anlamak için statik analiz araçları kullanın.
2. **Hata Ayıklama**: Uygulamanın çalışma zamanındaki davranışını anlamak için dinamik analiz araçları ve hata ayıklama tekniklerini kullanın.
3. **Bulanıklık Testi (Fuzzing)**: Uygulamanın girdilerine rastgele veriler göndererek hatalı davranışları tespit etmeye çalışın.
Bu adımları uygulayarak, macOS uygulamalarının güvenlik açıklarını tespit edebilir ve geliştiricilerin bu açıkları kapatmalarına yardımcı olabilirsiniz.
{% code overflow="wrap" %}
```bash
objdump -m --dylibs-used /bin/ls #List dynamically linked libraries
objdump -m -h /bin/ls # Get headers information
@ -61,7 +51,7 @@ nm -m ./tccd # List of symbols
```
### jtool2 & Disarm
[**buradan disarm'ı indirebilirsiniz**](https://newosxbook.com/tools/disarm.html).
Buradan [**disarm'ı indirin**](https://newosxbook.com/tools/disarm.html).
```bash
ARCH=arm64e disarm -c -i -I --signature /path/bin # Get bin info and signature
ARCH=arm64e disarm -c -l /path/bin # Get binary sections
@ -70,7 +60,7 @@ ARCH=arm64e disarm -c -S /path/bin # Get symbols (func names, strings...)
ARCH=arm64e disarm -c -d /path/bin # Get disasembled
jtool2 -d __DATA.__const myipc_server | grep MIG # Get MIG info
```
[**jtool2'yi buradan indirebilirsiniz**](http://www.newosxbook.com/tools/jtool.html) veya `brew` ile kurabilirsiniz.
You can [**jtool2'yi buradan indirin**](http://www.newosxbook.com/tools/jtool.html) veya `brew` ile kurabilirsiniz.
```bash
# Install
brew install --cask jtool2
@ -88,13 +78,13 @@ ARCH=x86_64 jtool2 --sig /System/Applications/Automator.app/Contents/MacOS/Autom
jtool2 -d __DATA.__const myipc_server | grep MIG
```
{% hint style="danger" %}
**jtool, yerine disarm tercih edilmektedir**
**jtool, disarm lehine kullanımdan kaldırılmıştır**
{% endhint %}
### Codesign / ldid
{% hint style="success" %}
**`Codesign`**, **macOS**'ta bulunurken **`ldid`**, **iOS**'ta bulunur
**`Codesign`** **macOS**'de bulunabilirken, **`ldid`** **iOS**'de bulunabilir
{% endhint %}
```bash
# Get signer
@ -124,49 +114,51 @@ ldid -S/tmp/entl.xml <binary>
```
### SuspiciousPackage
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html), kurmadan önce **.pkg** dosyalarını (kurulum dosyaları) incelemek ve içinde ne olduğunu görmek için kullanışlı bir araçtır.\
Bu kurulum dosyaları genellikle kötü amaçlı yazılım yazarlarının genellikle kötü amaçlı yazılımı **sürdürmek** için istismar ettikleri `preinstall` ve `postinstall` bash betiklerine sahiptir.
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) , **.pkg** dosyalarını (kurulum dosyaları) incelemek ve yüklemeden önce içeriğini görmek için yararlı bir araçtır.\
Bu kurulum dosyaları, kötü amaçlı yazılım yazarlarının genellikle kötüye kullandığı `preinstall` ve `postinstall` bash betikleri içerir, bu da **kötü amaçlı yazılımın** **sürekliliğini** sağlar.
### hdiutil
Bu araç, Apple disk görüntülerini (**.dmg**) incelemek için dosyaları **bağlamayı** sağlar:
Bu araç, herhangi bir şeyi çalıştırmadan önce Apple disk görüntülerini (**.dmg**) **monte** etmeye olanak tanır:
```bash
hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg
```
### Paketlenmiş ikili dosyalar
It will be mounted in `/Volumes`
* Yüksek entropi kontrolü yapın
* Dizeleri kontrol edin (anlaşılabilir dize neredeyse yoksa, paketlenmiş)
* MacOS için UPX paketleyici bir "\_\_XHDR" adında bir bölüm oluşturur
### Packed binaries
* Yüksek entropi kontrolü
* String'leri kontrol et (anlaşılır string yoksa, packed)
* MacOS için UPX packer, "\_\_XHDR" adında bir bölüm oluşturur
## Statik Objective-C analizi
### Meta veri
### Metadata
{% hint style="danger" %}
Objective-C ile yazılan programların [Mach-O ikili dosyalarına](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md) derlendiğinde sınıf bildirimlerini **sakladığını unutmayın**. Bu tür sınıf bildirimleri şunları içerir:
Objective-C ile yazılmış programların **derlendiğinde** [Mach-O ikili dosyalarına](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md) **sınıf bildirimlerini** **koruduğunu** unutmayın. Bu tür sınıf bildirimleri **şunları içerir**:
{% endhint %}
* Tanımlanan arayüzler
* Arayüz metodları
* Arayüz yöntemleri
* Arayüz örnek değişkenleri
* Tanımlanan protokoller
Bu isimler, ikili dosyanın tersine mühendisliğini zorlaştırmak için karıştırılabilir.
Bu isimlerin, ikilinin tersine çevrilmesini zorlaştırmak için obfuscate edilebileceğini unutmayın.
### Fonksiyon çağrısı
Objective-C kullanan bir ikili dosyada bir fonksiyon çağrıldığında, derlenmiş kod o fonksiyonu çağırmak yerine **`objc_msgSend`**'i çağıracaktır. Bu fonksiyon son fonksiyonu çağıracaktır:
Bir ikilide Objective-C kullanan bir fonksiyon çağrıldığında, derlenmiş kod o fonksiyonu çağırmak yerine **`objc_msgSend`** çağrısını yapar. Bu, nihai fonksiyonu çağıracaktır:
![](<../../../.gitbook/assets/image (305).png>)
Bu fonksiyonun beklediği parametreler şunlardır:
* İlk parametre (**self**), "mesajı alacak sınıf örneğine işaret eden bir işaretçi"dir. Daha basitçe, bu, yöntemin çağrıldığı nesnedir. Eğer yöntem bir sınıf yöntemi ise, bu, sınıf nesnesinin bir örneği olacaktır, bir örnek yöntem için ise, self, bir nesne olarak sınıfın örneğine işaret edecektir.
* İkinci parametre, (**op**), "mesajı işleyen yöntemin seçicisi"dir. Daha basitçe, bu sadece yöntemin **adıdır**.
* Geri kalan parametreler, yöntem tarafından gereken **değerlerdir** (op).
* İlk parametre (**self**) "mesajı alacak **sınıfın örneğine işaret eden bir işaretçi**"dir. Daha basit bir ifadeyle, bu, metodun çağrıldığı nesnedir. Eğer metod bir sınıf metoduysa, bu sınıf nesnesinin (bütün olarak) bir örneği olacaktır, oysa bir örnek metodu için, self sınıfın bir nesnesi olarak oluşturulmuş bir örneğe işaret edecektir.
* İkinci parametre (**op**), "mesajı işleyen metodun seçicisidir". Yine, daha basit bir ifadeyle, bu sadece **metodun adıdır.**
* Kalan parametreler, metodun gerektirdiği herhangi bir **değerdir** (op).
Bu bilgilere **ARM64**'te `lldb` ile nasıl kolayca ulaşılacağını buradan görebilirsiniz:
Bu bilgiyi **`lldb` ile ARM64'te nasıl kolayca alacağınızı** bu sayfada görün:
{% content-ref url="arm64-basic-assembly.md" %}
[arm64-basic-assembly.md](arm64-basic-assembly.md)
@ -174,27 +166,27 @@ Bu bilgilere **ARM64**'te `lldb` ile nasıl kolayca ulaşılacağını buradan g
x64:
| **Argüman** | **Register** | **(için) objc\_msgSend** |
| **Argument** | **Register** | **(for) objc\_msgSend** |
| ----------------- | --------------------------------------------------------------- | ------------------------------------------------------ |
| **1. argüman** | **rdi** | **self: yöntemin çağrıldığı nesne** |
| **2. argüman** | **rsi** | **op: yöntemin adı** |
| **3. argüman** | **rdx** | **yönteme 1. argüman** |
| **4. argüman** | **rcx** | **yönteme 2. argüman** |
| **5. argüman** | **r8** | **yönteme 3. argüman** |
| **6. argüman** | **r9** | **yönteme 4. argüman** |
| **7. ve sonraki argüman** | <p><strong>rsp+</strong><br><strong>(yığında)</strong></p> | **yönteme 5. ve sonraki argümanlar** |
| **1st argument** | **rdi** | **self: metodun çağrıldığı nesne** |
| **2nd argument** | **rsi** | **op: metodun adı** |
| **3rd argument** | **rdx** | **metoda 1. argüman** |
| **4th argument** | **rcx** | **metoda 2. argüman** |
| **5th argument** | **r8** | **metoda 3. argüman** |
| **6th argument** | **r9** | **metoda 4. argüman** |
| **7th+ argument** | <p><strong>rsp+</strong><br><strong>(stack'te)</strong></p> | **metoda 5. ve üzeri argüman** |
### ObjectiveC meta verilerini dökün
### Dump ObjectiveC metadata
### Dynadump
[**Dynadump**](https://github.com/DerekSelander/dynadump), Objective-C ikili dosyalarını sınıf-dump etmek için bir araçtır. Github dylib'leri belirtse de bu aynı zamanda yürütülebilir dosyalarla da çalışır.
[**Dynadump**](https://github.com/DerekSelander/dynadump), Objective-C ikili dosyalarını sınıf dökümü yapmak için bir araçtır. Github, dylib'leri belirtmektedir ancak bu yürütülebilir dosyalarla da çalışır.
```bash
./dynadump dump /path/to/bin
```
Şu anda yazıldığı zaman, bu **şu anda en iyi çalışan** olanıdır.
Yazım zamanı itibarıyla, bu **şu anda en iyi çalışanıdır**.
#### Düzenli araçlar
#### Normal araçlar
```bash
nm --dyldinfo-only /path/to/bin
otool -ov /path/to/bin
@ -202,13 +194,13 @@ objdump --macho --objc-meta-data /path/to/bin
```
#### class-dump
[**class-dump**](https://github.com/nygard/class-dump/) orijinal bir araçtır ve ObjetiveC biçimli kodlardaki sınıflar, kategoriler ve protokoller için deklarasyonlar oluşturur.
[**class-dump**](https://github.com/nygard/class-dump/) ObjectiveC formatında sınıflar, kategoriler ve protokoller için bildirimler üreten orijinal araçtır.
Eski ve bakımsız olduğundan dolayı muhtemelen düzgün çalışmayacaktır.
Eski ve bakımsızdır, bu yüzden muhtemelen düzgün çalışmayacaktır.
#### ICDump
[**iCDump**](https://github.com/romainthomas/iCDump) modern ve çapraz platformlu bir Objective-C sınıf döküm aracıdır. Mevcut araçlarla karşılaştırıldığında, iCDump Apple ekosisteminden bağımsız olarak çalışabilir ve Python bağlantıları sunar.
[**iCDump**](https://github.com/romainthomas/iCDump) modern ve çapraz platform Objective-C sınıf dökümüdür. Mevcut araçlarla karşılaştırıldığında, iCDump Apple ekosisteminden bağımsız olarak çalışabilir ve Python bağlamalarınıığa çıkarır.
```python
import icdump
metadata = icdump.objc.parse("/path/to/bin")
@ -217,9 +209,9 @@ print(metadata.to_decl())
```
## Statik Swift analizi
Swift ikilileri ile, Objective-C uyumluluğu olduğundan bazen [class-dump](https://github.com/nygard/class-dump/) kullanarak deklarasyonları çıkarabilirsiniz ancak her zaman mümkün olmayabilir.
Swift ikili dosyaları ile, Objective-C uyumluluğu olduğundan, bazen [class-dump](https://github.com/nygard/class-dump/) kullanarak bildirimleri çıkartabilirsiniz ama her zaman değil.
**`jtool -l`** veya **`otool -l`** komut satırları ile başlayan birkaç bölüm bulmak mümkündür: **`__swift5`** öneki:
**`jtool -l`** veya **`otool -l`** komut satırları ile **`__swift5`** ön eki ile başlayan birkaç bölüm bulmak mümkündür:
```bash
jtool2 -l /Applications/Stocks.app/Contents/MacOS/Stocks
LC 00: LC_SEGMENT_64 Mem: 0x000000000-0x100000000 __PAGEZERO
@ -231,9 +223,9 @@ Mem: 0x100027064-0x1000274cc __TEXT.__swift5_fieldmd
Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture
[...]
```
Ayrıca, bu bölümde depolanan bilgiler hakkında daha fazla bilgiye [bu blog yazısında](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html) ulaşabilirsiniz.
Bu bölümde saklanan [**bilgiler hakkında daha fazla bilgiye bu blog yazısından ulaşabilirsiniz**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html).
Ayrıca, **Swift ikili dosyalarının sembolleri olabilir** (örneğin kütüphaneler sembolleri depolamalıdır böylece işlevlerine çağrı yapılabilir). **Semboller genellikle işlev adı ve özniteliği hakkında bilgi içerir** ve çirkin bir şekilde saklanır, bu yüzden çok yararlıdır ve **"demanglers"** adında orijinal adı alabilen araçlar bulunmaktadır:
Ayrıca, **Swift ikili dosyaları sembollere sahip olabilir** (örneğin, kütüphanelerin fonksiyonlarının çağrılabilmesi için sembolleri saklaması gerekir). **Semboller genellikle fonksiyon adı ve attr hakkında çirkin bir şekilde bilgi içerir**, bu nedenle çok faydalıdırlar ve orijinal adı alabilen "**demanglers"** vardır:
```bash
# Ghidra plugin
https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py
@ -244,77 +236,77 @@ swift demangle
## Dinamik Analiz
{% hint style="warning" %}
Not edin ki, ikili dosyaları hata ayıklamak için **SIP devre dışı bırakılmalıdır** (`csrutil disable` veya `csrutil enable --without debug`) veya ikili dosyaları geçici bir klasöre kopyalayıp **imzayı kaldırmak** için `codesign --remove-signature <binary-path>` veya ikilinin hata ayıklanmasına izin vermek (bu betiği kullanabilirsiniz [bu betik](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b))
Not edin ki, ikili dosyaları hata ayıklamak için, **SIP devre dışı bırakılmalıdır** (`csrutil disable` veya `csrutil enable --without debug`) veya ikili dosyaları geçici bir klasöre kopyalamak ve **imzayı kaldırmak** için `codesign --remove-signature <binary-path>` komutunu kullanmak ya da ikili dosyanın hata ayıklanmasına izin vermek gerekir (bunu [bu script](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b) ile kullanabilirsiniz).
{% endhint %}
{% hint style="warning" %}
Not edin ki, macOS'ta **sistem ikililerini enstrümanize etmek** için (örneğin `cloudconfigurationd`), **SIP devre dışı bırakılmalıdır** (sadece imzayı kaldırmak işe yaramaz).
Not edin ki, macOS'ta **sistem ikililerini enstrümante etmek** (örneğin `cloudconfigurationd` gibi) için, **SIP devre dışı bırakılmalıdır** (sadece imzayı kaldırmak işe yaramaz).
{% endhint %}
### API'lar
### API'ler
macOS, işlemler hakkında bilgi veren bazı ilginç API'ler sunar:
macOS, süreçler hakkında bilgi veren bazı ilginç API'ler sunar:
* `proc_info`: Bu, her işlem hakkında birçok bilgi veren ana API'dir. Diğer işlemler hakkında bilgi almak için kök kullanıcı olmanız gerekir, ancak özel yetkilere veya mach portlarına ihtiyacınız yoktur.
* `libsysmon.dylib`: İşlemler hakkında bilgi almayı sağlar XPC iletişimine açık işlevler aracılığıyla, ancak `com.apple.sysmond.client` yetkisine sahip olmak gereklidir.
* `proc_info`: Bu, her süreç hakkında çok fazla bilgi veren ana API'dir. Diğer süreçlerin bilgilerini almak için root olmanız gerekir, ancak özel yetkilere veya mach portlarına ihtiyacınız yoktur.
* `libsysmon.dylib`: XPC tarafından sunulan işlevler aracılığıyla süreçler hakkında bilgi almayı sağlar, ancak `com.apple.sysmond.client` yetkisine sahip olmak gerekir.
### Stackshot ve microstackshots
### Stackshot & mikrostackshotlar
**Stackshotting**, işlemlerin durumunu yakalamak için kullanılan bir tekniktir, tüm çalışan iş parçacıklarının çağrı yığınlarını içerir. Bu, özellikle hata ayıklama, performans analizi ve sistemin belirli bir noktasındaki davranışını anlama açısından oldukça yararlıdır. iOS ve macOS'ta, stackshotting, **`sample`** ve **`spindump`** gibi araçlar ve yöntemler kullanılarak gerçekleştirilebilir.
**Stackshotting**, süreçlerin durumunu, tüm çalışan iş parçalarının çağrı yığınlarını içerecek şekilde yakalamak için kullanılan bir tekniktir. Bu, hata ayıklama, performans analizi ve sistemin belirli bir zamanda davranışını anlamak için özellikle yararlıdır. iOS ve macOS'ta, stackshotting, **`sample`** ve **`spindump`** gibi çeşitli araçlar ve yöntemler kullanılarak gerçekleştirilebilir.
### Sysdiagnose
Bu araç (`/usr/bini/ysdiagnose`), temelde `ps`, `zprint` gibi onlarca farklı komutu çalıştırarak bilgisayarınızdan birçok bilgi toplar.
Bu araç (`/usr/bini/ysdiagnose`), bilgisayarınızdan `ps`, `zprint` gibi onlarca farklı komut çalıştırarak çok fazla bilgi toplar...
Bu **kök** olarak çalıştırılmalıdır ve `/usr/libexec/sysdiagnosed` daemon'ı `com.apple.system-task-ports` ve `get-task-allow` gibi oldukça ilginç yetkilere sahiptir.
**root** olarak çalıştırılmalıdır ve daemon `/usr/libexec/sysdiagnosed` çok ilginç yetkilere sahiptir, bunlar arasında `com.apple.system-task-ports` ve `get-task-allow` bulunmaktadır.
Plist dosyası `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist` içinde bulunur ve 3 MachServices'i tanımlar:
Plist'i `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist` konumunda bulunur ve 3 MachServices tanımlar:
* `com.apple.sysdiagnose.CacheDelete`: /var/rmp içindeki eski arşivleri siler
* `com.apple.sysdiagnose.kernel.ipc`: Özel port 23 (çekirdek)
* `com.apple.sysdiagnose.kernel.ipc`: Özel port 23 (kernel)
* `com.apple.sysdiagnose.service.xpc`: `Libsysdiagnose` Obj-C sınıfı aracılığıyla kullanıcı modu arayüzü. Bir sözlükte üç argüman geçirilebilir (`compress`, `display`, `run`)
### Birleşik Günlükler
MacOS, bir uygulamayı çalıştırırken **ne yaptığını anlamaya çalışırken** oldukça yararlı olabilecek birçok günlük oluşturur.
MacOS, bir uygulama çalıştırırken **ne yaptığını anlamaya** yardımcı olabilecek çok sayıda günlük üretir.
Ayrıca, bazı günlükler, bazı **kullanıcı** veya **bilgisayar** **tanımlanabilir** bilgileri **gizlemek** için `<private>` etiketini içerecektir. Bununla birlikte, bu bilgileri açıklamak için bir sertifika **yüklenebilir**. [**Buradan**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log) açıklamaları takip edin.
Ayrıca, bazı günlükler, bazı **kullanıcı** veya **bilgisayar** **tanımlanabilir** bilgileri **gizlemek için** `<private>` etiketini içerecektir. Ancak, bu bilgileri ifşa etmek için **bir sertifika yüklemek mümkündür**. [**buradan**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log) açıklamaları takip edin.
### Hopper
#### Sol panel
Hopper'ın sol panelinde, ikilinin sembolleri (**Etiketler**), prosedürlerin ve işlevlerin listesi (**Proc**) ve dizeler (**Str**) görülebilir. Bunlar tüm dizeler değildir, ancak Mac-O dosyasının çeşitli bölümlerinde tanımlananlar (örneğin _cstring veya_ `objc_methname`) dır.
Hopper'ın sol panelinde, ikilinin sembollerini (**Etiketler**), prosedürler ve işlevler listesini (**Proc**) ve dizeleri (**Str**) görebilirsiniz. Bunlar tüm dizeler değildir, ancak Mac-O dosyasının çeşitli bölümlerinde tanımlananlardır (örneğin _cstring veya_ `objc_methname`).
#### Orta panel
Orta panelde **dizilmiş kodu** görebilirsiniz. Ve bunu **ham** bir şekilde, **grafik** olarak, **derlenmiş** ve **ikili** olarak görebilirsiniz, ilgili simgeye tıklayarak:
Orta panelde **dıtılmış kodu** görebilirsiniz. Ve bunu **ham** dağıtım, **graf** olarak, **decompile edilmiş** ve **ikili** olarak ilgili simgeye tıklayarak görebilirsiniz:
<figure><img src="../../../.gitbook/assets/image (343).png" alt=""><figcaption></figcaption></figure>
Bir kod nesnesine sağ tıklayarak **o nesneye referanslara/gelen nesnelere** bakabilir veya adını değiştirebilirsiniz (bu, derlenmiş sözde kodda çalışmaz):
Bir kod nesnesine sağ tıklayarak, o nesneye **referansları/giden referansları** görebilir veya adını değiştirebilirsiniz (bu, decompile edilmiş psödo kodda çalışmaz):
<figure><img src="../../../.gitbook/assets/image (1117).png" alt=""><figcaption></figcaption></figure>
Ayrıca, **orta aşağıda python komutları yazabilirsiniz**.
Ayrıca, **orta alanda python komutları yazabilirsiniz**.
#### Sağ panel
Sağ panelde, **gezinme geçmişi** (şu anki duruma nasıl geldiğinizi bilmenizi sağlar), bu işlevi **çağıran tüm işlevleri** ve bu işlevin **çağırdığı tüm işlevleri** görebileceğiniz **çağrı grafiği** ve **yerel değişkenler** bilgisi gibi ilginç bilgileri görebilirsiniz.
Sağ panelde, **navigasyon geçmişi** (bu sayede mevcut duruma nasıl geldiğinizi bilirsiniz), bu işlevi çağıran tüm **işlevleri** ve **bu işlevin çağırdığı** tüm işlevleri görebileceğiniz **çağrı grafiği** ve **yerel değişkenler** bilgileri gibi ilginç bilgiler görebilirsiniz.
### dtrace
Kullanıcılara uygulamalara son derece **düşük seviyede** erişim sağlar ve kullanıcılara programları **izleme** ve hatta yürütme akışlarını değiştirme olanağı sunar. Dtrace, **çekirdeğin her yerine yerleştirilen** ve sistem çağrılarının başlangıcı ve sonu gibi konumlarda bulunan **probeleri** kullanır.
Kullanıcılara uygulamalara son derece **düşük seviyede** erişim sağlar ve kullanıcılara **programları izleme** ve hatta yürütme akışlarını değiştirme imkanı sunar. Dtrace, **kernel boyunca yerleştirilen** **prob'lar** kullanır ve sistem çağrılarının başlangıç ve bitiş noktaları gibi yerlerde bulunur.
DTrace, her sistem çağrısı için bir prob oluşturmak için **`dtrace_probe_create`** işlevini kullanır. Bu probeler, her sistem çağrısının **giriş ve çıkış noktasında tetiklenebilir**. DTrace ile etkileşim, yalnızca kök kullanıcılar için kullanılabilen /dev/dtrace üzerinden gerçekleşir.
DTrace, her sistem çağrısı için bir prob oluşturmak üzere **`dtrace_probe_create`** işlevini kullanır. Bu prob'lar, her sistem çağrısının **giriş ve çıkış noktasında** tetiklenebilir. DTrace ile etkileşim, yalnızca root kullanıcı için mevcut olan /dev/dtrace aracılığıyla gerçekleşir.
{% hint style="success" %}
SIP korumasını tamamen devre dışı bırakmadan Dtrace'i etkinleştirmek için kurtarma modunda şunu çalıştırabilirsiniz: `csrutil enable --without dtrace`
Dtrace'ı SIP korumasını tamamen devre dışı bırakmadan etkinleştirmek için kurtarma modunda şunu çalıştırabilirsiniz: `csrutil enable --without dtrace`
Ayrıca, **derlediğiniz ikilileri** **`dtrace`** veya **`dtruss`** ile çalıştırabilirsiniz.
Ayrıca, **derlediğiniz** **`dtrace`** veya **`dtruss`** ikililerini de kullanabilirsiniz.
{% endhint %}
Dtrace'in mevcut probeleri şu şekilde alınabilir:
Dtrace'ın mevcut prob'ları şunlarla elde edilebilir:
```bash
dtrace -l | head
ID PROVIDER MODULE FUNCTION NAME
@ -324,17 +316,17 @@ ID PROVIDER MODULE FUNCTION NAME
43 profile profile-97
44 profile profile-199
```
Sonda adı dört bölümden oluşur: sağlayıcı, modül, işlev ve ad (`fbt:mach_kernel:ptrace:entry`). Adın bazı bölümlerini belirtmezseniz, Dtrace o bölümü joker karakter olarak uygular.
Probe adı dört bölümden oluşur: sağlayıcı, modül, işlev ve ad (`fbt:mach_kernel:ptrace:entry`). Adın bazı bölümlerini belirtmezseniz, Dtrace o bölümü joker karakter olarak uygular.
DTrace'i probeleri etkinleştirmek ve ateşlendiklerinde ne tür işlemlerin gerçekleştirileceğini belirtmek için yapılandırmak için D dilini kullanmamız gerekecek.
DTrace'i probeleri etkinleştirmek ve ateşlendiklerinde hangi eylemlerin gerçekleştirileceğini belirtmek için D dilini kullanmamız gerekecek.
Daha detaylı bir açıklama ve daha fazla örnek [https://illumos.org/books/dtrace/chp-intro.html](https://illumos.org/books/dtrace/chp-intro.html) adresinde bulunabilir.
Daha ayrıntılı bir açıklama ve daha fazla örnek için [https://illumos.org/books/dtrace/chp-intro.html](https://illumos.org/books/dtrace/chp-intro.html) adresine bakabilirsiniz.
#### Örnekler
**DTrace betikleri** listelemek için `man -k dtrace` komutunu çalıştırın. Örnek: `sudo dtruss -n binary`
Mevcut **DTrace betiklerini** listelemek için `man -k dtrace` komutunu çalıştırın. Örnek: `sudo dtruss -n binary`
* Satır içi
* Satır
```bash
#Count the number of syscalls of each running process
sudo dtrace -n 'syscall:::entry {@[execname] = count()}'
@ -384,107 +376,110 @@ dtruss -c -p 1000 #get syscalls of PID 1000
```
### kdebug
Bu, bir çekirdek izleme tesisatıdır. Belgelenmiş kodlar **`/usr/share/misc/trace.codes`** içinde bulunabilir.
Bu, bir çekirdek izleme aracıdır. Belgelendirilmiş kodlar **`/usr/share/misc/trace.codes`** içinde bulunabilir.
`latency`, `sc_usage`, `fs_usage` ve `trace` gibi araçlar bunu dahili olarak kullanır.
`kdebug` ile etkileşim kurmak için genellikle şu adımlar izlenir:
`kdebug` ile etkileşim kurmak için `sysctl`, `kern.kdebug` ad alanı üzerinden kullanılır ve kullanılacak MIB'ler `bsd/kern/kdebug.c` içinde uygulanan fonksiyonlarla birlikte `sys/sysctl.h` içinde bulunabilir.
* Mevcut ayarları KERN\_KDSETREMOVE ile kaldırın
Kdebug ile özel bir istemci ile etkileşim kurmak için genellikle bu adımlar izlenir:
* KERN\_KDSETREMOVE ile mevcut ayarları kaldırın
* KERN\_KDSETBUF ve KERN\_KDSETUP ile izlemeyi ayarlayın
* Buffer girişlerinin sayısını almak için KERN\_KDGETBUF'u kullanın
* Kendi istemcinizi izlemeden çıkarın KERN\_KDPINDEX ile
* İzlemeyi etkinleştirmek için KERN\_KDENABLE'ı kullanın
* KERN\_KDREADTR'yi çağırarak tamponu okuyun
* Her iş parçacığını işlemiyle eşleştirmek için KERN\_KDTHRMAP'ı çağırın.
* KERN\_KDGETBUF ile tampon girişlerinin sayısını alın
* KERN\_KDPINDEX ile izlemeyi kendi istemcinizden çıkarın
* KERN\_KDENABLE ile izlemeyi etkinleştirin
* KERN\_KDREADTR çağrısını yaparak tamponu okuyun
* Her bir iş parçacığını süreciyle eşleştirmek için KERN\_KDTHRMAP çağrısını yapın.
Bu bilgilere ulaşmak için Apple aracı **`trace`** veya özel araç [kDebugView (kdv)](https://newosxbook.com/tools/kdv.html)** kullanılabilir.**
Bu bilgiyi almak için Apple aracı **`trace`** veya özel araç [kDebugView (kdv)](https://newosxbook.com/tools/kdv.html)** kullanılabilir.**
**Unutmayın ki Kdebug yalnızca bir müşteri için aynı anda kullanılabilir.** Bu nedenle aynı anda yalnızca bir k-debug destekli araç çalıştırılabilir.
**Kdebug'un aynı anda yalnızca 1 müşteri için mevcut olduğunu unutmayın.** Yani aynı anda yalnızca bir k-debug destekli araç çalıştırılabilir.
### ktrace
`ktrace_*` API'ları, `libktrace.dylib` içinden gelen `Kdebug`'ın sarmaladığı API'larıdır. Ardından, bir istemci sadece belirli kodlarda geri aramaları ayarlamak için `ktrace_session_create` ve `ktrace_events_[single/class]`'ı çağırabilir ve ardından `ktrace_start` ile başlatabilir.
`ktrace_*` API'leri, `Kdebug`'ın sarmalayıcıları olan `libktrace.dylib`'den gelir. Ardından, bir istemci sadece `ktrace_session_create` ve `ktrace_events_[single/class]` çağrısı yaparak belirli kodlar üzerinde geri çağırmalar ayarlayabilir ve ardından `ktrace_start` ile başlatabilir.
Bu hatta **SIP etkinleştirilmiş** olsa bile kullanabilirsiniz
Bunu **SIP etkinleştirilmişken** bile kullanabilirsiniz.
Müşteri olarak `ktrace` yardımcı programını kullanabilirsiniz:
İstemci olarak `ktrace` aracını kullanabilirsiniz:
```bash
ktrace trace -s -S -t c -c ls | grep "ls("
```
Veya `tailspin`.
Or `tailspin`.
### kperf
Bu, çekirdek düzeyinde profil oluşturmak için kullanılır ve `Kdebug` çağrıları kullanılarak oluşturulmuştur.
Bu, bir çekirdek düzeyinde profil oluşturmak için kullanılır ve `Kdebug` çağrıları ile oluşturulmuştur.
Temelde, global değişken `kernel_debug_active` kontrol edilir ve ayarlandığında `kperf_kdebug_handler` fonksiyonu `Kdebug` kodunu ve çağrı yapan çekirdek çerçevesinin adresini alır. `Kdebug` kodu seçilen bir kodla eşleşirse, "actions" belirli bir bit eşlemi olarak yapılandırılır (seçenekler için `osfmk/kperf/action.h` dosyasına bakın).
Temelde, global değişken `kernel_debug_active` kontrol edilir ve ayarlandığında `kperf_kdebug_handler` çağrılır, `Kdebug` kodu ve çağrılan çekirdek çerçevesinin adresi ile. Eğer `Kdebug` kodu seçilenlerden biri ile eşleşirse, "hareketler" bir bitmap olarak yapılandırılır (seçenekler için `osfmk/kperf/action.h` dosyasına bakın).
Kperf'in bir sysctl MIB tablosu da vardır: (kök olarak) `sysctl kperf`. Bu kodlar `osfmk/kperf/kperfbsd.c` dosyasında bulunabilir.
Kperf'in ayrıca bir sysctl MIB tablosu vardır: (root olarak) `sysctl kperf`. Bu kodlar `osfmk/kperf/kperfbsd.c` dosyasında bulunabilir.
Ayrıca, Kperfs işlevselliğinin bir alt kümesi olan `kpc`, makine performans sayaçları hakkında bilgi sağlar.
Ayrıca, Kperf'in bir alt kümesi `kpc` içinde yer alır ve bu, makine performans sayaçları hakkında bilgi sağlar.
### ProcessMonitor
[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor), bir işlemin gerçekleştirdiği işlemlerle ilgili kontrol etmek için çok yararlı bir araçtır (örneğin, bir işlemin hangi yeni işlemleri oluşturduğunu izlemek).
[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor), bir sürecin gerçekleştirdiği süreçle ilgili eylemleri kontrol etmek için çok yararlı bir araçtır (örneğin, bir sürecin hangi yeni süreçleri oluşturduğunu izlemek).
### SpriteTree
[**SpriteTree**](https://themittenmac.com/tools/), işlemler arasındaki ilişkileri yazdırmak için bir araçtır.\
Mac'inizi **`sudo eslogger fork exec rename create > cap.json`** gibi bir komutla izlemeniz gerekmektedir (bu komutu çalıştırmak için FDA gereklidir). Daha sonra bu araca yükleyebilmek için json'ı bu araca yükleyebilirsiniz:
[**SpriteTree**](https://themittenmac.com/tools/) süreçler arasındaki ilişkileri yazdıran bir araçtır.\
Mac'inizi **`sudo eslogger fork exec rename create > cap.json`** gibi bir komutla izlemelisiniz (bunu başlatan terminal FDA gerektirir). Ardından, bu aracı kullanarak json'u yükleyebilir ve tüm ilişkileri görüntüleyebilirsiniz:
<figure><img src="../../../.gitbook/assets/image (1182).png" alt="" width="375"><figcaption></figcaption></figure>
### FileMonitor
[**FileMonitor**](https://objective-see.com/products/utilities.html#FileMonitor), dosya etkinliklerini (oluşturma, değiştirme ve silme gibi) izlemeyi sağlayarak bu tür etkinlikler hakkında detaylı bilgi sağlar.
[**FileMonitor**](https://objective-see.com/products/utilities.html#FileMonitor), dosya olaylarını (oluşturma, değişiklikler ve silmeler gibi) izlemeye olanak tanır ve bu tür olaylar hakkında ayrıntılı bilgi sağlar.
### Crescendo
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo), Microsoft Sysinternals _Procmon_ 'dan Windows kullanıcılarının tanıdığı görünüm ve hisse sahip GUI bir araçtır. Bu araç, çeşitli olay türlerinin kaydedilmesine izin verir ve durdurulmasına olanak tanır, bu olayları dosya, işlem, ağ vb. gibi kategorilere göre filtrelemeye olanak tanır ve kaydedilen olayları json formatında kaydetme işlevselliği sağlar.
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo), Windows kullanıcılarının Microsoft Sysinternals _Procmon_'dan tanıyabileceği bir GUI aracıdır. Bu araç, çeşitli olay türlerinin kaydedilmesini başlatıp durdurmaya, bu olayları dosya, süreç, ağ vb. gibi kategorilere göre filtrelemeye ve kaydedilen olayları json formatında kaydetme işlevselliği sunar.
### Apple Instruments
[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html), Xcode'un Geliştirici Araçları'nın bir parçasıdır - uygulama performansını izlemek, bellek sızıntılarını tanımlamak ve dosya sistemi etkinliğini izlemek için kullanılır.
[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html), Xcode'un Geliştirici araçlarının bir parçasıdır uygulama performansını izlemek, bellek sızıntılarını tanımlamak ve dosya sistemi etkinliğini takip etmek için kullanılır.
![](<../../../.gitbook/assets/image (1138).png>)
### fs\_usage
İşlemler tarafından gerçekleştirilen işlemleri takip etmeyi sağlar:
Süreçler tarafından gerçekleştirilen eylemleri takip etmeye olanak tanır:
```bash
fs_usage -w -f filesys ls #This tracks filesystem actions of proccess names containing ls
fs_usage -w -f network curl #This tracks network actions
```
### TaskExplorer
[**Taskexplorer**](https://objective-see.com/products/taskexplorer.html), bir ikili dosya tarafından kullanılan kütüphaneleri, kullandığı dosyaları ve ağ bağlantılarını görmek için faydalıdır. Ayrıca ikili işlemleri **virustotal**'a karşı kontrol eder ve ikili hakkında bilgi gösterir.
[**Taskexplorer**](https://objective-see.com/products/taskexplorer.html) bir ikili dosyanın kullandığı **kütüphaneleri**, kullandığı **dosyaları** ve **ağ** bağlantılarını görmek için faydalıdır.\
Ayrıca ikili süreçleri **virustotal** ile kontrol eder ve ikili hakkında bilgi gösterir.
## PT\_DENY\_ATTACH <a href="#page-title" id="page-title"></a>
[**Bu blog yazısında**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html), **`PT_DENY_ATTACH`** kullanan çalışan bir daemon'ı hata ayıklamanın nasıl yapıldığına dair bir örnek bulabilirsiniz, hatta SIP devre dışı bırakılmış olsa bile hata ayıklamayı engellemek için kullanılmıştır.
[**bu blog yazısında**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) **SIP** devre dışı bırakılmış olsa bile hata ayıklamayı önlemek için **`PT_DENY_ATTACH`** kullanan bir **çalışan daemon'u hata ayıklama** örneğini bulabilirsiniz.
### lldb
**lldb**, macOS ikili dosyalarını hata ayıklamak için de facto araçtır.
**lldb**, **macOS** ikili **hata ayıklama** için de **facto aracı**dır.
```bash
lldb ./malware.bin
lldb -p 1122
lldb -n malware.bin
lldb -n malware.bin --waitfor
```
Intel lezzetini lldb kullanırken ayarlayabilirsiniz, aşağıdaki satırı içeren **`.lldbinit`** adında bir dosya oluşturarak ev klasörünüzde:
Ev dizininizde aşağıdaki satırı içeren **`.lldbinit`** adında bir dosya oluşturarak lldb kullanırken intel çeşidini ayarlayabilirsiniz:
```bash
settings set target.x86-disassembly-flavor intel
```
{% hint style="warning" %}
lldb içinde bir işlemi `process save-core` ile dump et.
lldb içinde, bir işlemi `process save-core` ile dökün
{% endhint %}
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Komut</strong></td><td><strong>ıklama</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Kesinti noktasına ulaşılana veya işlem sona erene kadar devam edecek olan yürütme işlemi başlatılır.</td></tr><tr><td><strong>continue (c)</strong></td><td>Hata ayıklanan işlemin yürütmesine devam eder.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Sonraki talimatı yürütür. Bu komut fonksiyon çağrılarını atlar.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Sonraki talimatı yürütür. nexti komutunun aksine, bu komut fonksiyon çağrılarına girer.</td></tr><tr><td><strong>finish (f)</strong></td><td>Geçerli fonksiyondaki kalan talimatları ("frame") yürütür ve duraklatır.</td></tr><tr><td><strong>control + c</strong></td><td>Yürütmeyi duraklatır. Eğer işlem çalıştırılmışsa (r) veya devam ettirilmişse (c), bu işlemi duraklatır ve bulunduğu yeri belirler.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Main fonksiyonu çağrıldığında</p><p>b &#x3C;binname>`main #Belirtilen dosyanın Main fonksiyonu</p><p>b set -n main --shlib &#x3C;lib_name> #Belirtilen dosyanın Main fonksiyonu</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Kesinti noktası listesi</p><p>br e/dis &#x3C;num> #Kesinti noktasını etkinleştir/devre dışı bırak</p><p>breakpoint delete &#x3C;num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Kesinti noktası komutunun yardımını al</p><p>help memory write #Belleğe yazma işlemi hakkında yardım al</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format &#x3C;<a href="https://lldb.llvm.org/use/variable.html#type-format">format</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s &#x3C;reg/memory address></strong></td><td>Belleği null karakterle sonlandırılmış bir dize olarak görüntüler.</td></tr><tr><td><strong>x/i &#x3C;reg/memory address></strong></td><td>Belleği derleme talimatı olarak görüntüler.</td></tr><tr><td><strong>x/b &#x3C;reg/memory address></strong></td><td>Belleği bayt olarak görüntüler.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Bu, parametre tarafından referans edilen nesneyi yazdırır</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Apple'ın Objective-C API'lerinin çoğu nesneler döndürdüğünden, bu nesneler "print object" (po) komutu aracılığıyla görüntülenmelidir. Eğer po anlamlı bir çıktı üretmiyorsa <code>x/b</code> kullanın</p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #O adrese AAAA yazma<br>memory write -f s $rip+0x11f+7 "AAAA" #Adrese AAAA yazma</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Geçerli fonksiyonu derler</p><p>dis -n &#x3C;funcname> #Fonksiyonu derler</p><p>dis -n &#x3C;funcname> -b &#x3C;basename> #Fonksiyonu derler<br>dis -c 6 #6 satırı derler<br>dis -c 0x100003764 -e 0x100003768 #Bir adresten diğerine kadar<br>dis -p -c 4 #Geçerli adresten başlayarak derlemeye başlar</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # x1 reg içindeki 3 bileşenli diziyi kontrol et</td></tr></tbody></table>
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Komut</strong></td><td><strong>ıklama</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Bir kesme noktası vurulana veya işlem sona erene kadar devam edecek şekilde yürütmeyi başlatır.</td></tr><tr><td><strong>process launch --stop-at-entry</strong></td><td>Giriş noktasında durarak yürütmeyi başlatır</td></tr><tr><td><strong>continue (c)</strong></td><td>Hedeflenen işlemin yürütülmesine devam eder.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Sonraki talimatı yürütür. Bu komut, işlev çağrılarını atlar.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Sonraki talimatı yürütür. nexti komutunun aksine, bu komut işlev çağrılarına adım atar.</td></tr><tr><td><strong>finish (f)</strong></td><td>Mevcut işlevdeki (“çerçeve”) geri kalan talimatları yürütür ve durur.</td></tr><tr><td><strong>control + c</strong></td><td>Yürütmeyi duraklatır. İşlem run (r) veya continue (c) ile çalıştırıldıysa, bu işlem durur ... mevcut yürütme yerinde.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p><code>b main</code> #Herhangi bir main adlı işlev</p><p><code>b &#x3C;binname>`main</code> #Bin'in ana işlevi</p><p><code>b set -n main --shlib &#x3C;lib_name></code> #Belirtilen binin ana işlevi</p><p><code>breakpoint set -r '\[NSFileManager .*\]$'</code> #Herhangi bir NSFileManager yöntemi</p><p><code>breakpoint set -r '\[NSFileManager contentsOfDirectoryAtPath:.*\]$'</code></p><p><code>break set -r . -s libobjc.A.dylib</code> # O kütüphanedeki tüm işlevlerde kesme noktası</p><p><code>b -a 0x0000000100004bd9</code></p><p><code>br l</code> #Kesme noktası listesi</p><p><code>br e/dis &#x3C;num></code> #Kesme noktasını etkinleştir/etkisiz hale getir</p><p>breakpoint delete &#x3C;num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Kesme noktası komutu hakkında yardım al</p><p>help memory write #Belleğe yazma hakkında yardım al</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format &#x3C;<a href="https://lldb.llvm.org/use/variable.html#type-format">format</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s &#x3C;reg/bellek adresi></strong></td><td>Belleği null-terminatlı dize olarak görüntüler.</td></tr><tr><td><strong>x/i &#x3C;reg/bellek adresi></strong></td><td>Belleği montaj talimatı olarak görüntüler.</td></tr><tr><td><strong>x/b &#x3C;reg/bellek adresi></strong></td><td>Belleği byte olarak görüntüler.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Bu, parametre ile referans verilen nesneyi yazdırır</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Apple'ın Objective-C API'lerinin veya yöntemlerinin çoğu nesne döndürdüğünden, bunlar “print object” (po) komutu ile görüntülenmelidir. Eğer po anlamlı bir çıktı üretmiyorsa <code>x/b</code> kullanın</p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #O adrese AAAA yaz<br>memory write -f s $rip+0x11f+7 "AAAA" #Adrese AAAA yaz</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Mevcut işlevi disassemble et</p><p>dis -n &#x3C;funcname> #İşlevi disassemble et</p><p>dis -n &#x3C;funcname> -b &#x3C;basename> #İşlevi disassemble et<br>dis -c 6 #6 satırı disassemble et<br>dis -c 0x100003764 -e 0x100003768 #Bir eklemden diğerine kadar<br>dis -p -c 4 #Mevcut adreste disassemble etmeye başla</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # x1 reg'deki 3 bileşenli diziyi kontrol et</td></tr><tr><td><strong>image dump sections</strong></td><td>Mevcut işlem belleğinin haritasını yazdırır</td></tr><tr><td><strong>image dump symtab &#x3C;library></strong></td><td><code>image dump symtab CoreNLP</code> #CoreNLP'den tüm sembollerin adresini al</td></tr></tbody></table>
{% hint style="info" %}
**`objc_sendMsg`** fonksiyonu çağrıldığında, **rsi** kaydı **metodun adını** null karakterle sonlandırılmış ("C") bir dize olarak tutar. lldb üzerinden adı yazdırmak için:
**`objc_sendMsg`** fonksiyonu çağrıldığında, **rsi** kaydedicisi **metodun adını** null-terminatlı (“C”) dize olarak tutar. lldb üzerinden adı yazdırmak için:
`(lldb) x/s $rsi: 0x1000f1576: "startMiningWithPort:password:coreCount:slowMemory:currency:"`
@ -498,34 +493,35 @@ lldb içinde bir işlemi `process save-core` ile dump et.
#### VM tespiti
* **`sysctl hw.model`** komutu, **ana bilgisayar MacOS ise** "Mac" döndürür, farklı bir şey döndürürse bir VM olduğunu gösterir.
* Bazı kötü amaçlı yazılımlar, bir VM olup olmadığını tespit etmek için **`hw.logicalcpu`** ve **`hw.physicalcpu`** değerleriyle oynar.
* Bazı kötü amaçlı yazılımlar, MAC adresine (00:50:56) dayanarak makinenin **VMware** tabanlı olup olmadığını **tespit edebilir**.
* Basit bir kodla **bir işlemin hata ayıklanıp ayıklanmadığını** kontrol etmek de mümkündür:
* `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //hata ayıklanan işlem }`
* Ayrıca **`ptrace`** sistem çağrısını **`PT_DENY_ATTACH`** bayrağıyla çağırabilir. Bu, bir hata ayıklamanın eklenmesini ve izlenmesini **engeller**.
* **`sysctl`** veya **`ptrace`** fonksiyonunun **ithal edilip edilmediğini** kontrol edebilirsiniz (ancak kötü amaçlı yazılım bunu dinamik olarak da ithal edebilir)
* Bu yazıda belirtildiği gibi, “[Anti-Hata Ayıklama Tekniklerini Yenme: macOS ptrace varyantları](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
“_**Process #** status = 45 (0x0000002d) ile çıktı veren mesaj genellikle hata ayıklama hedefinin **PT\_DENY\_ATTACH** kullandığının açık bir işaretidir_”
## Çekirdek Dökümleri
* **`sysctl hw.model`** komutu **host bir MacOS** olduğunda "Mac" döner, ancak bir VM olduğunda farklı bir şey döner.
* **`hw.logicalcpu`** ve **`hw.physicalcpu`** değerleriyle oynayarak bazı kötü amaçlı yazılımlar bir VM olup olmadığını tespit etmeye çalışır.
* Bazı kötü amaçlı yazılımlar, MAC adresine (00:50:56) dayanarak makinenin **VMware** olup olmadığını da **tespit edebilir**.
* Basit bir kod ile **bir işlemin hata ayıklanıp ayıklanmadığını** bulmak da mümkündür:
* `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //işlem hata ayıklanıyor }`
* Ayrıca **`ptrace`** sistem çağrısını **`PT_DENY_ATTACH`** bayrağı ile çağırabilir. Bu, bir hata ayıklayıcının bağlanmasını ve izlenmesini **engeller**.
* **`sysctl`** veya **`ptrace`** fonksiyonunun **içe aktarıldığını** kontrol edebilirsiniz (ancak kötü amaçlı yazılım bunu dinamik olarak içe aktarabilir).
* Bu yazıda belirtildiği gibi, “[Anti-Debug Tekniklerini Aşmak: macOS ptrace varyantları](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
“_Process # çıkış mesajı **status = 45 (0x0000002d)** ile genellikle hata ayıklama hedefinin **PT_DENY_ATTACH** kullandığını gösteren bir işarettir_”
Çekirdek dökümleri oluşturulur:
## Core Dumps
- `kern.coredump` sysctl 1'e ayarlanmışsa (varsayılan olarak)
- İşlem suid/sgid değilse veya `kern.sugid_coredump` 1 ise (varsayılan olarak 0)
- `AS_CORE` limiti işlemine izin veriyorsa. `ulimit -c 0` çağrısı ile çekirdek dökümlerinin oluşturulmasını engellemek ve `ulimit -c unlimited` ile tekrar etkinleştirmek mümkündür.
Core dump'lar şu durumlarda oluşturulur:
Bu durumlarda çekirdek dökümleri, genellikle `/cores/core/.%P` dizininde belirtilen `kern.corefile` sysctl'ye göre oluşturulur ve saklanır.
* `kern.coredump` sysctl 1 olarak ayarlanmışsa (varsayılan olarak)
* İşlem suid/sgid değilse veya `kern.sugid_coredump` 1 ise (varsayılan 0'dır)
* `AS_CORE` limiti işlemi izin veriyorsa. Kod dump'larının oluşturulmasını engellemek için `ulimit -c 0` çağrılabilir ve yeniden etkinleştirmek için `ulimit -c unlimited` kullanılabilir.
## Fazlama
Bu durumlarda core dump, `kern.corefile` sysctl'e göre oluşturulur ve genellikle `/cores/core/.%P` dizininde saklanır.
## Fuzzing
### [ReportCrash](https://ss64.com/osx/reportcrash.html)
ReportCrash, **çöken işlemleri analiz eder ve bir çökme raporunu diske kaydeder**. Bir çökme raporu, bir çökmenin nedenini teşhis etmeye yardımcı olabilecek bilgiler içerir.\
Kullanıcı başlatma bağlamında çalışan uygulamalar ve diğer işlemler için, ReportCrash, bir LaunchAgent olarak çalışır ve çökme raporlarını kullanıcının `~/Library/Logs/DiagnosticReports/` dizininde kaydeder.\
Daemonlar, sistem başlatma bağlamında çalışan diğer işlemler ve diğer ayrıcalıklı işlemler için, ReportCrash bir LaunchDaemon olarak çalışır ve çökme raporlarını sistemdeki `/Library/Logs/DiagnosticReports` dizininde kaydeder.
ReportCrash **çöken işlemleri analiz eder ve bir çökme raporunu diske kaydeder**. Bir çökme raporu, bir geliştiricinin çökme nedenini teşhis etmesine **yardımcı olabilecek** bilgileri içerir.\
Kullanıcı başına launchd bağlamında **çalışan uygulamalar ve diğer işlemler** için, ReportCrash bir LaunchAgent olarak çalışır ve çökme raporlarını kullanıcının `~/Library/Logs/DiagnosticReports/` dizinine kaydeder.\
Daimonlar, sistem launchd bağlamında **çalışan diğer işlemler** ve diğer ayrıcalıklı işlemler için, ReportCrash bir LaunchDaemon olarak çalışır ve çökme raporlarını sistemin `/Library/Logs/DiagnosticReports` dizinine kaydeder.
Eğer çökme raporlarının **Apple'a gönderilmesinden endişe duyuyorsanız**, bunları devre dışı bırakabilirsiniz. Aksi takdirde, çökme raporları, bir sunucunun nasıl çöktüğünü **anlamak için faydalı olabilir**.
Eğer çökme raporlarının **Apple'a gönderilmesinden endişe ediyorsanız**, bunları devre dışı bırakabilirsiniz. Aksi takdirde, çökme raporları **bir sunucunun nasıl çöktüğünü anlamak için** faydalı olabilir.
```bash
#To disable crash reporting:
launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
@ -537,15 +533,15 @@ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.
```
### Uyku
MacOS'ta fuzzing yaparken Mac'in uyumasına izin vermemek önemlidir:
MacOS'ta fuzzing yaparken Mac'in uykuya dalmasına izin vermemek önemlidir:
* systemsetup -setsleep Never
* pmset, Sistem Tercihleri
* [KeepingYouAwake](https://github.com/newmarcel/KeepingYouAwake)
#### SSH Bağlantısı Kesme
#### SSH Bağlantısı Kesilmesi
SSH bağlantısı aracılığıyla fuzzing yaparken oturumun gün içinde gitmeyeceğinden emin olmak önemlidir. Bu nedenle sshd\_config dosyasını aşağıdaki gibi değiştirin:
Eğer bir SSH bağlantısı üzerinden fuzzing yapıyorsanız, oturumun kapanmayacağından emin olmak önemlidir. Bu nedenle sshd\_config dosyasını şu şekilde değiştirin:
* TCPKeepAlive Yes
* ClientAliveInterval 0
@ -554,24 +550,24 @@ SSH bağlantısı aracılığıyla fuzzing yaparken oturumun gün içinde gitmey
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
```
### Dahili İşleyiciler
### Internal Handlers
Belirli bir şema veya protokolü **işleme yetkisine sahip olan uygulamanın hangisi olduğunu nasıl bulabileceğinizi** öğrenmek için aşağıdaki sayfaya göz atın:
**Aşağıdaki sayfayı kontrol edin** hangi uygulamanın **belirtilen şemayı veya protokolü işlemekten sorumlu olduğunu bulmak için:**
{% content-ref url="../macos-file-extension-apps.md" %}
[macos-file-extension-apps.md](../macos-file-extension-apps.md)
{% endcontent-ref %}
### Ağ İşlemlerini Sıralama
### Enumerating Network Processes
Bu, ağ verilerini yöneten işlemleri bulmak için ilginçtir:
Ağ verilerini yöneten süreçleri bulmak ilginçtir:
```bash
dtrace -n 'syscall::recv*:entry { printf("-> %s (pid=%d)", execname, pid); }' >> recv.log
#wait some time
sort -u recv.log > procs.txt
cat procs.txt
```
Veya `netstat` veya `lsof` kullanın
Or use `netstat` or `lsof`
### Libgmalloc
@ -587,11 +583,11 @@ lldb -o "target create `which some-binary`" -o "settings set target.env-vars DYL
#### [AFL++](https://github.com/AFLplusplus/AFLplusplus)
CLI araçları için çalışır
CLI araçları için çalışır.
#### [Litefuzz](https://github.com/sec-tools/litefuzz)
macOS GUI araçları ile "**sadece çalışır"**. Bazı macOS uygulamalarının benzersiz dosya adları, doğru uzantılar gibi belirli gereksinimleri olabilir, dosyaları sandbox'tan okuma ihtiyacı olabilir (`~/Library/Containers/com.apple.Safari/Data`)...
macOS GUI araçlarıyla "**sadece çalışır**". Bazı macOS uygulamalarının benzersiz dosya adları, doğru uzantı gibi belirli gereksinimleri olduğunu unutmayın, dosyaları sandbox'tan (`~/Library/Containers/com.apple.Safari/Data`) okumaları gerekir...
Bazı örnekler:
@ -630,34 +626,34 @@ litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash
## Referanslar
* [**OS X Incident Response: Scripting and Analysis**](https://www.amazon.com/OS-Incident-Response-Scripting-Analysis-ebook/dp/B01FHOHHVS)
* [**OS X Olay Yanıtı: Betik ve Analiz**](https://www.amazon.com/OS-Incident-Response-Scripting-Analysis-ebook/dp/B01FHOHHVS)
* [**https://www.youtube.com/watch?v=T5xfL9tEg44**](https://www.youtube.com/watch?v=T5xfL9tEg44)
* [**https://taomm.org/vol1/analysis.html**](https://taomm.org/vol1/analysis.html)
* [**The Art of Mac Malware: The Guide to Analyzing Malicious Software**](https://taomm.org/)
* [**Mac Kötü Amaçlı Yazılım Sanatı: Kötü Amaçlı Yazılımları Analiz Etme Rehberi**](https://taomm.org/)
### [WhiteIntel](https://whiteintel.io)
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **stealer kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevsellikler sunan **dark-web** destekli bir arama motorudur.
[**WhiteIntel**](https://whiteintel.io) , bir şirketin veya müşterilerinin **çalıntı kötü amaçlı yazılımlar** tarafından **tehdit edilip edilmediğini** kontrol etmek için **ücretsiz** işlevsellikler sunan **karanlık ağ** destekli bir arama motorudur.
WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye saldırılarıyla mücadele etmektir.
WhiteIntel'in ana hedefi, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.
Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz:
Web sitelerini kontrol edebilir ve motorlarını **ücretsiz** deneyebilirsiniz:
{% embed url="https://whiteintel.io" %}
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking Öğrenin & Pratik Yapın:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Ekip Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking Öğrenin & Pratik Yapın: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Ekip Uzmanı (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter**'da **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}