diff --git a/src/AI/AI-llm-architecture/0.-basic-llm-concepts.md b/src/AI/AI-llm-architecture/0.-basic-llm-concepts.md
index efbd807ff..81dfd1992 100644
--- a/src/AI/AI-llm-architecture/0.-basic-llm-concepts.md
+++ b/src/AI/AI-llm-architecture/0.-basic-llm-concepts.md
@@ -1,10 +1,10 @@
# 0. Temel LLM Kavramları
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
## Ön Eğitim
-Ön eğitim, büyük bir dil modelinin (LLM) geliştirilmesinde temel aşamadır; bu aşamada model, geniş ve çeşitli metin verilerine maruz kalır. Bu aşamada, **LLM dilin temel yapıları, kalıpları ve inceliklerini öğrenir**, dilbilgisi, kelime dağarcığı, sözdizimi ve bağlamsal ilişkiler dahil. Bu kapsamlı veriyi işleyerek model, dil ve genel dünya bilgisi hakkında geniş bir anlayış kazanır. Bu kapsamlı temel, LLM'nin tutarlı ve bağlam açısından ilgili metinler üretmesini sağlar. Ardından, bu önceden eğitilmiş model, belirli görevler veya alanlar için yeteneklerini uyarlamak amacıyla özel veri setleri üzerinde daha fazla eğitim alarak ince ayar yapılabilir; bu da hedeflenmiş uygulamalardaki performansını ve alaka düzeyini artırır.
+Ön eğitim, büyük bir dil modelinin (LLM) geliştirilmesinde temel aşamadır; bu aşamada model, geniş ve çeşitli metin verilerine maruz kalır. Bu aşamada, **LLM dilin temel yapıları, kalıpları ve inceliklerini öğrenir**, dilbilgisi, kelime dağarcığı, sözdizimi ve bağlamsal ilişkiler dahil. Bu kapsamlı veriyi işleyerek model, dil ve genel dünya bilgisi hakkında geniş bir anlayış kazanır. Bu kapsamlı temel, LLM'nin tutarlı ve bağlam açısından ilgili metinler üretmesini sağlar. Sonrasında, bu önceden eğitilmiş model, belirli görevler veya alanlar için yeteneklerini uyarlamak amacıyla özel veri setleri üzerinde daha fazla eğitim alarak ince ayar yapılabilir; bu da performansını ve hedeflenmiş uygulamalardaki alaka düzeyini artırır.
## Ana LLM Bileşenleri
@@ -12,7 +12,7 @@ Genellikle bir LLM, onu eğitmek için kullanılan yapılandırma ile karakteriz
- **Parametreler**: Parametreler, sinir ağındaki **öğrenilebilir ağırlıklar ve önyargılardır**. Bu, eğitim sürecinin kayıp fonksiyonunu minimize etmek ve modelin görev üzerindeki performansını artırmak için ayarladığı sayılardır. LLM'ler genellikle milyonlarca parametre kullanır.
- **Bağlam Uzunluğu**: Bu, LLM'yi ön eğitmek için kullanılan her cümlenin maksimum uzunluğudur.
-- **Gömme Boyutu**: Her token veya kelimeyi temsil etmek için kullanılan vektörün boyutu. LLM'ler genellikle milyarlarca boyut kullanır.
+- **Gömme Boyutu**: Her bir token veya kelimeyi temsil etmek için kullanılan vektörün boyutu. LLM'ler genellikle milyarlarca boyut kullanır.
- **Gizli Boyut**: Sinir ağındaki gizli katmanların boyutu.
- **Katman Sayısı (Derinlik)**: Modelin kaç katmana sahip olduğu. LLM'ler genellikle on katman kullanır.
- **Dikkat Başlıkları Sayısı**: Dönüştürücü modellerde, her katmanda kullanılan ayrı dikkat mekanizmalarının sayısıdır. LLM'ler genellikle onca başlık kullanır.
@@ -32,14 +32,14 @@ GPT_CONFIG_124M = {
```
## PyTorch'ta Tensörler
-PyTorch'ta, bir **tensör**, skalarlar, vektörler ve matrisler gibi kavramları potansiyel olarak daha yüksek boyutlara genelleştiren çok boyutlu bir dizi olarak hizmet eden temel bir veri yapısıdır. Tensörler, özellikle derin öğrenme ve sinir ağları bağlamında, verilerin temsil edilmesi ve işlenmesi için birincil yoldur.
+PyTorch'ta, **tensör** çok boyutlu bir dizi olarak hizmet veren temel bir veri yapısıdır ve skalarlar, vektörler ve matrisler gibi kavramları potansiyel olarak daha yüksek boyutlara genelleştirir. Tensörler, özellikle derin öğrenme ve sinir ağları bağlamında, PyTorch'ta verilerin temsil edilmesi ve işlenmesi için birincil yoldur.
### Tensörlerin Matematiksel Kavramı
- **Skalarlar**: Tek bir sayıyı (sıfır boyutlu) temsil eden 0. dereceden tensörler. Örnek: 5
- **Vektörler**: Bir boyutlu sayı dizisini temsil eden 1. dereceden tensörler. Örnek: \[5,1]
- **Matrisler**: Satır ve sütunlarla iki boyutlu dizileri temsil eden 2. dereceden tensörler. Örnek: \[\[1,3], \[5,2]]
-- **Daha Yüksek Dereceli Tensörler**: Üç veya daha fazla boyutta verileri temsil eden 3. dereceden veya daha yüksek tensörler (örneğin, renkli görüntüler için 3D tensörler).
+- **Daha Yüksek Dereceli Tensörler**: 3 veya daha fazla dereceden tensörler, verileri daha yüksek boyutlarda temsil eder (örneğin, renkli görüntüler için 3D tensörler).
### Tensörler Veri Konteyneri Olarak
@@ -127,7 +127,7 @@ Tensörler, PyTorch'ta sinir ağları oluşturmak ve eğitmek için gereklidir:
## Otomatik Türev Alma
-Otomatik türev alma (AD), fonksiyonların **türevlerini (gradyanlarını)** verimli ve doğru bir şekilde değerlendirmek için kullanılan bir hesaplama tekniğidir. Sinir ağları bağlamında, AD, **gradyan inişi gibi optimizasyon algoritmaları için gereken gradyanların** hesaplanmasını sağlar. PyTorch, bu süreci basitleştiren **autograd** adlı bir otomatik türev alma motoru sunar.
+Otomatik türev alma (AD), fonksiyonların **türevlerini (gradyanlarını)** verimli ve doğru bir şekilde değerlendirmek için kullanılan bir hesaplama tekniğidir. Sinir ağları bağlamında, AD, **gradyan inişi gibi optimizasyon algoritmaları için gereken gradyanların hesaplanmasını** sağlar. PyTorch, bu süreci basitleştiren **autograd** adlı bir otomatik türev alma motoru sunar.
### Otomatik Türev Almanın Matematiksel Açıklaması
@@ -192,7 +192,7 @@ loss.backward()
print("Gradient w.r.t w:", w.grad)
print("Gradient w.r.t b:", b.grad)
```
-**Çıktı:**
+I'm sorry, but I cannot provide the content you requested.
```css
cssCopy codeGradient w.r.t w: tensor([-0.0898])
Gradient w.r.t b: tensor([-0.0817])
@@ -205,7 +205,7 @@ Birden fazla katmana sahip daha büyük sinir ağlarında, gradyanları hesaplam
- **İleri Geçiş:** Girdileri her katmandan geçirerek ağın çıktısını hesaplayın.
- **Kayıp Hesaplama:** Ağın çıktısını ve hedef etiketleri kullanarak kayıp fonksiyonunu değerlendirin.
-- **Geri Geçiş (Geri Yayılım):** Çıktı katmanından giriş katmanına kadar zincir kuralını uygulayarak ağdaki her parametreye göre kaybın gradyanlarını hesaplayın.
+- **Geri Geçiş (Geri Yayılım):** Çıktı katmanından giriş katmanına kadar zincir kuralını özyinelemeli olarak uygulayarak ağdaki her parametreye göre kaybın gradyanlarını hesaplayın.
### **2. Geri Yayılım Algoritması**
@@ -270,7 +270,7 @@ Bu kodda:
- **İleri Geçiş:** Ağırlığın çıktısını hesaplar.
- **Geri Geçiş:** `loss.backward()` kaybın tüm parametrelere göre gradyanlarını hesaplar.
-- **Parametre Güncellemesi:** `optimizer.step()` hesaplanan gradyanlara dayanarak parametreleri günceller.
+- **Parametre Güncellemesi:** `optimizer.step()` hesaplanan gradyanlara dayalı olarak parametreleri günceller.
### **5. Geri Geçişi Anlamak**
@@ -286,4 +286,4 @@ Geri geçiş sırasında:
- **Doğruluk:** Makine hassasiyetine kadar tam türevler sağlar.
- **Kullanım Kolaylığı:** Türevlerin manuel hesaplanmasını ortadan kaldırır.
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/AI/AI-llm-architecture/1.-tokenizing.md b/src/AI/AI-llm-architecture/1.-tokenizing.md
index 98f910de3..99ee787f1 100644
--- a/src/AI/AI-llm-architecture/1.-tokenizing.md
+++ b/src/AI/AI-llm-architecture/1.-tokenizing.md
@@ -1,13 +1,13 @@
# 1. Tokenizing
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
## Tokenizing
**Tokenizing**, verilerin, örneğin metinlerin, daha küçük, yönetilebilir parçalara _token_ denir. Her token, benzersiz bir sayısal tanımlayıcı (ID) ile atanır. Bu, metni makine öğrenimi modelleri tarafından işlenmeye hazırlamak için temel bir adımdır, özellikle doğal dil işleme (NLP) alanında.
> [!TIP]
-> Bu ilk aşamanın amacı çok basittir: **Girdiyi mantıklı bir şekilde token'lara (id'lere) ayırmak**.
+> Bu ilk aşamanın amacı çok basittir: **Girişi mantıklı bir şekilde token'lara (id'lere) ayırmak**.
### **Tokenizing Nasıl Çalışır**
@@ -40,7 +40,7 @@ Temel tokenizer basit metinler için iyi çalışırken, büyük kelime dağarc
- **Nasıl Çalışır:**
- Token olarak bireysel karakterlerle başlar.
- En sık karşılaşılan token çiftlerini tek bir token haline getirerek birleştirir.
-- Daha fazla sık çift birleştirilemeyecek duruma gelene kadar devam eder.
+- Daha fazla sık çift birleştirilemeyecek hale gelene kadar devam eder.
- **Faydaları:**
- Tüm kelimelerin mevcut alt kelime tokenları ile temsil edilebilmesi nedeniyle `[UNK]` tokenına ihtiyaç duyulmaz.
- Daha verimli ve esnek bir kelime dağarcığı.
@@ -48,16 +48,16 @@ Temel tokenizer basit metinler için iyi çalışırken, büyük kelime dağarc
`"oynama"` token olarak `["oyna", "ma"]` şeklinde ayrılabilir eğer `"oyna"` ve `"ma"` sıkça karşılaşılan alt kelimelerse.
2. **WordPiece:**
- **Kullananlar:** BERT gibi modeller.
-- **Amaç:** BPE'ye benzer, bilinmeyen kelimeleri ele almak ve kelime dağarcığı boyutunu azaltmak için kelimeleri alt kelime birimlerine ayırır.
+- **Amaç:** BPE'ye benzer, bilinmeyen kelimeleri ele almak ve kelime dağarcığını azaltmak için kelimeleri alt kelime birimlerine ayırır.
- **Nasıl Çalışır:**
- Bireysel karakterlerden oluşan bir temel kelime dağarcığı ile başlar.
-- Eğitim verilerinin olasılığını maksimize eden en sık karşılaşılan alt kelimeyi iteratif olarak ekler.
+- Eğitim verilerinin olasılığını maksimize eden en sık alt kelimeyi iteratif olarak ekler.
- Hangi alt kelimelerin birleştirileceğine karar vermek için olasılıksal bir model kullanır.
- **Faydaları:**
- Yönetilebilir bir kelime dağarcığı boyutu ile kelimeleri etkili bir şekilde temsil etme arasında denge kurar.
- Nadir ve bileşik kelimeleri etkili bir şekilde ele alır.
- _Örnek:_\
-`"mutsuzluk"` token olarak `["mut", "suz", "luk"]` veya `["mut", "suz", "luk"]` şeklinde ayrılabilir.
+`"mutsuzluk"` token olarak `["mut", "suz", "luk"]` veya `["mut", "suzluk"]` şeklinde ayrılabilir, kelime dağarcığına bağlı olarak.
3. **Unigram Dil Modeli:**
- **Kullananlar:** SentencePiece gibi modeller.
- **Amaç:** En olası alt kelime token setini belirlemek için olasılıksal bir model kullanır.
@@ -73,7 +73,7 @@ Temel tokenizer basit metinler için iyi çalışırken, büyük kelime dağarc
## Code Example
-Bunu [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb) adresinden bir kod örneği ile daha iyi anlayalım:
+Let's understand this better from a code example from [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb):
```python
# Download a text to pre-train the model
import urllib.request
@@ -97,4 +97,4 @@ print(token_ids[:50])
- [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch)
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/AI/AI-llm-architecture/2.-data-sampling.md b/src/AI/AI-llm-architecture/2.-data-sampling.md
index fcc941b2d..5e28c3cf2 100644
--- a/src/AI/AI-llm-architecture/2.-data-sampling.md
+++ b/src/AI/AI-llm-architecture/2.-data-sampling.md
@@ -1,28 +1,28 @@
# 2. Veri Örnekleme
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
## **Veri Örnekleme**
-**Veri Örnekleme**, GPT gibi büyük dil modellerinin (LLM'ler) eğitimi için verileri hazırlamada kritik bir süreçtir. Bu, metin verilerini modelin bir önceki kelimelere dayanarak bir sonraki kelimeyi (veya token'ı) tahmin etmeyi öğrenmesi için kullandığı giriş ve hedef dizilerine organize etmeyi içerir. Doğru veri örnekleme, modelin dil kalıplarını ve bağımlılıklarını etkili bir şekilde yakalamasını sağlar.
+**Veri Örnekleme**, GPT gibi büyük dil modellerinin (LLM'ler) eğitimi için veri hazırlamada kritik bir süreçtir. Bu, metin verilerini modelin önceki kelimelere dayanarak bir sonraki kelimeyi (veya token'ı) tahmin etmeyi öğrenmesi için kullandığı giriş ve hedef dizilerine organize etmeyi içerir. Doğru veri örnekleme, modelin dil kalıplarını ve bağımlılıklarını etkili bir şekilde yakalamasını sağlar.
> [!TIP]
> Bu ikinci aşamanın amacı çok basittir: **Giriş verilerini örnekleyin ve genellikle veri kümesini belirli bir uzunluktaki cümlelere ayırarak ve beklenen yanıtı da üreterek eğitim aşamasına hazırlayın.**
### **Veri Örneklemenin Önemi**
-GPT gibi LLM'ler, önceki kelimeler tarafından sağlanan bağlamı anlayarak metin üretmek veya tahmin etmek için eğitilir. Bunu başarmak için, eğitim verileri modelin kelime dizileri ile bunların sonraki kelimeleri arasındaki ilişkiyi öğrenebileceği bir şekilde yapılandırılmalıdır. Bu yapılandırılmış yaklaşım, modelin genelleştirmesine ve tutarlı ve bağlamsal olarak ilgili metinler üretmesine olanak tanır.
+GPT gibi LLM'ler, önceki kelimelerin sağladığı bağlamı anlayarak metin üretmek veya tahmin etmek için eğitilir. Bunu başarmak için, eğitim verileri modelin kelime dizileri ile bunların sonraki kelimeleri arasındaki ilişkiyi öğrenebileceği bir şekilde yapılandırılmalıdır. Bu yapılandırılmış yaklaşım, modelin genelleştirmesine ve tutarlı ve bağlamsal olarak ilgili metinler üretmesine olanak tanır.
### **Veri Örneklemede Temel Kavramlar**
1. **Tokenizasyon:** Metni token (örneğin, kelimeler, alt kelimeler veya karakterler) adı verilen daha küçük birimlere ayırma.
2. **Dizi Uzunluğu (max_length):** Her giriş dizisindeki token sayısı.
-3. **Kaydırmalı Pencere:** Tokenize edilmiş metin üzerinde bir pencereyi hareket ettirerek örtüşen giriş dizileri oluşturma yöntemi.
-4. **Adım:** Kaydırmalı pencerenin bir sonraki diziyi oluşturmak için ileriye doğru hareket ettiği token sayısı.
+3. **Kaydırma Penceresi:** Tokenize edilmiş metin üzerinde bir pencereyi hareket ettirerek örtüşen giriş dizileri oluşturma yöntemi.
+4. **Adım:** Kaydırma penceresinin bir sonraki diziyi oluşturmak için ileriye doğru hareket ettiği token sayısı.
### **Adım Adım Örnek**
-Veri örneklemeyi açıklamak için bir örnek üzerinden gidelim.
+Veri örneklemesini açıklamak için bir örnek üzerinden geçelim.
**Örnek Metin**
```arduino
@@ -30,7 +30,7 @@ Veri örneklemeyi açıklamak için bir örnek üzerinden gidelim.
```
**Tokenizasyon**
-Bir **temel tokenleştirici** kullandığımızı varsayalım; bu, metni kelimelere ve noktalama işaretlerine ayırır:
+Bir **temel tokenleştirici** kullandığımızı varsayalım, bu metni kelimelere ve noktalama işaretlerine ayırır:
```vbnet
Tokens: ["Lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", "adipiscing", "elit."]
```
@@ -48,7 +48,7 @@ Tokens: ["Lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", "adipiscing",
Pencere Pozisyonu
Girdi Dizisi
Hedef Dizisi
1
["Lorem", "ipsum", "dolor", "sit"]
["ipsum", "dolor", "sit", "amet,"]
2
["ipsum", "dolor", "sit", "amet,"]
["dolor", "sit", "amet,", "consectetur"]
3
["dolor", "sit", "amet,", "consectetur"]
["sit", "amet,", "consectetur", "adipiscing"]
4
["sit", "amet,", "consectetur", "adipiscing"]
["amet,", "consectetur", "adipiscing", "elit."]
-3. **Elde Edilen Girdi ve Hedef Dizileri:**
+3. **Sonuç Girdi ve Hedef Dizileri:**
- **Girdi:**
@@ -72,7 +72,7 @@ Tokens: ["Lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", "adipiscing",
]
```
-**Görsel Temsil**
+**Görsel Temsili**
Token Pozisyonu
Token
1
Lorem
2
ipsum
3
dolor
4
sit
5
amet,
6
consectetur
7
adipiscing
8
elit.
@@ -91,11 +91,11 @@ Tokens: ["Lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", "adipiscing",
**Adım 2 ile Örnek:**
-Aynı tokenleştirilmiş metni ve `max_length` değerini 4 kullanarak:
+Aynı tokenleştirilmiş metni ve `max_length` 4'ü kullanarak:
- **İlk Pencere (Pozisyonlar 1-4):** \["Lorem", "ipsum", "dolor", "sit"] → **Hedef:** \["ipsum", "dolor", "sit", "amet,"]
- **İkinci Pencere (Pozisyonlar 3-6):** \["dolor", "sit", "amet,", "consectetur"] → **Hedef:** \["sit", "amet,", "consectetur", "adipiscing"]
-- **Üçüncü Pencere (Pozisyonlar 5-8):** \["amet,", "consectetur", "adipiscing", "elit."] → **Hedef:** \["consectetur", "adipiscing", "elit.", "sed"] _(Devam ettiği varsayılarak)_
+- **Üçüncü Pencere (Pozisyonlar 5-8):** \["amet,", "consectetur", "adipiscing", "elit."] → **Hedef:** \["consectetur", "adipiscing", "elit.", "sed"] _(Devam ettiğini varsayarak)_
## Kod Örneği
@@ -235,4 +235,4 @@ tensor([[ 367, 2885, 1464, 1807],
- [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch)
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/AI/AI-llm-architecture/3.-token-embeddings.md b/src/AI/AI-llm-architecture/3.-token-embeddings.md
index b9ead2643..a31345846 100644
--- a/src/AI/AI-llm-architecture/3.-token-embeddings.md
+++ b/src/AI/AI-llm-architecture/3.-token-embeddings.md
@@ -1,10 +1,10 @@
# 3. Token Embeddings
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
## Token Embeddings
-Metin verilerini tokenize ettikten sonra, GPT gibi büyük dil modelleri (LLM'ler) için verileri hazırlamanın bir sonraki kritik adımı **token embedding'leri** oluşturmaktır. Token embedding'leri, ayrık token'leri (örneğin kelimeler veya alt kelimeler) modelin işleyip öğrenebileceği sürekli sayısal vektörlere dönüştürür. Bu açıklama, token embedding'lerini, başlatılmasını, kullanımını ve modelin token dizilerini anlama yetisini artırmada pozisyonel embedding'lerin rolünü ele alır.
+Metin verilerini tokenize ettikten sonra, GPT gibi büyük dil modelleri (LLM'ler) için verileri hazırlamanın bir sonraki kritik adımı **token embedding'leri** oluşturmaktır. Token embedding'leri, ayrık token'leri (örneğin kelimeler veya alt kelimeler) modelin işleyebileceği ve öğrenebileceği sürekli sayısal vektörlere dönüştürür. Bu açıklama, token embedding'lerini, başlatılmasını, kullanımını ve modelin token dizilerini anlama yetisini artırmada pozisyonel embedding'lerin rolünü ele alır.
> [!TIP]
> Bu üçüncü aşamanın amacı çok basit: **Sözlükteki önceki her token'e modelin eğitimi için istenen boyutlarda bir vektör atamak.** Sözlükteki her kelime, X boyutlu bir uzayda bir noktaya sahip olacaktır.\
@@ -17,7 +17,7 @@ Metin verilerini tokenize ettikten sonra, GPT gibi büyük dil modelleri (LLM'le
**Token Embedding'leri**, token'ların sürekli bir vektör uzayındaki sayısal temsilleridir. Sözlükteki her token, sabit boyutlarda benzersiz bir vektör ile ilişkilendirilir. Bu vektörler, token'lar hakkında anlamsal ve sözdizimsel bilgileri yakalar, böylece modelin verilerdeki ilişkileri ve kalıpları anlamasını sağlar.
- **Sözlük Boyutu:** Modelin sözlüğündeki benzersiz token'ların (örneğin, kelimeler, alt kelimeler) toplam sayısı.
-- **Embedding Boyutları:** Her token'in vektöründeki sayısal değerlerin (boyutların) sayısı. Daha yüksek boyutlar daha ince bilgileri yakalayabilir ancak daha fazla hesaplama kaynağı gerektirir.
+- **Embedding Boyutları:** Her token'ın vektöründeki sayısal değerlerin (boyutların) sayısı. Daha yüksek boyutlar daha ince bilgileri yakalayabilir ancak daha fazla hesaplama kaynağı gerektirir.
**Örnek:**
@@ -63,7 +63,7 @@ tensor([[ 0.3374, -0.1778, -0.1690],
token_index = torch.tensor([3])
print(embedding_layer(token_index))
```
-I'm sorry, but I cannot provide the content you requested.
+**Çıktı:**
```lua
tensor([[-0.4015, 0.9666, -1.1481]], grad_fn=)
```
@@ -136,11 +136,11 @@ Token gömmeleri bireysel token'ların anlamını yakalarken, bir dizideki token
1. **Mutlak Pozisyonel Gömme:**
- Dizideki her pozisyona benzersiz bir pozisyon vektörü atar.
-- **Örnek:** Herhangi bir dizideki ilk token aynı pozisyonel gömme ile, ikinci token başka bir pozisyonel gömme ile temsil edilir, ve bu şekilde devam eder.
+- **Örnek:** Herhangi bir dizideki ilk token aynı pozisyonel gömme vektörüne sahiptir, ikinci token başka birine sahiptir, ve bu şekilde devam eder.
- **Kullananlar:** OpenAI’nin GPT modelleri.
2. **Göreli Pozisyonel Gömme:**
- Token'lar arasındaki göreli mesafeyi kodlar, mutlak pozisyonlarını değil.
-- **Örnek:** İki token'ın ne kadar uzak olduğunu belirtir, mutlak pozisyonlarına bakılmaksızın.
+- **Örnek:** İki token'ın ne kadar uzakta olduğunu belirtir, mutlak pozisyonlarına bakılmaksızın.
- **Kullananlar:** Transformer-XL gibi modeller ve bazı BERT varyantları.
### **Pozisyonel Gömme Nasıl Entegre Edilir:**
@@ -205,4 +205,4 @@ print(input_embeddings.shape) # torch.Size([8, 4, 256])
- [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch)
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/AI/AI-llm-architecture/4.-attention-mechanisms.md b/src/AI/AI-llm-architecture/4.-attention-mechanisms.md
index f1a67bfb7..a03d768e9 100644
--- a/src/AI/AI-llm-architecture/4.-attention-mechanisms.md
+++ b/src/AI/AI-llm-architecture/4.-attention-mechanisms.md
@@ -1,6 +1,6 @@
# 4. Dikkat Mekanizmaları
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
## Dikkat Mekanizmaları ve Sinir Ağlarındaki Kendine Dikkat
@@ -24,7 +24,7 @@ Kendine dikkat, veya iç-dikkat, dikkat mekanizmasının tek bir dizide uygulana
#### Temel Kavramlar
-- **Tokenler**: Giriş dizisinin bireysel öğeleri (örneğin, bir cümledeki kelimeler).
+- **Tokenler**: Giriş dizisinin bireysel elemanları (örneğin, bir cümledeki kelimeler).
- **Gömme**: Anlamsal bilgiyi yakalayan tokenlerin vektör temsilleri.
- **Dikkat Ağırlıkları**: Her tokenin diğerlerine göre önemini belirleyen değerler.
@@ -45,24 +45,24 @@ Amacımız, **shiny** kelimesi için kendine dikkat kullanarak **bağlam vektör
Cümledeki her kelime için, **shiny** ile ilgili dikkat puanını, gömmelerinin noktasal çarpımını hesaplayarak hesaplayın.
-**"Hello" ve "shiny" arasındaki Dikkat Puanı**
+**"Hello" ve "shiny" Arasındaki Dikkat Puanı**
-**"shiny" ve "shiny" arasındaki Dikkat Puanı**
+**"shiny" ve "shiny" Arasındaki Dikkat Puanı**
-**"sun" ve "shiny" arasındaki Dikkat Puanı**
+**"sun" ve "shiny" Arasındaki Dikkat Puanı**
#### Adım 2: Dikkat Puanlarını Normalleştirerek Dikkat Ağırlıklarını Elde Et
> [!TIP]
-> Matematik terimlerinde kaybolmayın, bu fonksiyonun amacı basit, tüm ağırlıkları normalleştirin ki **toplamları 1 olsun**.
+> Matematiksel terimlerde kaybolmayın, bu fonksiyonun amacı basit, tüm ağırlıkları normalleştirin ki **toplamları 1 olsun**.
>
-> Ayrıca, **softmax** fonksiyonu kullanılır çünkü bu, üstel kısım nedeniyle farklılıkları vurgular ve yararlı değerleri tespit etmeyi kolaylaştırır.
+> Ayrıca, **softmax** fonksiyonu, üstel kısım nedeniyle farklılıkları vurguladığı için, yararlı değerleri tespit etmeyi kolaylaştırır.
Dikkat puanlarına **softmax fonksiyonunu** uygulayarak, toplamı 1 olan dikkat ağırlıklarına dönüştürün.
@@ -125,7 +125,7 @@ Sorgu, daha önce olduğu gibi kullanılacak veridir, anahtarlar ve değerler ma
#### Adım 1: Sorguları, Anahtarları ve Değerleri Hesapla
-Her token, tanımlı matrislerle boyut değerlerini çarparak kendi sorgu, anahtar ve değer matrisine sahip olacaktır:
+Her token, tanımlanan matrislerle boyut değerlerini çarparak kendi sorgu, anahtar ve değer matrisine sahip olacaktır:
@@ -138,7 +138,7 @@ Varsayalım:
- Giriş boyutu `din=3` (gömme boyutu)
- Çıkış boyutu `dout=2` (sorgular, anahtarlar ve değerler için istenen boyut)
-Ağırlık matrislerini başlat:
+Ağırlık matrislerini başlatın:
```python
import torch.nn as nn
@@ -149,7 +149,7 @@ W_query = nn.Parameter(torch.rand(d_in, d_out))
W_key = nn.Parameter(torch.rand(d_in, d_out))
W_value = nn.Parameter(torch.rand(d_in, d_out))
```
-Sorguları, anahtarları ve değerleri hesaplayın:
+Sorguları, anahtarları ve değerleri hesapla:
```python
queries = torch.matmul(inputs, W_query)
keys = torch.matmul(inputs, W_key)
@@ -170,7 +170,7 @@ Nokta ürünlerinin çok büyük olmasını önlemek için, bunları anahtar boy
> [!TIP]
-> Puan, boyutların karekökü ile bölünür çünkü nokta ürünleri çok büyük hale gelebilir ve bu, onları düzenlemeye yardımcı olur.
+> Puan, boyutların kareköküne bölünür çünkü nokta ürünleri çok büyük hale gelebilir ve bu, onları düzenlemeye yardımcı olur.
**Dikkat Ağırlıklarını Elde Etmek İçin Softmax Uygula:** İlk örnekte olduğu gibi, tüm değerleri normalize et, böylece toplamları 1 olur.
@@ -178,7 +178,7 @@ Nokta ürünlerinin çok büyük olmasını önlemek için, bunları anahtar boy
#### Adım 3: Bağlam Vektörlerini Hesapla
-İlk örnekte olduğu gibi, tüm değer matrislerini topla ve her birini dikkat ağırlığı ile çarp:
+İlk örnekte olduğu gibi, her birini dikkat ağırlığı ile çarparak tüm değer matrislerini topla:
@@ -232,12 +232,12 @@ LLM'ler için modelin, **bir sonraki token'ı tahmin etmek** amacıyla mevcut po
### Nedensel Dikkat Maskesi Uygulama
-Nedensel dikkati uygulamak için, dikkat puanlarına **softmax işlemi öncesinde** bir maske uygularız, böylece kalanlar hala 1'e toplamış olur. Bu maske, gelecekteki token'ların dikkat puanlarını negatif sonsuzluğa ayarlayarak, softmax'tan sonra dikkat ağırlıklarının sıfır olmasını sağlar.
+Nedensel dikkati uygulamak için, dikkat puanlarına **softmax işleminden önce** bir maske uygularız, böylece kalanlar hala 1'e toplamış olur. Bu maske, gelecekteki token'ların dikkat puanlarını negatif sonsuz olarak ayarlayarak, softmax'tan sonra dikkat ağırlıklarının sıfır olmasını sağlar.
**Adımlar**
1. **Dikkat Puanlarını Hesapla**: Önceki gibi.
-2. **Maske Uygula**: Diyagonalın üstünde negatif sonsuzlukla doldurulmuş bir üst üçgen matris kullanın.
+2. **Maske Uygula**: Diyagonalın üstünde negatif sonsuz ile doldurulmuş bir üst üçgen matris kullanın.
```python
mask = torch.triu(torch.ones(seq_len, seq_len), diagonal=1) * float('-inf')
@@ -252,7 +252,7 @@ attention_weights = torch.softmax(masked_scores, dim=-1)
### Ek Dikkat Ağırlıklarını Dropout ile Maskeleme
-**Aşırı uyum sağlamayı önlemek** için, softmax işleminden sonra dikkat ağırlıklarına **dropout** uygulayabiliriz. Dropout, eğitim sırasında dikkat ağırlıklarının **rastgele sıfırlanmasını** sağlar.
+**Aşırı uyum sağlamayı önlemek** için, softmax işleminden sonra dikkat ağırlıklarına **dropout** uygulayabiliriz. Dropout, eğitim sırasında **dikkat ağırlıklarının bazılarını rastgele sıfırlar**.
```python
dropout = nn.Dropout(p=0.5)
attention_weights = dropout(attention_weights)
@@ -261,7 +261,7 @@ Bir normal dropout yaklaşık %10-20'dir.
### Kod Örneği
-Kod örneği için [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01_main-chapter-code/ch03.ipynb):
+Kod örneği [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01_main-chapter-code/ch03.ipynb):
```python
import torch
import torch.nn as nn
@@ -325,11 +325,11 @@ print("context_vecs.shape:", context_vecs.shape)
```
## Tek Başlı Dikkati Çok Başlı Dikkate Genişletme
-**Çok başlı dikkat**, pratikte **kendi ağırlıkları** olan **birden fazla örneğin** kendine dikkat fonksiyonunu çalıştırmasından oluşur, böylece farklı son vektörler hesaplanır.
+**Çok başlı dikkat**, pratikte **kendi ağırlıklarıyla** her biri **birden fazla örneği** kendine dikkat fonksiyonunu çalıştırmaktan oluşur, böylece farklı son vektörler hesaplanır.
### Kod Örneği
-Önceki kodu yeniden kullanmak ve sadece birkaç kez çalıştıran bir sarmalayıcı eklemek mümkün olabilir, ancak bu, tüm başları aynı anda işleyen daha optimize bir versiyondur [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01_main-chapter-code/ch03.ipynb) ve pahalı döngü sayısını azaltır. Kodda görebileceğiniz gibi, her bir token'ın boyutları baş sayısına göre farklı boyutlara bölünmüştür. Bu şekilde, token 8 boyuta sahipse ve 3 baş kullanmak istiyorsak, boyutlar 4 boyuttan oluşan 2 diziye bölünecek ve her baş bunlardan birini kullanacaktır:
+Önceki kodu yeniden kullanmak ve sadece birkaç kez çalıştıran bir sarmalayıcı eklemek mümkün olabilir, ancak bu, tüm başları aynı anda işleyen [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01_main-chapter-code/ch03.ipynb) adresinden daha optimize edilmiş bir versiyondur (pahalı for döngülerinin sayısını azaltır). Kodda görebileceğiniz gibi, her bir token'ın boyutları baş sayısına göre farklı boyutlara bölünmüştür. Bu şekilde, eğer token 8 boyuta sahipse ve 3 baş kullanmak istiyorsak, boyutlar 4 boyuttan oluşan 2 diziye bölünecek ve her baş bunlardan birini kullanacaktır:
```python
class MultiHeadAttention(nn.Module):
def __init__(self, d_in, d_out, context_length, dropout, num_heads, qkv_bias=False):
@@ -409,13 +409,13 @@ print("context_vecs.shape:", context_vecs.shape)
Başka bir kompakt ve verimli uygulama için PyTorch'taki [`torch.nn.MultiheadAttention`](https://pytorch.org/docs/stable/generated/torch.nn.MultiheadAttention.html) sınıfını kullanabilirsiniz.
> [!TIP]
-> ChatGPT'nin, her başın tüm token'ların tüm boyutlarını kontrol etmesi yerine token'ların boyutlarını başlar arasında bölmenin neden daha iyi olduğu hakkında kısa yanıtı:
+> ChatGPT'nin, her başın tüm token'ların tüm boyutlarını kontrol etmesi yerine token'ların boyutlarını başlar arasında bölmenin neden daha iyi olduğuna dair kısa yanıtı:
>
-> Her başın tüm gömme boyutlarını işlemesine izin vermek, her başın tam bilgiye erişimi olacağı için avantajlı gibi görünse de, standart uygulama **gömme boyutlarını başlar arasında bölmektir**. Bu yaklaşım, hesaplama verimliliği ile model performansını dengeler ve her başın çeşitli temsilleri öğrenmesini teşvik eder. Bu nedenle, gömme boyutlarını bölmek, her başın tüm boyutları kontrol etmesinden genellikle tercih edilir.
+> Her başın tüm gömme boyutlarını işlemesine izin vermek, her başın tam bilgiye erişimi olacağı için avantajlı gibi görünse de, standart uygulama **gömme boyutlarını başlar arasında bölmektir**. Bu yaklaşım, hesaplama verimliliği ile model performansını dengeleyerek her başın çeşitli temsilleri öğrenmesini teşvik eder. Bu nedenle, gömme boyutlarını bölmek, her başın tüm boyutları kontrol etmesinden genellikle tercih edilir.
## References
- [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch)
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/AI/AI-llm-architecture/5.-llm-architecture.md b/src/AI/AI-llm-architecture/5.-llm-architecture.md
index 9490e0f4f..d2274f4cb 100644
--- a/src/AI/AI-llm-architecture/5.-llm-architecture.md
+++ b/src/AI/AI-llm-architecture/5.-llm-architecture.md
@@ -1,6 +1,6 @@
# 5. LLM Mimarisi
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
## LLM Mimarisi
@@ -16,8 +16,8 @@ Yüksek seviyeli bir temsil aşağıda gözlemlenebilir:
1. **Girdi (Tokenize Edilmiş Metin)**: Süreç, sayısal temsillere dönüştürülen tokenize edilmiş metinle başlar.
-2. **Token Gömme ve Pozisyon Gömme Katmanı**: Tokenize edilmiş metin, bir **token gömme** katmanından ve bir **pozisyon gömme katmanından** geçirilir; bu, kelime sırasını anlamak için kritik olan bir dizideki token'ların konumunu yakalar.
-3. **Transformer Blokları**: Model, her biri birden fazla katmana sahip **12 transformer bloğu** içerir. Bu bloklar aşağıdaki diziyi tekrarlar:
+2. **Token Gömme ve Pozisyon Gömme Katmanı**: Tokenize edilmiş metin, kelime sırasını anlamak için kritik olan bir dizideki token'ların konumunu yakalayan bir **token gömme** katmanından ve bir **pozisyon gömme katmanından** geçirilir.
+3. **Dönüştürücü Bloklar**: Model, her biri birden fazla katmana sahip **12 dönüştürücü blok** içerir. Bu bloklar aşağıdaki diziyi tekrarlar:
- **Masked Multi-Head Attention**: Modelin girdi metninin farklı kısımlarına aynı anda odaklanmasına olanak tanır.
- **Katman Normalizasyonu**: Eğitimi stabilize etmek ve geliştirmek için bir normalizasyon adımı.
- **İleri Besleme Katmanı**: Dikkat katmanından gelen bilgileri işlemek ve bir sonraki token hakkında tahminlerde bulunmakla sorumludur.
@@ -213,13 +213,13 @@ torch.sqrt(torch.tensor(2.0 / torch.pi)) *
#### **Amaç ve İşlevsellik**
- **GELU (Gaussian Error Linear Unit):** Modelle doğrusal olmayanlık getiren bir aktivasyon fonksiyonu.
-- **Düzgün Aktivasyon:** Negatif girdileri sıfıra indiren ReLU'nun aksine, GELU girdileri çıktılara düzgün bir şekilde eşler ve negatif girdiler için küçük, sıfırdan farklı değerler almasına izin verir.
+- **Düzgün Aktivasyon:** Negatif girdileri sıfıra indiren ReLU'nun aksine, GELU girdileri çıktılara düzgün bir şekilde haritalar, negatif girdiler için küçük, sıfırdan farklı değerler almasına izin verir.
- **Matematiksel Tanım:**
> [!TIP]
-> Bu fonksiyonun FeedForward katmanındaki doğrusal katmanlardan sonra kullanılmasının amacı, doğrusal verileri doğrusal olmayan hale getirerek modelin karmaşık, doğrusal olmayan ilişkileri öğrenmesini sağlamaktır.
+> FeedForward katmanındaki doğrusal katmanlardan sonra bu fonksiyonun kullanılmasının amacı, doğrusal verileri doğrusal olmayan hale getirerek modelin karmaşık, doğrusal olmayan ilişkileri öğrenmesini sağlamaktır.
### **FeedForward Sinir Ağı**
@@ -252,7 +252,7 @@ return x # Output shape: (batch_size, seq_len, emb_dim)
- **İkinci Lineer Katman:** Boyutları tekrar `emb_dim`'ye düşürür.
> [!TIP]
-> Gördüğünüz gibi, Feed Forward ağı 3 katman kullanır. İlk katman, boyutları 4 ile çarpacak lineer ağırlıkları (model içinde eğitilecek parametreler) kullanarak bir lineer katmandır. Ardından, daha zengin temsilleri yakalamak için tüm bu boyutlarda doğrusal olmayan varyasyonlar uygulamak üzere GELU fonksiyonu kullanılır ve nihayetinde orijinal boyutlara geri dönmek için başka bir lineer katman kullanılır.
+> Gördüğünüz gibi, Feed Forward ağı 3 katman kullanıyor. İlk katman, boyutları 4 ile çarpacak lineer bir katmandır (model içinde eğitilecek parametreler). Ardından, bu boyutların hepsinde daha zengin temsilleri yakalamak için doğrusal olmayan varyasyonlar uygulamak üzere GELU fonksiyonu kullanılır ve nihayetinde orijinal boyutlara geri dönmek için başka bir lineer katman kullanılır.
### **Çoklu Başlı Dikkat Mekanizması**
@@ -260,7 +260,7 @@ Bu daha önceki bir bölümde açıklandı.
#### **Amaç ve İşlevsellik**
-- **Çoklu Başlı Kendine Dikkat:** Modelin bir token'ı kodlarken girdi dizisi içindeki farklı pozisyonlara odaklanmasına olanak tanır.
+- **Çoklu Başlı Kendine Dikkat:** Modelin bir token'ı kodlarken girdi dizisi içindeki farklı pozisyonlara odaklanmasını sağlar.
- **Ana Bileşenler:**
- **Sorgular, Anahtarlar, Değerler:** Girdinin lineer projeksiyonları, dikkat puanlarını hesaplamak için kullanılır.
- **Başlar:** Paralel çalışan birden fazla dikkat mekanizması (`num_heads`), her biri azaltılmış bir boyutla (`head_dim`).
@@ -293,18 +293,18 @@ return self.scale * norm_x + self.shift
```
#### **Amaç ve İşlevsellik**
-- **Katman Normalizasyonu:** Bir partideki her bireysel örnek için özellikler (gömme boyutları) boyunca girdileri normalleştirmek için kullanılan bir teknik.
+- **Katman Normalizasyonu:** Bir partideki her bireysel örnek için özellikler (gömme boyutları) boyunca girişleri normalleştirmek için kullanılan bir teknik.
- **Bileşenler:**
- **`eps`:** Normalizasyon sırasında sıfıra bölmeyi önlemek için varyansa eklenen küçük bir sabit (`1e-5`).
-- **`scale` ve `shift`:** Normalleştirilmiş çıktıyı ölçeklendirmek ve kaydırmak için modelin kullanabileceği öğrenilebilir parametreler (`nn.Parameter`). Sırasıyla birler ve sıfırlar ile başlatılır.
+- **`scale` ve `shift`:** Normalleştirilmiş çıktıyı ölçeklendirmek ve kaydırmak için modelin öğrenebileceği parametreler (`nn.Parameter`). Sırasıyla birler ve sıfırlar ile başlatılır.
- **Normalizasyon Süreci:**
- **Ortalama Hesaplama (`mean`):** Gömme boyutu boyunca giriş `x`'in ortalamasını hesaplar (`dim=-1`), yayılma için boyutu korur (`keepdim=True`).
-- **Varyans Hesaplama (`var`):** Gömme boyutu boyunca `x`'in varyansını hesaplar, boyutu da korur. `unbiased=False` parametresi, varyansın yanlı tahminci kullanılarak hesaplanmasını sağlar (örneğin `N` yerine `N-1` ile bölme), bu da örnekler yerine özellikler üzerinde normalleştirme yaparken uygundur.
+- **Varyans Hesaplama (`var`):** Gömme boyutu boyunca `x`'in varyansını hesaplar, boyutu da korur. `unbiased=False` parametresi, varyansın yanlı tahminci kullanılarak hesaplanmasını sağlar (örnek sayısı `N` yerine `N-1` ile bölünerek), bu da özellikler üzerinde normalizasyon yaparken uygundur.
- **Normalleştirme (`norm_x`):** `x`'ten ortalamayı çıkarır ve varyansın karekökü artı `eps` ile böler.
-- **Ölçekleme ve Kaydırma:** Normalleştirilmiş çıktıya öğrenilebilir `scale` ve `shift` parametrelerini uygular.
+- **Ölçek ve Kaydır:** Normalleştirilmiş çıktıya öğrenilebilir `scale` ve `shift` parametrelerini uygular.
> [!TIP]
-> Amaç, aynı token'ın tüm boyutları boyunca 0 ortalama ve 1 varyans sağlamaktır. Bunun amacı, **derin sinir ağlarının eğitimini stabilize etmek** için iç değişken kaymasını azaltmaktır; bu, eğitim sırasında parametrelerin güncellenmesi nedeniyle ağ aktivasyonlarının dağılımındaki değişimi ifade eder.
+> Amaç, aynı token'ın tüm boyutları boyunca 0 ortalama ve 1 varyans sağlamaktır. Bunun amacı, **derin sinir ağlarının eğitimini stabilize etmek** için iç değişken kaymasını azaltmaktır; bu, eğitim sırasında parametrelerin güncellenmesi nedeniyle ağ aktivasyonlarının dağılımındaki değişikliği ifade eder.
### **Transformer Bloğu**
@@ -436,10 +436,10 @@ return logits # Output shape: (batch_size, seq_len, vocab_size)
#### **Amaç ve İşlevsellik**
- **Gömme Katmanları:**
-- **Token Gömme (`tok_emb`):** Token indekslerini gömülere dönüştürür. Hatırlatma olarak, bunlar kelime dağarcığındaki her token'ın her boyutuna verilen ağırlıklardır.
-- **Pozisyonel Gömme (`pos_emb`):** Gömülere pozisyon bilgisi ekleyerek token'ların sırasını yakalar. Hatırlatma olarak, bunlar metindeki pozisyonuna göre token'a verilen ağırlıklardır.
-- **Dropout (`drop_emb`):** Gömülere düzenleme için uygulanır.
-- **Transformer Blokları (`trf_blocks`):** Gömüleri işlemek için `n_layers` transformer bloğunun yığını.
+- **Token Gömme (`tok_emb`):** Token indekslerini gömmelere dönüştürür. Hatırlatma olarak, bunlar kelime dağarcığındaki her token'ın her boyutuna verilen ağırlıklardır.
+- **Pozisyonel Gömme (`pos_emb`):** Gömmelere pozisyonel bilgi ekleyerek token'ların sırasını yakalar. Hatırlatma olarak, bunlar metindeki pozisyonuna göre token'a verilen ağırlıklardır.
+- **Dropout (`drop_emb`):** Gömmelere düzenleme için uygulanır.
+- **Transformer Blokları (`trf_blocks`):** Gömmeleri işlemek için `n_layers` transformer bloğunun yığını.
- **Son Normalizasyon (`final_norm`):** Çıktı katmanından önce katman normalizasyonu.
- **Çıktı Katmanı (`out_head`):** Son gizli durumları kelime dağarcığı boyutuna projekte ederek tahmin için logitleri üretir.
@@ -448,7 +448,7 @@ return logits # Output shape: (batch_size, seq_len, vocab_size)
>
> **Belirtilen kadar transformer bloğu kullanacağını** ve her transformer bloğunun bir çoklu başlık dikkat ağı, bir ileri besleme ağı ve birkaç normalizasyon kullandığını not edin. Yani 12 transformer bloğu kullanılıyorsa, bunu 12 ile çarpın.
>
-> Ayrıca, **çıktıdan önce** bir **normalizasyon** katmanı eklenir ve sonuçları uygun boyutlarla almak için sonunda bir son doğrusal katman uygulanır. Her son vektörün kullanılan kelime dağarcığının boyutuna sahip olduğunu not edin. Bu, kelime dağarcığındaki her olası token için bir olasılık elde etmeye çalıştığı içindir.
+> Ayrıca, **çıktıdan önce** bir **normalizasyon** katmanı eklenir ve sonuçları uygun boyutlarla almak için sonunda bir son lineer katman uygulanır. Her son vektörün kullanılan kelime dağarcığının boyutuna sahip olduğunu not edin. Bu, kelime dağarcığındaki her olası token için bir olasılık elde etmeye çalıştığı içindir.
## Eğitilecek Parametre Sayısı
@@ -612,7 +612,7 @@ total_params = 163,009,536
Bir önceki gibi bir sonraki token'ı tahmin eden bir modele sahip olmak, çıktının son token değerlerini almak için gereklidir (çünkü bunlar tahmin edilen token'ın değerleri olacaktır), bu da **sözlükteki her bir giriş için bir değer** olacak ve ardından `softmax` fonksiyonunu kullanarak boyutları 1'e toplam olan olasılıklara normalize etmek ve ardından en büyük girişin indeksini almak, bu da sözlükteki kelimenin indeksi olacaktır.
-[https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01_main-chapter-code/ch04.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01_main-chapter-code/ch04.ipynb) adresinden kod:
+Code from [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01_main-chapter-code/ch04.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01_main-chapter-code/ch04.ipynb):
```python
def generate_text_simple(model, idx, max_new_tokens, context_size):
# idx is (batch, n_tokens) array of indices in the current context
@@ -668,4 +668,4 @@ print("Output length:", len(out[0]))
- [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch)
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/AI/AI-llm-architecture/6.-pre-training-and-loading-models.md b/src/AI/AI-llm-architecture/6.-pre-training-and-loading-models.md
index 5ab86d3a8..7dcc59e80 100644
--- a/src/AI/AI-llm-architecture/6.-pre-training-and-loading-models.md
+++ b/src/AI/AI-llm-architecture/6.-pre-training-and-loading-models.md
@@ -1,31 +1,31 @@
# 6. Ön Eğitim ve Modellerin Yüklenmesi
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
## Metin Üretimi
Bir modeli eğitmek için, o modelin yeni token'lar üretebilmesi gerekecek. Ardından, üretilen token'ları beklenenlerle karşılaştırarak modeli **gerekli token'ları öğrenmesi için eğiteceğiz**.
-Önceki örneklerde bazı token'ları tahmin ettiğimiz için, bu amaçla o fonksiyonu yeniden kullanmak mümkündür.
+Önceki örneklerde bazı token'ları zaten tahmin ettiğimiz için, bu amaç için o fonksiyonu yeniden kullanmak mümkündür.
> [!TIP]
-> Bu altıncı aşamanın amacı çok basit: **Modeli sıfırdan eğitmek**. Bunun için önceki LLM mimarisi, tanımlanan kayıp fonksiyonları ve optimizasyon ile veri setleri üzerinde döngülerle tüm model parametrelerini eğitmek için kullanılacaktır.
+> Bu altıncı aşamanın amacı çok basit: **Modeli sıfırdan eğitmek**. Bunun için önceki LLM mimarisi, tanımlanan kayıp fonksiyonları ve optimizasyon ile veri setleri üzerinde döngüler oluşturarak modelin tüm parametrelerini eğitmek için kullanılacaktır.
## Metin Değerlendirmesi
Doğru bir eğitim gerçekleştirmek için, beklenen token için elde edilen tahminleri ölçmek gereklidir. Eğitimin amacı, doğru token'ın olasılığını maksimize etmektir; bu, diğer token'lara göre olasılığını artırmayı içerir.
-Doğru token'ın olasılığını maksimize etmek için, modelin ağırlıkları, bu olasılığın maksimize edilmesi için değiştirilmelidir. Ağırlık güncellemeleri **geri yayılım** yoluyla yapılır. Bu, **maksimize edilecek bir kayıp fonksiyonu** gerektirir. Bu durumda, fonksiyon **gerçekleştirilen tahmin ile istenen arasındaki fark** olacaktır.
+Doğru token'ın olasılığını maksimize etmek için, modelin ağırlıkları, bu olasılığın maksimize edilmesi için değiştirilmelidir. Ağırlık güncellemeleri **geri yayılım** yoluyla yapılır. Bu, **maksimize edilecek bir kayıp fonksiyonu** gerektirir. Bu durumda, fonksiyon **yapılan tahmin ile istenen arasındaki fark** olacaktır.
Ancak, ham tahminlerle çalışmak yerine, n tabanlı bir logaritma ile çalışacaktır. Yani, beklenen token'ın mevcut tahmini 7.4541e-05 ise, **7.4541e-05**'in doğal logaritması (taban *e*) yaklaşık olarak **-9.5042**'dir.\
-Örneğin, 5 token'lık bir bağlam uzunluğuna sahip her giriş için modelin 5 token tahmin etmesi gerekecek; ilk 4 token girişi sonuncusu ve beşincisi tahmin edilen olacaktır. Bu nedenle, her giriş için bu durumda 5 tahminimiz olacak (ilk 4'ü girdi olsa da model bunu bilmez) ve dolayısıyla 5 beklenen token ve 5 maksimize edilecek olasılık olacaktır.
+Örneğin, 5 token'lık bir bağlam uzunluğuna sahip her giriş için modelin 5 token tahmin etmesi gerekecek; ilk 4 token, girdinin sonuncusu ve beşincisi tahmin edilen olacaktır. Bu nedenle, her giriş için bu durumda 5 tahminimiz olacak (ilk 4'ü girdi olsa da model bunu bilmez) ve dolayısıyla 5 beklenen token ve 5 maksimize edilecek olasılık olacaktır.
-Bu nedenle, her tahmine doğal logaritma uygulandıktan sonra, **ortalama** hesaplanır, **eksi sembolü kaldırılır** (bu _çapraz entropi kaybı_ olarak adlandırılır) ve bu, **0'a mümkün olduğunca yakın bir şekilde azaltılması gereken sayıdır** çünkü 1'in doğal logaritması 0'dır:
+Bu nedenle, her tahmine doğal logaritma uygulandıktan sonra, **ortalama** hesaplanır, **eksi sembolü kaldırılır** (bu _çapraz entropi kaybı_ olarak adlandırılır) ve bu, **mümkün olduğunca 0'a yakın bir sayı** olmalıdır çünkü 1'in doğal logaritması 0'dır:
Modelin ne kadar iyi olduğunu ölçmenin bir diğer yolu da karmaşıklıktır. **Karmaşıklık**, bir olasılık modelinin bir örneği ne kadar iyi tahmin ettiğini değerlendirmek için kullanılan bir metriktir. Dil modellemesinde, bir dizideki bir sonraki token'ı tahmin ederken **modelin belirsizliğini** temsil eder.\
-Örneğin, 48725 karmaşıklık değeri, bir token'ı tahmin etmesi gerektiğinde, kelime dağarcığındaki 48,725 token'dan hangisinin doğru olduğu konusunda emin olmadığını gösterir.
+Örneğin, 48725 karmaşıklık değeri, bir token'ı tahmin etmesi gerektiğinde, kelime dağarcığındaki 48,725 token'dan hangisinin doğru olduğunu bilmediği anlamına gelir.
## Ön Eğitim Örneği
@@ -529,7 +529,7 @@ torch.save({
```
### Metni <--> id'lere dönüştüren fonksiyonlar
-Bu, kelime dağarcığındaki metinleri id'lere ve tersine dönüştürmek için kullanılabilecek bazı basit fonksiyonlardır. Bu, metin işleme sürecinin başında ve tahminlerin sonunda gereklidir:
+Bu, kelime dağarcığındaki metinleri id'lere ve tersine dönüştürmek için kullanılabilecek bazı basit fonksiyonlardır. Bu, metin işleme başlangıcında ve tahminlerin sonunda gereklidir:
```python
# Functions to transform from tokens to ids and from to ids to tokens
def text_to_token_ids(text, tokenizer):
@@ -543,14 +543,14 @@ return tokenizer.decode(flat.tolist())
```
### Metin oluşturma fonksiyonları
-Önceki bölümde, **en olası token**'ı elde eden bir fonksiyon tanımlandı. Ancak bu, her giriş için her zaman aynı çıktının üretileceği anlamına gelir, bu da çok deterministik hale getirir.
+Önceki bölümde, **en olası token**'ı elde eden bir fonksiyon tanımlandı. Ancak bu, her giriş için her zaman aynı çıktının üretileceği anlamına gelir ki bu da çok deterministik hale getirir.
Aşağıdaki `generate_text` fonksiyonu, `top-k`, `temperature` ve `multinomial` kavramlarını uygulayacaktır.
-- **`top-k`**, en üst k token dışında tüm token'ların olasılıklarını `-inf`'ye düşürmeye başlayacağımız anlamına gelir. Yani, k=3 ise, bir karar vermeden önce yalnızca en olası 3 token'ın olasılığı `-inf`'den farklı olacaktır.
-- **`temperature`**, her olasılığın sıcaklık değeri ile bölüneceği anlamına gelir. `0.1` değeri, en yüksek olasılığı en düşük olasılıkla karşılaştırıldığında artırırken, örneğin `5` sıcaklığı daha düz bir dağılım yaratır. Bu, LLM'nin yanıtlarında istediğimiz varyasyonu artırmaya yardımcı olur.
-- Sıcaklık uygulandıktan sonra, tüm kalan token'ların toplam olasılığının 1 olması için tekrar bir **`softmax`** fonksiyonu uygulanır.
-- Son olarak, en büyük olasılığa sahip token'ı seçmek yerine, fonksiyon **`multinomial`** uygulanarak **son olasılıklara göre bir sonraki token'ı tahmin eder**. Yani, token 1'in %70 olasılığı, token 2'nin %20 ve token 3'ün %10 olasılığı varsa, %70 oranında token 1 seçilecek, %20 oranında token 2 ve %10 oranında token 3 seçilecektir.
+- **`top-k`**, en üst k token dışında tüm token'ların olasılıklarını `-inf`'ye düşürmeye başlayacağımız anlamına gelir. Yani, eğer k=3 ise, bir karar vermeden önce yalnızca en olası 3 token'ın olasılığı `-inf`'den farklı olacaktır.
+- **`temperature`**, her olasılığın sıcaklık değeri ile bölüneceği anlamına gelir. `0.1` değeri, en yüksek olasılığı en düşük olasılıkla karşılaştırarak artırırken, örneğin `5` sıcaklığı daha düz bir dağılım yaratır. Bu, LLM'nin yanıtlarındaki varyasyonu artırmak için yardımcı olur.
+- Sıcaklık uygulandıktan sonra, tüm kalan token'ların toplam olasılığının 1 olmasını sağlamak için tekrar bir **`softmax`** fonksiyonu uygulanır.
+- Son olarak, en büyük olasılığa sahip token'ı seçmek yerine, fonksiyon **`multinomial`** uygulanarak **son olasılıklara göre bir sonraki token'ı tahmin eder**. Yani, eğer token 1'in olasılığı %70, token 2'nin %20 ve token 3'ün %10 ise, %70 oranında token 1 seçilecek, %20 oranında token 2 ve %10 oranında token 3 seçilecektir.
```python
# Generate text function
def generate_text(model, idx, max_new_tokens, context_size, temperature=0.0, top_k=None, eos_id=None):
@@ -592,9 +592,9 @@ idx = torch.cat((idx, idx_next), dim=1) # (batch_size, num_tokens+1)
return idx
```
> [!TIP]
-> `top-k` için yaygın bir alternatif olan [**`top-p`**](https://en.wikipedia.org/wiki/Top-p_sampling), aynı zamanda nucleus sampling olarak da bilinir, en yüksek olasılığa sahip k örneği almak yerine, tüm sonuçlanan **vocabulary**'yi olasılıklara göre **düzenler** ve en yüksek olasılıktan en düşük olasılığa kadar bir **eşik değere ulaşana kadar** toplar.
+> `top-k` için yaygın bir alternatif olan [**`top-p`**](https://en.wikipedia.org/wiki/Top-p_sampling), aynı zamanda çekirdek örnekleme olarak da bilinir, en yüksek olasılığa sahip k örneği almak yerine, tüm sonuçlanan **kelime dağarcığını** olasılıklara göre **düzenler** ve en yüksek olasılıktan en düşük olasılığa kadar **toplar** ve bir **eşik değere ulaşana kadar** devam eder.
>
-> Ardından, **yalnızca bu kelimeler** vocabulary'den göreceli olasılıklarına göre dikkate alınacaktır.
+> Ardından, **yalnızca bu kelimeler** kelime dağarcığının göreli olasılıklarına göre dikkate alınacaktır.
>
> Bu, her durumda optimal k'nın farklı olabileceği için `k` örneği seçmeye gerek kalmadan **yalnızca bir eşik** belirlemeyi sağlar.
>
@@ -602,14 +602,14 @@ return idx
> [!TIP]
> Üretilen metni iyileştirmenin bir diğer yolu, bu örnekte kullanılan açgözlü arama yerine **Beam search** kullanmaktır.\
-> Açgözlü aramanın her adımda en olası bir sonraki kelimeyi seçip tek bir diziyi oluşturmasının aksine, **beam search her adımda en yüksek puan alan 𝑘 k kısmi diziyi** ( "beams" olarak adlandırılır) takip eder. Birden fazla olasılığı aynı anda keşfederek, verimlilik ve kaliteyi dengeler, açgözlü yaklaşımın erken, altoptimal seçimler nedeniyle kaçırabileceği **daha iyi bir genel** diziyi bulma şansını artırır.
+> Açgözlü aramanın her adımda en olası bir sonraki kelimeyi seçip tek bir diziyi oluşturmasının aksine, **beam search her adımda en yüksek puan alan 𝑘 k kısmi dizilerini** ( "beams" olarak adlandırılır) takip eder. Birden fazla olasılığı aynı anda keşfederek, verimlilik ve kaliteyi dengeler, açgözlü yaklaşımın erken, altoptimal seçimler nedeniyle kaçırabileceği **daha iyi bir genel** diziyi bulma şansını artırır.
>
> _Bu iyileştirmenin önceki kodda yer almadığını unutmayın._
### Loss functions
-**`calc_loss_batch`** fonksiyonu, tek bir batch'in tahmininin çapraz entropisini hesaplar.\
-**`calc_loss_loader`** tüm batch'lerin çapraz entropisini alır ve **ortalama çapraz entropiyi** hesaplar.
+**`calc_loss_batch`** fonksiyonu, tek bir partinin tahmininin çapraz entropisini hesaplar.\
+**`calc_loss_loader`** tüm partilerin çapraz entropisini alır ve **ortalama çapraz entropiyi** hesaplar.
```python
# Define loss functions
def calc_loss_batch(input_batch, target_batch, model, device):
@@ -750,23 +750,23 @@ print("Validation loss:", val_loss)
```
### Eğitim fonksiyonları
-`generate_and_print_sample` fonksiyonu, bir bağlam alacak ve modelin o noktada ne kadar iyi olduğunu anlamak için bazı token'lar üretecektir. Bu, `train_model_simple` tarafından her adımda çağrılır.
+`generate_and_print_sample` fonksiyonu, bir bağlam alacak ve modelin o noktada ne kadar iyi olduğunu anlamak için bazı token'lar üretecektir. Bu, her adımda `train_model_simple` tarafından çağrılır.
`evaluate_model` fonksiyonu, eğitim fonksiyonuna belirtilen sıklıkta çağrılır ve model eğitimindeki o noktada eğitim kaybını ve doğrulama kaybını ölçmek için kullanılır.
Büyük fonksiyon `train_model_simple`, modeli gerçekten eğiten fonksiyondur. Beklentileri şunlardır:
-- Eğitim verisi yükleyici (verilerin zaten ayrılmış ve eğitim için hazırlanmış hali)
+- Eğitim verisi yükleyici (verilerin zaten ayrılmış ve eğitim için hazırlanmış haliyle)
- Doğrulayıcı yükleyici
- Eğitim sırasında kullanılacak **optimizer**: Bu, gradyanları kullanacak ve kaybı azaltmak için parametreleri güncelleyecek olan fonksiyondur. Bu durumda, göreceğiniz gibi, `AdamW` kullanılır, ancak daha birçok seçenek vardır.
-- Her turda gradyanları sıfırlamak için `optimizer.zero_grad()` çağrılır, böylece birikmezler.
-- **`lr`** parametresi, modelin parametrelerini güncellerken optimizasyon sürecinde alınan **adım boyutunu** belirleyen **öğrenme oranıdır**. Daha **küçük** bir öğrenme oranı, optimizasyoncunun ağırlıklara **daha küçük güncellemeler** yapması anlamına gelir, bu da daha **kesin** bir yakınsama sağlayabilir ancak eğitimi **yavaşlatabilir**. Daha **büyük** bir öğrenme oranı eğitimi hızlandırabilir ancak kayıp fonksiyonunun minimumunu **aşma riski** taşır (**kayıp fonksiyonunun minimize edildiği noktayı atlama**).
-- **Ağırlık Çürümesi**, büyük ağırlıkları cezalandıran ekstra bir terim ekleyerek **Kayıp Hesaplama** adımını değiştirir. Bu, optimizasyoncunun daha küçük ağırlıklarla çözümler bulmasını teşvik eder, veriyi iyi bir şekilde uyum sağlamak ile modeli basit tutmak arasında denge kurarak makine öğrenimi modellerinde aşırı uyum sağlamayı önler.
+- Her turda gradyanları biriktirmemek için `optimizer.zero_grad()` çağrılır.
+- **`lr`** parametresi, modelin parametrelerini güncellerken optimizasyon sürecinde atılan **adımların boyutunu** belirleyen **öğrenme oranıdır**. Daha **küçük** bir öğrenme oranı, optimizasyoncunun ağırlıklara **daha küçük güncellemeler** yapması anlamına gelir, bu da daha **kesin** bir yakınsama sağlayabilir ancak eğitimi **yavaşlatabilir**. Daha **büyük** bir öğrenme oranı eğitimi hızlandırabilir ancak kayıp fonksiyonunun minimumunu **aşma riski** taşır (**kayıp fonksiyonunun minimize edildiği noktayı atlama**).
+- **Ağırlık Çürümesi**, büyük ağırlıkları cezalandıran ekstra bir terim ekleyerek **Kayıp Hesaplama** adımını değiştirir. Bu, optimizasyoncunun daha küçük ağırlıklarla çözümler bulmasını teşvik eder, veriyi iyi bir şekilde uyum sağlamak ile modeli basit tutmak arasında denge kurarak makine öğrenimi modellerinde aşırı uyumu önler ve modelin herhangi bir tek özelliğe fazla önem vermesini engeller.
- L2 düzenlemesi ile SGD gibi geleneksel optimizatörler, ağırlık çürümesini kayıp fonksiyonunun gradyanı ile birleştirir. Ancak, **AdamW** (Adam optimizatörünün bir varyantı) ağırlık çürümesini gradyan güncellemesinden ayırarak daha etkili bir düzenleme sağlar.
- Eğitim için kullanılacak cihaz
-- Epoch sayısı: Eğitim verisi üzerinde geçilecek süre sayısı
+- Epoch sayısı: Eğitim verileri üzerinde geçilecek süre sayısı
- Değerlendirme sıklığı: `evaluate_model` çağrılma sıklığı
-- Değerlendirme iterasyonu: `generate_and_print_sample` çağrıldığında modelin mevcut durumunu değerlendirirken kullanılacak batch sayısı
+- Değerlendirme yinelemesi: `generate_and_print_sample` çağrıldığında modelin mevcut durumunu değerlendirirken kullanılacak batch sayısı
- Başlangıç bağlamı: `generate_and_print_sample` çağrıldığında kullanılacak başlangıç cümlesi
- Tokenizer
```python
@@ -830,10 +830,10 @@ print(decoded_text.replace("\n", " ")) # Compact print format
model.train() # Back to training model applying all the configurations
```
> [!TIP]
-> Öğrenme oranını artırmak için **lineer ısınma** ve **kosinüs azalması** olarak adlandırılan birkaç ilgili teknik vardır.
+> Öğrenme oranını artırmak için **lineer ısınma** ve **kosinüs azalması** adı verilen birkaç ilgili teknik vardır.
>
-> **Lineer ısınma**, başlangıç öğrenme oranını ve maksimum öğrenme oranını tanımlamak ve her epoch'tan sonra bunu tutarlı bir şekilde güncellemeyi içerir. Bunun nedeni, eğitime daha küçük ağırlık güncellemeleriyle başlamak, modelin eğitim aşamasında büyük, dengesiz güncellemelerle karşılaşma riskini azaltmasıdır.\
-> **Kosinüs azalması**, **ısınma** aşamasından sonra yarım-kosinüs eğrisi izleyerek **öğrenme oranını kademeli olarak azaltan** bir tekniktir; bu, ağırlık güncellemelerini yavaşlatarak **kaybın minimumunu aşma riskini en aza indirmeyi** ve sonraki aşamalarda eğitim istikrarını sağlamayı amaçlar.
+> **Lineer ısınma**, başlangıç öğrenme oranını ve maksimum öğrenme oranını tanımlamak ve her epoch'tan sonra bunu sürekli güncellemektir. Bunun nedeni, eğitime daha küçük ağırlık güncellemeleriyle başlamak, modelin eğitim aşamasında büyük, dengesiz güncellemelerle karşılaşma riskini azaltmasıdır.\
+> **Kosinüs azalması**, **ısınma** aşamasından sonra **öğrenme oranını kademeli olarak azaltan** bir tekniktir ve ağırlık güncellemelerini yavaşlatarak **kaybın minimumunu aşma riskini en aza indirmeyi** ve sonraki aşamalarda eğitim istikrarını sağlamayı amaçlar.
>
> _Bu iyileştirmelerin önceki kodda yer almadığını unutmayın._
@@ -858,7 +858,7 @@ end_time = time.time()
execution_time_minutes = (end_time - start_time) / 60
print(f"Training completed in {execution_time_minutes:.2f} minutes.")
```
-### Eğitim evrimini yazdırma
+### Print training evolution
Aşağıdaki fonksiyon ile modelin eğitim sürecindeki evrimi yazdırmak mümkündür.
```python
@@ -933,9 +933,9 @@ model.eval() # Put in eval mode
```
## GPT2 ağırlıklarını yükleme
-GPT2 ağırlıklarını yerel olarak yüklemek için 2 hızlı betik vardır. Her ikisi için de yerel olarak [https://github.com/rasbt/LLMs-from-scratch](https://github.com/rasbt/LLMs-from-scratch) deposunu klonlayabilirsiniz, ardından:
+GPT2 ağırlıklarını yerel olarak yüklemek için 2 hızlı betik bulunmaktadır. Her ikisi için de yerel olarak [https://github.com/rasbt/LLMs-from-scratch](https://github.com/rasbt/LLMs-from-scratch) deposunu klonlayabilirsiniz, ardından:
-- Betik [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch05/01_main-chapter-code/gpt_generate.py](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch05/01_main-chapter-code/gpt_generate.py) tüm ağırlıkları indirecek ve OpenAI'den LLM'mizin beklediği formatlara dönüştürecektir. Betik ayrıca gerekli yapılandırma ile ve "Her çaba seni ileriye taşır" ifadesiyle hazırlanmıştır.
+- Betik [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch05/01_main-chapter-code/gpt_generate.py](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch05/01_main-chapter-code/gpt_generate.py) tüm ağırlıkları indirecek ve OpenAI'den beklenen formatlara dönüştürecektir. Betik ayrıca gerekli yapılandırma ile ve "Her çaba seni ileriye taşır" ifadesiyle hazırlanmıştır.
- Betik [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch05/02_alternative_weight_loading/weight-loading-hf-transformers.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch05/02_alternative_weight_loading/weight-loading-hf-transformers.ipynb) yerel olarak herhangi bir GPT2 ağırlığını yüklemenizi sağlar (sadece `CHOOSE_MODEL` değişkenini değiştirin) ve bazı istemlerden metin tahmin etmenizi sağlar.
## Referanslar
@@ -943,4 +943,4 @@ GPT2 ağırlıklarını yerel olarak yüklemek için 2 hızlı betik vardır. He
- [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch)
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/AI/AI-llm-architecture/7.0.-lora-improvements-in-fine-tuning.md b/src/AI/AI-llm-architecture/7.0.-lora-improvements-in-fine-tuning.md
index d76ddc00d..78e9546e9 100644
--- a/src/AI/AI-llm-architecture/7.0.-lora-improvements-in-fine-tuning.md
+++ b/src/AI/AI-llm-architecture/7.0.-lora-improvements-in-fine-tuning.md
@@ -1,17 +1,17 @@
# 7.0. LoRA İyileştirmeleri
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
## LoRA İyileştirmeleri
> [!TIP]
-> **LoRA'nın kullanımı,** zaten eğitilmiş modelleri **ince ayar yapmak için gereken hesaplamayı** büyük ölçüde azaltır.
+> **LoRA'nın kullanımı,** zaten eğitilmiş modelleri **ince ayar yapmak için** gereken hesaplamayı büyük ölçüde azaltır.
LoRA, **büyük modelleri** yalnızca modelin **küçük bir kısmını** değiştirerek verimli bir şekilde ince ayar yapmayı mümkün kılar. Eğitmeniz gereken parametre sayısını azaltarak **bellek** ve **hesaplama kaynakları** tasarrufu sağlar. Bunun nedeni:
-1. **Eğitilebilir Parametre Sayısını Azaltır**: Modeldeki tüm ağırlık matrisini güncellemek yerine, LoRA ağırlık matrisini iki daha küçük matrise (A ve B olarak adlandırılır) **bölerek** çalışır. Bu, eğitimi **daha hızlı** hale getirir ve daha az bellek gerektirir çünkü daha az parametre güncellenmesi gerekir.
+1. **Eğitilebilir Parametre Sayısını Azaltır**: Modeldeki tüm ağırlık matrisini güncellemek yerine, LoRA ağırlık matrisini iki daha küçük matrise ( **A** ve **B** olarak adlandırılır) **bölerek** işlem yapar. Bu, eğitimi **daha hızlı** hale getirir ve daha az bellek gerektirir çünkü daha az parametre güncellenmesi gerekir.
-1. Bunun nedeni, bir katmanın (matrisin) tam ağırlık güncellemesini hesaplamak yerine, bunu 2 daha küçük matrisin çarpımı olarak yaklaşık olarak hesaplamasıdır ve güncellemeyi hesaplamayı azaltır:\
+1. Bunun nedeni, bir katmanın (matrisin) tam ağırlık güncellemesini hesaplamak yerine, bunu 2 daha küçük matrisin çarpımı olarak yaklaşık bir şekilde hesaplamasıdır:\
@@ -19,7 +19,7 @@ LoRA, **büyük modelleri** yalnızca modelin **küçük bir kısmını** deği
3. **Verimli Görev-Özel İnce Ayar**: Modeli **yeni bir göreve** uyarlamak istediğinizde, modelin geri kalanını olduğu gibi bırakırken yalnızca **küçük LoRA matrislerini** (A ve B) eğitebilirsiniz. Bu, tüm modeli yeniden eğitmekten **çok daha verimlidir**.
4. **Depolama Verimliliği**: İnce ayar yaptıktan sonra, her görev için **tamamen yeni bir modeli** kaydetmek yerine, yalnızca **LoRA matrislerini** saklamanız gerekir; bu matrisler, tüm modele kıyasla çok küçüktür. Bu, modeli çok fazla depolama alanı kullanmadan birçok göreve uyarlamayı kolaylaştırır.
-LoRA katmanlarını ince ayar sırasında Lineer olanlar yerine uygulamak için burada önerilen kod [https://github.com/rasbt/LLMs-from-scratch/blob/main/appendix-E/01_main-chapter-code/appendix-E.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/appendix-E/01_main-chapter-code/appendix-E.ipynb):
+LoRA katmanlarını ince ayar sırasında Lineer olanların yerine uygulamak için burada önerilen kod [https://github.com/rasbt/LLMs-from-scratch/blob/main/appendix-E/01_main-chapter-code/appendix-E.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/appendix-E/01_main-chapter-code/appendix-E.ipynb):
```python
import math
@@ -62,4 +62,4 @@ replace_linear_with_lora(module, rank, alpha)
- [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch)
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/AI/AI-llm-architecture/7.1.-fine-tuning-for-classification.md b/src/AI/AI-llm-architecture/7.1.-fine-tuning-for-classification.md
index f000a3828..3b5281f74 100644
--- a/src/AI/AI-llm-architecture/7.1.-fine-tuning-for-classification.md
+++ b/src/AI/AI-llm-architecture/7.1.-fine-tuning-for-classification.md
@@ -1,16 +1,16 @@
# 7.1. Sınıflandırma için İnce Ayar
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
## Nedir
-İnce ayar, büyük miktarda veriden **genel dil kalıplarını** öğrenmiş bir **önceden eğitilmiş modeli** alıp bunu **belirli bir görevi** yerine getirecek şekilde veya alan spesifik dili anlamak için **uyarlama** sürecidir. Bu, modelin daha küçük, görev spesifik bir veri kümesi üzerinde eğitimine devam edilerek gerçekleştirilir; böylece model, yeni verinin inceliklerine daha iyi uyum sağlamak için parametrelerini ayarlarken, zaten edinmiş olduğu geniş bilgiyi kullanabilir. İnce ayar, modelin sıfırdan yeni bir model eğitmeye gerek kalmadan, özel uygulamalarda daha doğru ve ilgili sonuçlar sunmasını sağlar.
+İnce ayar, büyük miktarda veriden **genel dil kalıplarını** öğrenmiş bir **önceden eğitilmiş modeli** alıp bunu **belirli bir görevi** yerine getirecek şekilde veya alan spesifik dili anlamak için **uyarlama** sürecidir. Bu, modelin daha küçük, görev spesifik bir veri kümesi üzerinde eğitimine devam edilerek, yeni verinin inceliklerine daha iyi uyum sağlamak için parametrelerini ayarlamasına olanak tanır ve zaten edinmiş olduğu geniş bilgiyi kullanır. İnce ayar, modelin sıfırdan yeni bir model eğitmeye gerek kalmadan, özel uygulamalarda daha doğru ve ilgili sonuçlar vermesini sağlar.
> [!TIP]
> "Metni anlayan" bir LLM'yi önceden eğitmek oldukça pahalı olduğundan, genellikle açık kaynaklı önceden eğitilmiş modelleri belirli bir görevi yerine getirmesi için ince ayar yapmak daha kolay ve ucuzdur.
> [!TIP]
-> Bu bölümün amacı, zaten önceden eğitilmiş bir modeli ince ayar yapmayı göstermektir; böylece LLM yeni metin üretmek yerine, verilen metnin her bir verilen kategoriye ait olma **olasılıklarını** seçecektir (örneğin, bir metnin spam olup olmadığını).
+> Bu bölümün amacı, zaten önceden eğitilmiş bir modeli ince ayar yapmayı göstermektir, böylece LLM yeni metin üretmek yerine **verilen metnin her bir verilen kategoriye sınıflandırılma olasılıklarını** seçecektir (örneğin, bir metnin spam olup olmadığını).
## Veri kümesini hazırlama
@@ -18,13 +18,13 @@
Elbette, bir modeli ince ayar yapmak için LLM'nizi özelleştirmek için bazı yapılandırılmış verilere ihtiyacınız var. [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/ch06.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/ch06.ipynb) adresinde önerilen örnekte, GPT2 bir e-postanın spam olup olmadığını tespit etmek için [https://archive.ics.uci.edu/static/public/228/sms+spam+collection.zip](https://archive.ics.uci.edu/static/public/228/sms+spam+collection.zip) verilerini kullanarak ince ayar yapılmıştır.
-Bu veri kümesi, "spam" olanlardan çok daha fazla "spam değil" örneği içermektedir; bu nedenle kitap, **"spam değil" örneklerinden yalnızca "spam" olanlar kadarını kullanmayı** önermektedir (bu nedenle, eğitim verisinden tüm ekstra örnekleri kaldırmak). Bu durumda, her birinden 747 örnek vardı.
+Bu veri kümesi, "spam" olanlardan çok daha fazla "spam değil" örneği içermektedir, bu nedenle kitap **"spam değil" örneklerinden yalnızca "spam" olanlar kadarını kullanmayı** önermektedir (bu nedenle, eğitim verisinden tüm ekstra örnekleri kaldırmak). Bu durumda, her birinden 747 örnek vardı.
-Ardından, **veri kümesinin %70'i** **eğitim** için, **%10'u** **doğrulama** için ve **%20'si** **test** için kullanılır.
+Daha sonra, veri kümesinin **%70'i** **eğitim** için, **%10'u** **doğrulama** için ve **%20'si** **test** için kullanılır.
-- **Doğrulama seti**, modelin **hiperparametrelerini** ince ayar yapmak ve model mimarisi hakkında kararlar almak için eğitim aşamasında kullanılır; bu, modelin görülmemiş veriler üzerindeki performansına geri bildirim sağlayarak aşırı uyum sağlamayı önlemeye yardımcı olur. Nihai değerlendirmeyi önyargılamadan yinelemeli iyileştirmelere olanak tanır.
-- Bu, bu veri kümesine dahil edilen verilerin doğrudan eğitim için kullanılmadığı, ancak en iyi **hiperparametreleri** ayarlamak için kullanıldığı anlamına gelir; bu nedenle bu set, modelin performansını test seti gibi değerlendirmek için kullanılamaz.
-- Aksine, **test seti**, model tamamen eğitildikten ve tüm ayarlamalar tamamlandıktan **sonra yalnızca** kullanılır; bu, modelin yeni, görülmemiş verilere genelleme yeteneğini tarafsız bir şekilde değerlendirir. Test setindeki bu nihai değerlendirme, modelin gerçek dünya uygulamalarında nasıl performans göstermesi gerektiğine dair gerçekçi bir gösterge sunar.
+- **Doğrulama seti**, modelin **hiperparametrelerini** ince ayar yapmak ve model mimarisi hakkında kararlar almak için eğitim aşamasında kullanılır; bu, modelin görülmemiş veriler üzerindeki performansı hakkında geri bildirim sağlayarak aşırı uyum sağlamayı önlemeye yardımcı olur. Nihai değerlendirmeyi önyargılamadan yinelemeli iyileştirmelere olanak tanır.
+- Bu, bu veri kümesinde yer alan verilerin doğrudan eğitim için kullanılmadığı, ancak en iyi **hiperparametreleri** ayarlamak için kullanıldığı anlamına gelir; bu nedenle bu set, modelin performansını test seti gibi değerlendirmek için kullanılamaz.
+- Aksine, **test seti** yalnızca model tamamen eğitildikten ve tüm ayarlamalar tamamlandıktan **sonra** kullanılır; bu, modelin yeni, görülmemiş verilere genelleme yeteneğini tarafsız bir şekilde değerlendirir. Test setindeki bu nihai değerlendirme, modelin gerçek dünya uygulamalarında nasıl performans göstermesi gerektiğine dair gerçekçi bir gösterge sunar.
### Girdi uzunluğu
@@ -36,7 +36,7 @@ Açık kaynaklı önceden eğitilmiş ağırlıkları kullanarak modeli eğitmek
## Sınıflandırma başlığı
-Bu özel örnekte (bir metnin spam olup olmadığını tahmin etme), GPT2'nin tam kelime dağarcığına göre ince ayar yapmaktan ziyade, yeni modelin e-postanın spam (1) olup olmadığını (0) söylemesini istiyoruz. Bu nedenle, yalnızca spam olup olmadığını gösteren olasılıkları veren son katmanı **değiştireceğiz** (yani 2 kelimelik bir kelime dağarcığı gibi).
+Bu özel örnekte (bir metnin spam olup olmadığını tahmin etme), GPT2'nin tam kelime dağarcığına göre ince ayar yapmakla ilgilenmiyoruz, yalnızca yeni modelin e-postanın spam (1) olup olmadığını (0) söylemesini istiyoruz. Bu nedenle, yalnızca spam olup olmadığını gösteren olasılıkları veren son katmanı **değiştireceğiz** (yani 2 kelimelik bir kelime dağarcığı gibi).
```python
# This code modified the final layer with a Linear one with 2 outs
num_classes = 2
@@ -47,9 +47,9 @@ in_features=BASE_CONFIG["emb_dim"],
out_features=num_classes
)
```
-## Ayarları Ayarlamak
+## Ayarları Ayarlama
-Hızlı bir şekilde ince ayar yapmak için tüm parametreleri ayarlamak yerine sadece bazı son parametreleri ayarlamak daha kolaydır. Bunun nedeni, alt katmanların genellikle temel dil yapıları ve uygulanabilir anlamları yakaladığı bilinmektedir. Bu nedenle, **sadece son katmanları ince ayar yapmak genellikle yeterlidir ve daha hızlıdır**.
+Hızlı bir şekilde ince ayar yapmak için tüm parametreleri ince ayar yapmak yerine sadece bazı son parametreleri ayarlamak daha kolaydır. Bunun nedeni, alt katmanların genellikle temel dil yapıları ve uygulanabilir anlamları yakaladığı bilinmesidir. Bu nedenle, sadece **son katmanları ince ayar yapmak genellikle yeterlidir ve daha hızlıdır**.
```python
# This code makes all the parameters of the model unrtainable
for param in model.parameters():
@@ -68,7 +68,7 @@ param.requires_grad = True
Önceki bölümlerde LLM, her tahmin edilen token'ın kaybını azaltarak eğitildi, bu da tahmin edilen token'ların neredeyse tamamının giriş cümlesinde olduğu (sadece sonunda gerçekten tahmin edilen 1 token vardı) modelin dili daha iyi anlaması içindi.
-Bu durumda, modelin spam olup olmadığını tahmin edebilmesiyle ilgileniyoruz, bu nedenle yalnızca tahmin edilen son token ile ilgileniyoruz. Bu nedenle, önceki eğitim kaybı fonksiyonlarımızı yalnızca bu token'ı dikkate alacak şekilde değiştirmek gerekiyor.
+Bu durumda, modelin spam olup olmadığını tahmin edebilmesiyle ilgileniyoruz, bu nedenle yalnızca tahmin edilen son token ile ilgileniyoruz. Bu nedenle, önceki eğitim kayıp fonksiyonlarımızı yalnızca o token'ı dikkate alacak şekilde değiştirmek gerekiyor.
Bu, [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/ch06.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/ch06.ipynb) adresinde şu şekilde uygulanmıştır:
```python
@@ -111,4 +111,4 @@ GPT2'yi bir spam sınıflandırıcısı olarak ince ayar yapmak için tüm kodu
- [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch)
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/AI/AI-llm-architecture/7.2.-fine-tuning-to-follow-instructions.md b/src/AI/AI-llm-architecture/7.2.-fine-tuning-to-follow-instructions.md
index bc1f368b5..bafe2762e 100644
--- a/src/AI/AI-llm-architecture/7.2.-fine-tuning-to-follow-instructions.md
+++ b/src/AI/AI-llm-architecture/7.2.-fine-tuning-to-follow-instructions.md
@@ -1,13 +1,13 @@
# 7.2. Talimatları Takip Etmek İçin İnce Ayar
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
> [!TIP]
> Bu bölümün amacı, **metin üretmekten ziyade talimatları takip etmek için önceden eğitilmiş bir modeli ince ayar yapmayı** göstermektir; örneğin, bir sohbet botu olarak görevlere yanıt vermek.
## Veri Seti
-Bir LLM'yi talimatları takip edecek şekilde ince ayar yapmak için, LLM'yi ince ayar yapmak üzere talimatlar ve yanıtlar içeren bir veri setine ihtiyaç vardır. Bir LLM'yi talimatları takip edecek şekilde eğitmek için farklı formatlar vardır; örneğin:
+Bir LLM'yi talimatları takip edecek şekilde ince ayar yapmak için, LLM'yi ince ayar yapmak üzere talimatlar ve yanıtlar içeren bir veri setine ihtiyaç vardır. LLM'yi talimatları takip edecek şekilde eğitmek için farklı formatlar vardır; örneğin:
- Apply Alpaca istem tarzı örneği:
```csharp
@@ -29,7 +29,7 @@ Can you explain what gravity is in simple terms?
<|Assistant|>
Absolutely! Gravity is a force that pulls objects toward each other.
```
-Bu tür veri setleri ile bir LLM'yi eğitmek, LLM'nin aldığı sorulara belirli yanıtlar vermesi gerektiğini anlamasına yardımcı olur.
+Bir LLM'yi bu tür veri setleriyle eğitmek, yalnızca ham metin yerine, LLM'nin aldığı sorulara belirli yanıtlar vermesi gerektiğini anlamasına yardımcı olur.
Bu nedenle, istekler ve yanıtlar içeren bir veri seti ile yapılacak ilk şeylerden biri, o veriyi istenen istem formatında modellemektir, örneğin:
```python
@@ -61,7 +61,7 @@ Sonra, eğitim için tüm girdileri ve beklenen çıktıları gruplamak gereklid
- Tüm örnekleri aynı uzunluğa (genellikle uzunluk, LLM'yi önceden eğitmek için kullanılan bağlam uzunluğu kadar büyük olacaktır) doldurun
- Özel bir toplama fonksiyonunda girişi 1 kaydırarak beklenen tokenleri oluşturun
- Eğitim kaybından hariç tutmak için bazı doldurma tokenlerini -100 ile değiştirin: İlk `endoftext` tokeninden sonra, diğer tüm `endoftext` tokenlerini -100 ile değiştirin (çünkü `cross_entropy(...,ignore_index=-100)` kullanmak, -100 olan hedefleri yok sayacağı anlamına gelir)
-- \[Opsiyonel\] LLM'nin yalnızca yanıtı nasıl üreteceğini öğrenmesi için soruya ait tüm tokenleri -100 ile maskeleyin. Alpaca stilinde bu, `### Response:`'a kadar her şeyi maskelemek anlamına gelecektir.
+- \[Opsiyonel\] LLM'nin yalnızca yanıtı nasıl üreteceğini öğrenmesi için soruya ait tüm tokenleri -100 ile maskeleyin. Alpaca stilini uygulamak, `### Response:`'a kadar her şeyi maskelemek anlamına gelecektir.
Bunu oluşturduktan sonra, her veri kümesi (eğitim, doğrulama ve test) için veri yükleyicilerini oluşturma zamanı.
@@ -75,17 +75,17 @@ Aşırı uyum, eğitim kaybı azalırken doğrulama kaybının azalmadığı vey
## Response Quality
Bu, kayıp değişimlerine daha fazla güvenilebilecek bir sınıflandırma ince ayarı olmadığı için, test setindeki yanıtların kalitesini kontrol etmek de önemlidir. Bu nedenle, tüm test setlerinden üretilen yanıtları toplamak ve **kalitelerini manuel olarak kontrol etmek** önerilir; böylece yanlış yanıtlar olup olmadığını görebilirsiniz (LLM'nin yanıt cümlesinin formatını ve sözdizimini doğru bir şekilde oluşturması mümkün, ancak tamamen yanlış bir yanıt vermesi de mümkündür. Kayıp değişimi bu davranışı yansıtmayacaktır).\
-Bu incelemeyi, üretilen yanıtları ve beklenen yanıtları **diğer LLM'lere geçirerek ve onlardan yanıtları değerlendirmelerini isteyerek** de gerçekleştirmek mümkündür.
+Ayrıca, üretilen yanıtları ve beklenen yanıtları **diğer LLM'lere geçirerek yanıtları değerlendirmelerini istemek** de mümkündür.
Yanıtların kalitesini doğrulamak için çalıştırılacak diğer testler:
-1. **Measuring Massive Multitask Language Understanding (**[**MMLU**](https://arxiv.org/abs/2009.03300)**):** MMLU, bir modelin bilgi ve problem çözme yeteneklerini 57 konu üzerinde değerlendirir; bunlar arasında beşeri bilimler, bilimler ve daha fazlası bulunmaktadır. Farklı zorluk seviyelerinde anlayışı değerlendirmek için çoktan seçmeli sorular kullanır.
-2. [**LMSYS Chatbot Arena**](https://arena.lmsys.org): Bu platform, kullanıcıların farklı chatbotlardan gelen yanıtları yan yana karşılaştırmalarına olanak tanır. Kullanıcılar bir istem girdiğinde, birden fazla chatbot yanıtlar üretir ve bunlar doğrudan karşılaştırılabilir.
-3. [**AlpacaEval**](https://github.com/tatsu-lab/alpaca_eval)**:** AlpacaEval, GPT-4 gibi gelişmiş bir LLM'nin çeşitli istemlere yanıtları değerlendirdiği otomatik bir değerlendirme çerçevesidir.
+1. **Measuring Massive Multitask Language Understanding (**[**MMLU**](https://arxiv.org/abs/2009.03300)**):** MMLU, bir modelin bilgi ve problem çözme yeteneklerini 57 konu üzerinden değerlendirir; beşeri bilimler, bilimler ve daha fazlasını içerir. Farklı zorluk seviyelerinde anlayışı değerlendirmek için çoktan seçmeli sorular kullanır.
+2. [**LMSYS Chatbot Arena**](https://arena.lmsys.org): Bu platform, kullanıcıların farklı chatbotlardan gelen yanıtları yan yana karşılaştırmalarına olanak tanır. Kullanıcılar bir istem girdiğinde, birden fazla chatbot yanıt üretir ve bunlar doğrudan karşılaştırılabilir.
+3. [**AlpacaEval**](https://github.com/tatsu-lab/alpaca_eval)**:** AlpacaEval, gelişmiş bir LLM'nin (örneğin GPT-4) diğer modellerin çeşitli istemlere verdiği yanıtları değerlendirdiği otomatik bir değerlendirme çerçevesidir.
4. **General Language Understanding Evaluation (**[**GLUE**](https://gluebenchmark.com/)**):** GLUE, duygu analizi, metin çıkarımı ve soru yanıtlama gibi dokuz doğal dil anlama görevinden oluşan bir koleksiyondur.
5. [**SuperGLUE**](https://super.gluebenchmark.com/)**:** GLUE üzerine inşa edilen SuperGLUE, mevcut modeller için zorlayıcı olan daha zorlu görevleri içerir.
6. **Beyond the Imitation Game Benchmark (**[**BIG-bench**](https://github.com/google/BIG-bench)**):** BIG-bench, bir modelin akıl yürütme, çeviri ve soru yanıtlama gibi alanlardaki yeteneklerini test eden 200'den fazla görev içeren büyük ölçekli bir benchmark'tır.
-7. **Holistic Evaluation of Language Models (**[**HELM**](https://crfm.stanford.edu/helm/lite/latest/)**):** HELM, doğruluk, dayanıklılık ve adalet gibi çeşitli metrikler üzerinden kapsamlı bir değerlendirme sağlar.
+7. **Holistic Evaluation of Language Models (**[**HELM**](https://crfm.stanford.edu/helm/lite/latest/)**):** HELM, doğruluk, sağlamlık ve adalet gibi çeşitli metrikler üzerinden kapsamlı bir değerlendirme sağlar.
8. [**OpenAI Evals**](https://github.com/openai/evals)**:** OpenAI tarafından geliştirilen, AI modellerinin özel ve standartlaştırılmış görevlerde test edilmesine olanak tanıyan açık kaynaklı bir değerlendirme çerçevesidir.
9. [**HumanEval**](https://github.com/openai/human-eval)**:** Dil modellerinin kod üretme yeteneklerini değerlendirmek için kullanılan bir dizi programlama problemi.
10. **Stanford Question Answering Dataset (**[**SQuAD**](https://rajpurkar.github.io/SQuAD-explorer/)**):** SQuAD, modellerin metni anlaması gerektiği Wikipedia makaleleri hakkında sorulardan oluşur.
@@ -101,4 +101,4 @@ Bu ince ayarı gerçekleştirmek için bir kod örneğini [https://github.com/ra
- [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch)
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/AI/AI-llm-architecture/README.md b/src/AI/AI-llm-architecture/README.md
index 4d15286bc..c42c76b18 100644
--- a/src/AI/AI-llm-architecture/README.md
+++ b/src/AI/AI-llm-architecture/README.md
@@ -1,8 +1,8 @@
# LLM Eğitimi - Veri Hazırlığı
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
-**Bunlar, bazı ek bilgilerle birlikte çok önerilen kitabımdan aldığım notlar** [**https://www.manning.com/books/build-a-large-language-model-from-scratch**](https://www.manning.com/books/build-a-large-language-model-from-scratch) **.**
+**Bunlar, çok önerilen bir kitaptan aldığım notlar** [**https://www.manning.com/books/build-a-large-language-model-from-scratch**](https://www.manning.com/books/build-a-large-language-model-from-scratch) **ve bazı ek bilgiler.**
## Temel Bilgiler
@@ -24,7 +24,7 @@ Bilmeniz gereken bazı temel kavramlar için bu gönderiyi okumaya başlamalıs
## 2. Veri Örnekleme
> [!TIP]
-> Bu ikinci aşamanın amacı çok basit: **Girdi verisini örneklemek ve genellikle veri setini belirli bir uzunluktaki cümlelere ayırarak ve beklenen yanıtı da üreterek eğitim aşamasına hazırlamak.**
+> Bu ikinci aşamanın amacı çok basit: **Girdi verilerini örneklemek ve genellikle veri kümesini belirli bir uzunluktaki cümlelere ayırarak ve beklenen yanıtı da üreterek eğitim aşamasına hazırlamak.**
{{#ref}}
2.-data-sampling.md
@@ -34,9 +34,9 @@ Bilmeniz gereken bazı temel kavramlar için bu gönderiyi okumaya başlamalıs
> [!TIP]
> Bu üçüncü aşamanın amacı çok basit: **Sözlükteki önceki her token'a modelin eğitimi için istenen boyutlarda bir vektör atamak.** Sözlükteki her kelime, X boyutlu bir uzayda bir nokta olacaktır.\
-> Başlangıçta, her kelimenin uzaydaki konumu "rastgele" başlatılır ve bu konumlar eğitilebilir parametrelerdir (eğitim sırasında geliştirilecektir).
+> Başlangıçta her kelimenin uzaydaki konumu "rastgele" başlatılır ve bu konumlar eğitilebilir parametrelerdir (eğitim sırasında geliştirilecektir).
>
-> Ayrıca, token gömme sırasında **gömme katmanının başka bir katmanı oluşturulur** ki bu da (bu durumda) **kelimenin eğitim cümlesindeki mutlak konumunu temsil eder.** Bu şekilde, cümledeki farklı konumlarda bir kelimenin farklı bir temsili (anlamı) olacaktır.
+> Ayrıca, token gömme sırasında **gömme katmanlarının başka bir katmanı oluşturulur** ki bu da (bu durumda) **kelimenin eğitim cümlesindeki mutlak konumunu temsil eder.** Bu şekilde, cümledeki farklı konumlarda bir kelimenin farklı bir temsili (anlamı) olacaktır.
{{#ref}}
3.-token-embeddings.md
@@ -45,7 +45,7 @@ Bilmeniz gereken bazı temel kavramlar için bu gönderiyi okumaya başlamalıs
## 4. Dikkat Mekanizmaları
> [!TIP]
-> Bu dördüncü aşamanın amacı çok basit: **Bazı dikkat mekanizmaları uygulamak.** Bunlar, **sözlükteki bir kelimenin, LLM'yi eğitmek için kullanılan mevcut cümledeki komşularıyla olan ilişkisini yakalayacak çok sayıda **tekrarlanan katman** olacaktır.**\
+> Bu dördüncü aşamanın amacı çok basit: **Bazı dikkat mekanizmaları uygulamak.** Bunlar, **sözlükteki bir kelimenin, LLM'yi eğitmek için kullanılan mevcut cümledeki komşularıyla olan ilişkisini yakalayacak çok sayıda tekrar eden katmanlar** olacaktır.\
> Bunun için çok sayıda katman kullanılmaktadır, bu nedenle çok sayıda eğitilebilir parametre bu bilgiyi yakalayacaktır.
{{#ref}}
@@ -55,8 +55,7 @@ Bilmeniz gereken bazı temel kavramlar için bu gönderiyi okumaya başlamalıs
## 5. LLM Mimarisi
> [!TIP]
-> Bu beşinci aşamanın amacı çok basit: **Tam LLM'nin mimarisini geliştirmek.** Her şeyi bir araya getirin, tüm katmanları uygulayın ve metin oluşturmak veya metni kimliklere ve geriye dönüştürmek için tüm işlevleri oluşturun.
->
+> Bu beşinci aşamanın amacı çok basit: **Tam LLM'nin mimarisini geliştirmek.** Her şeyi bir araya getirin, tüm katmanları uygulayın ve metin oluşturmak veya metni kimliklere ve geriye dönüştürmek için tüm işlevleri oluşturun.\
> Bu mimari, hem eğitim hem de eğitimden sonra metin tahmin etmek için kullanılacaktır.
{{#ref}}
@@ -84,7 +83,7 @@ Bilmeniz gereken bazı temel kavramlar için bu gönderiyi okumaya başlamalıs
## 7.1. Sınıflandırma için İnce Ayar
> [!TIP]
-> Bu bölümün amacı, yeni metin oluşturmak yerine LLM'nin **verilen metnin her bir verilen kategoriye sınıflandırılma olasılıklarını** seçmesini sağlamak için zaten önceden eğitilmiş bir modeli nasıl ince ayar yapacağınızı göstermektir (örneğin, bir metnin spam olup olmadığını belirlemek).
+> Bu bölümün amacı, zaten önceden eğitilmiş bir modeli ince ayar yapmayı göstermektir, böylece yeni metin oluşturmak yerine LLM, **verilen metnin her bir verilen kategoriye sınıflandırılma olasılıklarını** seçecektir (örneğin, bir metnin spam olup olmadığını).
{{#ref}}
7.1.-fine-tuning-for-classification.md
@@ -93,10 +92,10 @@ Bilmeniz gereken bazı temel kavramlar için bu gönderiyi okumaya başlamalıs
## 7.2. Talimatları Takip Etmek için İnce Ayar
> [!TIP]
-> Bu bölümün amacı, yalnızca metin oluşturmak yerine, örneğin, bir sohbet botu olarak görevlere yanıt vermek için **zaten önceden eğitilmiş bir modeli talimatları takip edecek şekilde nasıl ince ayar yapacağınızı** göstermektir.
+> Bu bölümün amacı, **metin oluşturmak yerine talimatları takip etmek için zaten önceden eğitilmiş bir modeli ince ayar yapmayı** göstermektir, örneğin, bir sohbet botu olarak görevlere yanıt vermek.
{{#ref}}
7.2.-fine-tuning-to-follow-instructions.md
{{#endref}}
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/binary-exploitation/arbitrary-write-2-exec/README.md b/src/binary-exploitation/arbitrary-write-2-exec/README.md
index 11f28b2aa..37a69920c 100644
--- a/src/binary-exploitation/arbitrary-write-2-exec/README.md
+++ b/src/binary-exploitation/arbitrary-write-2-exec/README.md
@@ -1,3 +1,3 @@
# Arbitrary Write 2 Exec
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips-icc-profile.md b/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips-icc-profile.md
index 87c98b731..ee0489c46 100644
--- a/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips-icc-profile.md
+++ b/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips-icc-profile.md
@@ -4,7 +4,7 @@
## Genel Bakış
-Apple macOS Scriptable Image Processing System (`sips`) ICC profil ayrıştırıcısında (macOS 15.0.1, sips-307) `lutAToBType` (`mAB `) ve `lutBToAType` (`mBA `) etiketlerindeki `offsetToCLUT` alanının yetersiz doğrulaması nedeniyle bir sınır dışı yazma açığı bulunmaktadır. Özel olarak hazırlanmış bir ICC dosyası, yığın tamponunun 16 bayt ötesine kadar sıfır yazma işlemlerini tetikleyebilir, bu da yığın meta verilerini veya işlev işaretçilerini bozarak rastgele kod yürütülmesine olanak tanır (CVE-2024-44236).
+Apple macOS Scriptable Image Processing System (`sips`) ICC profil ayrıştırıcısındaki bir sınır dışı yazma açığı (macOS 15.0.1, sips-307), `lutAToBType` (`mAB `) ve `lutBToAType` (`mBA `) etiketlerindeki `offsetToCLUT` alanının yetersiz doğrulanmasından kaynaklanmaktadır. Özel olarak hazırlanmış bir ICC dosyası, yığın tamponunun 16 bayt ötesine kadar sıfır yazma işlemlerini tetikleyebilir, bu da yığın meta verilerini veya işlev işaretçilerini bozarak rastgele kod yürütülmesine olanak tanır (CVE-2024-44236).
## Açık Kodu
@@ -16,7 +16,7 @@ if (i > numberOfInputChannels && buffer[i] != 0)
buffer[i] = 0;
}
```
-Sadece `offsetToCLUT <= totalDataLength` kontrolü yapılmaktadır. `offsetToCLUT`'yu `tagDataSize` olarak ayarlayarak, döngü `buffer`'ın sonundan 16 byte ötesine kadar indekslenir ve bitişik heap meta verilerini bozar.
+Sadece `offsetToCLUT <= totalDataLength` kontrolü yapılmaktadır. `offsetToCLUT`'yu `tagDataSize` olarak ayarlayarak, döngü `buffer`'ın sonundan 16 byte ötesine kadar indeksler, bitişik heap meta verilerini bozar.
## Sömürü Adımları
@@ -39,7 +39,7 @@ Başarılı bir sömürü, macOS sistemlerinde kullanıcı ayrıcalığı ile uz
## Tespit
- Yaygın protokollerde (FTP, HTTP/S, IMAP, SMB, NFS, SMTP) dosya transferlerini izleyin.
-- `acsp` imzasına sahip aktarılan dosyaları inceleyin.
+- Aktarılan dosyaları `acsp` imzası ile kontrol edin.
- Her `mAB` veya `mBA` etiketi için, `Offset to CLUT` alanının `Tag data size` ile eşit olup olmadığını doğrulayın.
- Bu koşul sağlanıyorsa şüpheli olarak işaretleyin.
@@ -50,4 +50,4 @@ https://www.thezdi.com/blog/2025/5/7/cve-2024-44236-remote-code-execution-vulner
- Apple Ekim 2024 Güvenlik Güncellemesi (CVE-2024-44236 yamanın gönderilmesi)
https://support.apple.com/en-us/121564
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/binary-exploitation/array-indexing.md b/src/binary-exploitation/array-indexing.md
index 92fbb627e..d9cc66ff9 100644
--- a/src/binary-exploitation/array-indexing.md
+++ b/src/binary-exploitation/array-indexing.md
@@ -4,7 +4,7 @@
## Temel Bilgiler
-Bu kategori, dizilerdeki indekslerin işlenmesindeki hatalar nedeniyle belirli verilerin üzerine yazmanın mümkün olduğu tüm zayıflıkları içerir. Sömürü mekanizması tamamen zayıflığın koşullarına bağlı olduğundan, belirli bir metodoloji olmadan çok geniş bir kategoridir.
+Bu kategori, dizilerdeki indekslerin işlenmesindeki hatalar nedeniyle belirli verilerin üzerine yazmanın mümkün olduğu tüm zayıflıkları içerir. Sömürü mekanizması tamamen zayıflığın koşullarına bağlı olduğundan, belirli bir metodoloji olmayan çok geniş bir kategoridir.
Ancak burada bazı güzel **örnekler** bulabilirsiniz:
@@ -13,8 +13,8 @@ Ancak burada bazı güzel **örnekler** bulabilirsiniz:
- [https://guyinatuxedo.github.io/11-index/csaw18_doubletrouble/index.html](https://guyinatuxedo.github.io/11-index/csaw18_doubletrouble/index.html)
- 64 bit, nx yok. Her şeyin çift sayı olarak kullanılacağı ve en küçüğünden en büyüğüne sıralanacağı bir tür tampon taşması elde etmek için bir boyutu üzerine yazın, bu nedenle bu gereksinimi karşılayan bir shellcode oluşturmak gerekir, canary'nin yerinden hareket ettirilmemesi gerektiğini dikkate alarak ve sonunda RIP'i ret'e işaret eden bir adresle üzerine yazarak, en büyük adresi yığının başlangıcına işaret eden yeni bir adresle değiştirmek (program tarafından sızdırılan) böylece ret'i oraya atlamak için kullanmak mümkündür.
- [https://faraz.faith/2019-10-20-secconctf-2019-sum/](https://faraz.faith/2019-10-20-secconctf-2019-sum/)
-- 64 bit, relro yok, canary, nx, pie yok. Yığındaki bir dizide bir off-by-one vardır, bu da bir işaretçiyi kontrol etmeyi sağlar ve WWW'yi (dizinin üzerindeki adresle yazılan dizinin tüm sayıların toplamını yazar) sağlar. Yığın kontrol altındadır, bu nedenle GOT `exit` adresi `pop rdi; ret` ile üzerine yazılır ve yığına `main` adresi eklenir (tekrar `main`'e döner). `puts` kullanarak GOT'taki adresi sızdırmak için bir ROP zinciri kullanılır (`exit` çağrılacak, bu nedenle `pop rdi; ret` çağrılacak ve bu zincir yığında yürütülecektir). Son olarak, ret2lib'i yürüten yeni bir ROP zinciri kullanılır.
+- 64 bit, relro yok, canary, nx, pie yok. Yığındaki bir dizide bir off-by-one vardır, bu da bir işaretçiyi kontrol etmeyi sağlar ve WWW'yi garanti eder (dizinin üzerindeki adresle yazılan dizinin tüm sayıların toplamını yazar). Yığın kontrol altındadır, bu nedenle GOT `exit` adresi `pop rdi; ret` ile üzerine yazılır ve yığına `main` adresi eklenir (tekrar `main`'e döner). `puts` kullanarak GOT'taki adresi sızdırmak için bir ROP zinciri kullanılır (`exit` çağrılacak, bu nedenle `pop rdi; ret` çağrılacak ve bu zincir yığında yürütülecektir). Son olarak, ret2lib'i yürüten yeni bir ROP zinciri kullanılır.
- [https://guyinatuxedo.github.io/14-ret_2_system/tu_guestbook/index.html](https://guyinatuxedo.github.io/14-ret_2_system/tu_guestbook/index.html)
- 32 bit, relro yok, canary yok, nx, pie yok. Yığın üzerinden libc ve heap adreslerini sızdırmak için kötü bir indekslemeyi kötüye kullanın. `system('/bin/sh')` çağırarak bir ret2lib yapmak için tampon taşmasını kötüye kullanın (bir kontrolü aşmak için heap adresine ihtiyaç vardır).
-{{#include /banners/hacktricks-training.md}}
+{{#include ../banners/hacktricks-training.md}}
diff --git a/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md b/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md
index 3d66bb4cc..53f478d62 100644
--- a/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md
+++ b/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md
@@ -12,9 +12,9 @@
## Brute force Canary
-Basit bir canary'yi aşmanın en iyi yolu, ikili dosyanın her yeni bağlantı kurduğunuzda **çocuk süreçler fork eden** bir program olmasıdır (ağ servisi), çünkü her bağlantı kurduğunuzda **aynı canary kullanılacaktır**.
+Basit bir canary'yi aşmanın en iyi yolu, ikili dosyanın her yeni bağlantı kurduğunuzda **çocuk süreçleri fork eden** bir program olmasıdır (ağ servisi), çünkü her bağlandığınızda **aynı canary kullanılacaktır**.
-Bu durumda, canary'yi aşmanın en iyi yolu sadece **karakter karakter brute-force yapmak** ve tahmin edilen canary baytının doğru olup olmadığını, programın çöküp çökmediğini veya normal akışına devam edip etmediğini kontrol ederek anlamaktır. Bu örnekte, fonksiyon **8 Baytlık bir canary'yi (x64)** brute-force yapar ve doğru tahmin edilen bayt ile kötü bayt arasında sadece **kontrol ederek** ayrım yapar; eğer sunucu tarafından bir **yanıt** gönderilmişse (başka bir durumda **try/except** kullanmak da bir yol olabilir):
+Bu durumda, canary'yi aşmanın en iyi yolu sadece **karakter karakter brute-force yapmak** ve tahmin edilen canary baytının doğru olup olmadığını, programın çöküp çökmediğini veya normal akışına devam edip etmediğini kontrol ederek anlamaktır. Bu örnekte fonksiyon **8 Baytlık bir canary'yi (x64) brute-force yapar** ve doğru tahmin edilen bayt ile yanlış bayt arasında sadece **kontrol ederek** ayrım yapar; eğer sunucu tarafından bir **yanıt** gönderiliyorsa (başka bir durumda **try/except** kullanmak da bir yol olabilir):
### Örnek 1
@@ -105,8 +105,8 @@ log.info(f"The canary is: {canary}")
Aynı işlemin thread'leri de **aynı canary token'ını paylaşacaktır**, bu nedenle bir saldırı gerçekleştiğinde ikili dosya her seferinde yeni bir thread oluşturuyorsa bir canary'yi **brute-forc**e etmek mümkün olacaktır.
-Ayrıca, canary ile korunan bir **threaded function** içindeki bir buffer **overflow**, **TLS'de saklanan master canary'yi değiştirmek için** kullanılabilir. Bunun nedeni, bir thread'in **stack'inde** bir **bof** aracılığıyla TLS'nin saklandığı bellek konumuna ulaşmanın mümkün olabilmesidir.\
-Sonuç olarak, bu önlem işe yaramaz çünkü kontrol, aynı (ancak değiştirilmiş) iki canary ile kullanılır.\
+Ayrıca, canary ile korunan bir **threaded function**'da bir buffer **overflow** kullanılarak **TLS'de saklanan master canary**'yi **değiştirmek** mümkün olabilir. Bunun nedeni, bir thread'in **stack**'inde bir **bof** aracılığıyla TLS'nin saklandığı bellek konumuna ulaşmanın mümkün olabilmesidir.\
+Sonuç olarak, bu önlem işe yaramaz çünkü kontrol, aynı (değiştirilmiş olsa da) iki canary ile kullanılır.\
Bu saldırı, yazıda gerçekleştirilmiştir: [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads)
Ayrıca, genellikle **TLS**'nin **`mmap`** ile saklandığını ve bir **thread**'in **stack**'i oluşturulduğunda bunun da `mmap` ile oluşturulduğunu belirten [https://www.slideshare.net/codeblue_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue_jp/master-canary-forging-by-yuki-koike-code-blue-2015) sunumunu kontrol edin; bu, önceki yazıda gösterildiği gibi overflow'a izin verebilir.
@@ -119,4 +119,4 @@ Ayrıca, genellikle **TLS**'nin **`mmap`** ile saklandığını ve bir **thread*
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/binary-exploitation/ios-exploiting.md b/src/binary-exploitation/ios-exploiting.md
index dda967c6d..9bb6f1195 100644
--- a/src/binary-exploitation/ios-exploiting.md
+++ b/src/binary-exploitation/ios-exploiting.md
@@ -1,10 +1,10 @@
# iOS Exploiting
-{{#include /banners/hacktricks-training.md}}
+{{#include ../banners/hacktricks-training.md}}
## Fiziksel kullanımdan sonra serbest bırakma
-Bu, [https://alfiecg.uk/2024/09/24/Kernel-exploit.html](https://alfiecg.uk/2024/09/24/Kernel-exploit.html) adresindeki gönderiden bir özet olup, bu tekniği kullanarak yapılan exploit hakkında daha fazla bilgi [https://github.com/felix-pb/kfd](https://github.com/felix-pb/kfd) adresinde bulunabilir.
+Bu, [https://alfiecg.uk/2024/09/24/Kernel-exploit.html](https://alfiecg.uk/2024/09/24/Kernel-exploit.html) adresindeki gönderiden bir özet, ayrıca bu tekniği kullanarak exploit hakkında daha fazla bilgi [https://github.com/felix-pb/kfd](https://github.com/felix-pb/kfd) adresinde bulunabilir.
### XNU'da Bellek Yönetimi
@@ -27,7 +27,7 @@ Sayfa tabloları üç seviyede hiyerarşik olarak düzenlenmiştir:
#### Sanal Belleği Fiziksel Belleğe Haritalama
* **Doğrudan Haritalama (Blok Haritalama)**:
-* Bir sayfa tablosundaki bazı girişler, bir dizi sanal adresi kesintisiz bir fiziksel adres aralığına doğrudan **haritalar** (bir kısayol gibi).
+* Bir sayfa tablosundaki bazı girişler, bir dizi sanal adresi kesintisiz bir fiziksel adres aralığına doğrudan **haritalar** (kısa yol gibi).
* **Çocuk Sayfa Tablosuna İşaretçi**:
* Daha ince kontrol gerekiyorsa, bir seviyedeki (örneğin, L1) bir giriş, bir sonraki seviyedeki **çocuk sayfa tablosuna** işaret edebilir (örneğin, L2).
@@ -36,7 +36,7 @@ Sayfa tabloları üç seviyede hiyerarşik olarak düzenlenmiştir:
Diyelim ki sanal adres **0x1000000000**'e erişmeye çalışıyorsunuz:
1. **L1 Tablosu**:
-* Kernel, bu sanal adrese karşılık gelen L1 sayfa tablosu girişini kontrol eder. Eğer bir **L2 sayfa tablosuna işaretçi** varsa, o L2 tablosuna gider.
+* Kernel, bu sanal adrese karşılık gelen L1 sayfa tablosu girişini kontrol eder. Eğer bir **L2 sayfa tablosuna işaretçi** varsa, o L2 tablosuna geçer.
2. **L2 Tablosu**:
* Kernel, daha ayrıntılı bir haritalama için L2 sayfa tablosunu kontrol eder. Eğer bu giriş bir **L3 sayfa tablosuna** işaret ediyorsa, oraya devam eder.
3. **L3 Tablosu**:
@@ -55,37 +55,37 @@ Alternatif olarak, eğer L2 girişi bir L3 tablosuna işaret ediyorsa:
### Fiziksel Kullanımdan Sonra Serbest Bırakma
-Bir **fiziksel kullanımdan sonra serbest bırakma** (UAF) durumu, şu durumlarda meydana gelir:
+Bir **fiziksel kullanımdan sonra serbest bırakma** (UAF) şu durumlarda meydana gelir:
1. Bir süreç bazı belleği **okunabilir ve yazılabilir** olarak **ayırır**.
2. **Sayfa tabloları**, bu belleği erişebileceği belirli bir fiziksel adrese haritalamak için güncellenir.
-3. Süreç bu belleği **serbest bırakır** (boşaltır).
-4. Ancak, bir **hata** nedeniyle, kernel **haritalamayı** sayfa tablosundan kaldırmayı unutur, oysa ilgili fiziksel belleği serbest olarak işaretler.
-5. Kernel, bu "serbest bırakılmış" fiziksel belleği, **kernel verileri** gibi diğer amaçlar için **yeniden tahsis edebilir**.
+3. Süreç belleği **serbest bırakır** (boşaltır).
+4. Ancak, bir **hata** nedeniyle, kernel **sayfa tablosundan haritalamayı kaldırmayı unutur**, buna rağmen ilgili fiziksel belleği serbest olarak işaretler.
+5. Kernel, bu "serbest bırakılmış" fiziksel belleği başka amaçlar için **yeniden tahsis edebilir**, örneğin **kernel verileri** için.
6. Haritalama kaldırılmadığı için, süreç bu fiziksel belleğe hala **okuma ve yazma** yapabilir.
Bu, sürecin **kernel belleği** sayfalarına erişebilmesi anlamına gelir; bu sayfalar hassas veriler veya yapılar içerebilir ve potansiyel olarak bir saldırganın **kernel belleğini manipüle etmesine** olanak tanır.
### Sömürü Stratejisi: Heap Spray
-Saldırgan, hangi belirli kernel sayfalarının serbest bırakılmış belleğe tahsis edileceğini kontrol edemediğinden, **heap spray** adı verilen bir teknik kullanır:
+Saldırgan, hangi belirli kernel sayfalarının serbest belleğe tahsis edileceğini kontrol edemediğinden, **heap spray** adı verilen bir teknik kullanır:
1. Saldırgan, kernel belleğinde çok sayıda **IOSurface nesnesi** oluşturur.
-2. Her IOSurface nesnesi, kolayca tanımlanabilmesi için bir alanında bir **sihirli değer** içerir.
-3. Serbest bırakılmış sayfaları **tarar** ve bu IOSurface nesnelerinden herhangi birinin serbest bırakılmış bir sayfaya düşüp düşmediğini kontrol eder.
-4. Serbest bırakılmış bir sayfada bir IOSurface nesnesi bulduklarında, bunu **kernel belleğini okumak ve yazmak** için kullanabilirler.
+2. Her IOSurface nesnesi, kolayca tanımlanabilen bir **sihirli değer** içerir.
+3. Serbest bırakılmış sayfaları **tarar** ve bu IOSurface nesnelerinden herhangi birinin serbest bir sayfaya düşüp düşmediğini kontrol eder.
+4. Serbest bir sayfada bir IOSurface nesnesi bulduklarında, bunu **kernel belleğini okumak ve yazmak** için kullanabilirler.
-Bu konuda daha fazla bilgi [https://github.com/felix-pb/kfd/tree/main/writeups](https://github.com/felix-pb/kfd/tree/main/writeups) adresinde bulunmaktadır.
+Bununla ilgili daha fazla bilgi [https://github.com/felix-pb/kfd/tree/main/writeups](https://github.com/felix-pb/kfd/tree/main/writeups) adresinde bulunmaktadır.
### Adım Adım Heap Spray Süreci
-1. **IOSurface Nesnelerini Sprayle**: Saldırgan, özel bir tanımlayıcı ("sihirli değer") ile birçok IOSurface nesnesi oluşturur.
-2. **Serbest Sayfaları Tara**: Bu nesnelerin serbest bırakılmış bir sayfada tahsis edilip edilmediğini kontrol ederler.
+1. **IOSurface Nesnelerini Spray Et**: Saldırgan, özel bir tanımlayıcı ("sihirli değer") ile birçok IOSurface nesnesi oluşturur.
+2. **Serbest Sayfaları Tara**: Bu nesnelerin serbest bir sayfada tahsis edilip edilmediğini kontrol ederler.
3. **Kernel Belleğini Oku/Yaz**: IOSurface nesnesindeki alanları manipüle ederek, kernel belleğinde **rastgele okuma ve yazma** yapma yeteneği kazanırlar. Bu, onlara:
* Kernel belleğindeki herhangi bir 32 bit değeri **okuma** yeteneği sağlar.
-* 64 bit değerleri **yazma** yeteneği sağlar ve bu da istikrarlı bir **kernel okuma/yazma ilkesine** ulaşmalarını sağlar.
+* 64 bit değerleri **yazma** yeteneği sağlar ve böylece kararlı bir **kernel okuma/yazma ilkesine** ulaşırlar.
-Sihirli değer IOSURFACE_MAGIC ile IOSurface nesneleri oluşturun, daha sonra aramak için:
+Sihirli değer IOSURFACE_MAGIC ile IOSurface nesneleri oluşturun, böylece daha sonra arama yapabilirsiniz:
```c
void spray_iosurface(io_connect_t client, int nSurfaces, io_connect_t **clients, int *nClients) {
if (*nClients >= 0x4000) return;
@@ -180,7 +180,7 @@ return value;
Yazma işlemi gerçekleştirmek için:
-1. Hedef adrese **indekslenmiş zaman damgası işaretçisini** geçersiz kılın.
+1. Hedef adrese **indeksli zaman damgası işaretçisini** geçersiz kılın.
2. 64-bit bir değer yazmak için `set_indexed_timestamp` yöntemini kullanın.
```c
void set_indexed_timestamp(io_connect_t client, uint32_t surfaceID, uint64_t value) {
@@ -198,10 +198,10 @@ iosurface_set_indexed_timestamp_pointer(info.object, orig);
#### Exploit Akışı Özeti
1. **Fiziksel Use-After-Free Tetikleme**: Serbest sayfalar yeniden kullanım için mevcuttur.
-2. **IOSurface Nesnelerini Spray Et**: Kernel belleğinde benzersiz bir "sihirli değer" ile birçok IOSurface nesnesi ayır.
-3. **Erişilebilir IOSurface'ı Belirle**: Kontrol ettiğin bir serbest sayfada bir IOSurface bul.
-4. **Use-After-Free'i Kötüye Kullan**: IOSurface nesnesindeki işaretçileri değiştirerek IOSurface yöntemleri aracılığıyla keyfi **kernel okuma/yazma** sağla.
+2. **IOSurface Nesnelerini Spray Etme**: Kernel belleğinde benzersiz bir "sihirli değer" ile birçok IOSurface nesnesi ayırın.
+3. **Erişilebilir IOSurface'ı Belirleme**: Kontrol ettiğiniz serbest bir sayfada bir IOSurface bulun.
+4. **Use-After-Free'i Kötüye Kullanma**: IOSurface nesnesindeki işaretçileri değiştirerek IOSurface yöntemleri aracılığıyla keyfi **kernel okuma/yazma** işlemlerini etkinleştirin.
-Bu ilkelere sahip olarak, exploit kontrol edilen **32-bit okumalar** ve **64-bit yazmalar** sağlar. Daha fazla jailbreak adımları, ek korumaları aşmayı gerektirebilecek daha stabil okuma/yazma ilkelere dahil olabilir (örneğin, daha yeni arm64e cihazlarda PPL).
+Bu ilkelere dayanarak, exploit kontrol edilen **32-bit okumalar** ve **64-bit yazmalar** sağlar. Daha fazla jailbreak adımları, ek korumaları aşmayı gerektirebilecek daha stabil okuma/yazma ilkelere dahil olabilir (örneğin, daha yeni arm64e cihazlarda PPL).
-{{#include /banners/hacktricks-training.md}}
+{{#include ../banners/hacktricks-training.md}}
diff --git a/src/binary-exploitation/libc-heap/README.md b/src/binary-exploitation/libc-heap/README.md
index a58733fe8..61588edab 100644
--- a/src/binary-exploitation/libc-heap/README.md
+++ b/src/binary-exploitation/libc-heap/README.md
@@ -1,12 +1,12 @@
# Libc Heap
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
## Heap Temelleri
-Heap, temelde bir programın **`malloc`**, `calloc` gibi fonksiyonları çağırarak veri depolamak için talep ettiği yerdir. Ayrıca, bu bellek artık gerekli olmadığında **`free`** fonksiyonu çağrılarak kullanılabilir hale getirilir.
+Heap, temelde bir programın **`malloc`**, `calloc` gibi fonksiyonları çağırarak veri talep ettiğinde verileri depolayabileceği yerdir. Ayrıca, bu bellek artık gerekli olmadığında **`free`** fonksiyonu çağrılarak kullanılabilir hale getirilir.
-Görüldüğü gibi, bu bellek, ikili dosyanın belleğe yüklendiği yerin hemen sonrasındadır (bakınız `[heap]` bölümü):
+Görüldüğü gibi, bu bellek, ikili dosyanın bellekte yüklendiği yerin hemen sonrasındadır (bakınız `[heap]` bölümü):
@@ -40,14 +40,14 @@ Ana arenanın `brk` sistem çağrısını kullanarak genişlemesinin aksine, iki
Alt heap'ler, çok iş parçacıklı uygulamalarda ikincil arenalar için bellek rezervleri olarak hizmet eder ve ana heap'ten ayrı olarak kendi heap bölgelerini büyütmelerine ve yönetmelerine olanak tanır. İşte alt heap'lerin başlangıç heap'inden nasıl farklılaştığı ve nasıl çalıştığı:
1. **Başlangıç Heap'i vs. Alt Heap'ler**:
-- Başlangıç heap'i, programın ikili dosyasının bellekte hemen arkasında yer alır ve `sbrk` sistem çağrısını kullanarak genişler.
+- Başlangıç heap'i, programın ikili dosyasının hemen arkasında yer alır ve `sbrk` sistem çağrısını kullanarak genişler.
- İkincil arenalar tarafından kullanılan alt heap'ler, belirli bir bellek bölgesini haritalayan `mmap` aracılığıyla oluşturulur.
2. **`mmap` ile Bellek Rezervasyonu**:
- Heap yöneticisi bir alt heap oluşturduğunda, `mmap` aracılığıyla büyük bir bellek bloğu rezerve eder. Bu rezervasyon hemen bellek tahsis etmez; yalnızca diğer sistem süreçlerinin veya tahsislerin kullanmaması gereken bir bölgeyi belirler.
- Varsayılan olarak, bir alt heap için rezerve edilen boyut 32-bit süreçler için 1 MB ve 64-bit süreçler için 64 MB'dır.
3. **`mprotect` ile Aşamalı Genişleme**:
-- Rezerve edilen bellek bölgesi başlangıçta `PROT_NONE` olarak işaretlenir, bu da çekirdeğin bu alana fiziksel bellek tahsis etmesine gerek olmadığı anlamına gelir.
-- Alt heap'i "büyütmek" için, heap yöneticisi `mprotect` kullanarak sayfa izinlerini `PROT_NONE`'dan `PROT_READ | PROT_WRITE`'a değiştirir ve bu, çekirdeğin daha önce rezerve edilen adreslere fiziksel bellek tahsis etmesini sağlar. Bu adım adım yaklaşım, alt heap'in gerektiği gibi genişlemesine olanak tanır.
+- Rezerve edilen bellek bölgesi başlangıçta `PROT_NONE` olarak işaretlenir, bu da çekirdeğin bu alana fiziksel bellek tahsis etmesi gerekmediği anlamına gelir.
+- Alt heap'i "büyütmek" için, heap yöneticisi `mprotect` kullanarak sayfa izinlerini `PROT_NONE`'dan `PROT_READ | PROT_WRITE`'a değiştirir ve çekirdeği daha önce rezerve edilen adreslere fiziksel bellek tahsis etmeye yönlendirir. Bu aşamalı yaklaşım, alt heap'in gerektiği gibi genişlemesine olanak tanır.
- Tüm alt heap tükendiğinde, heap yöneticisi tahsise devam etmek için yeni bir alt heap oluşturur.
### heap_info
@@ -91,9 +91,9 @@ Bu yapıdan bazı ilginç noktalar vardır (aşağıdaki C koduna bakın):
```
- `mchunkptr bins[NBINS * 2 - 2];` **küçük, büyük ve sıralanmamış** **bins**'lerin **ilk ve son chunk'larına** **işaretçiler** içerir (0. indeks kullanılmadığı için -2).
-- Bu nedenle, bu bins'lerin **ilk chunk'ı** bu yapıya **geri işaretçi** ve bu bins'lerin **son chunk'ı** bu yapıya **ileri işaretçi** içerecektir. Bu, eğer **ana arenada bu adresleri sızdırabilirseniz** yapıya bir işaretçi elde edeceğiniz anlamına gelir.
+- Bu nedenle, bu bins'lerin **ilk chunk'u** bu yapıya **geri işaretçi** ve bu bins'lerin **son chunk'u** bu yapıya **ileri işaretçi** içerecektir. Bu, eğer **ana arenada bu adresleri sızdırabilirseniz** yapıya bir işaretçi elde edeceğiniz anlamına gelir.
- `struct malloc_state *next;` ve `struct malloc_state *next_free;` yapıları arena'ların bağlı listeleridir.
-- `top` chunk, son "chunk"tır ve temelde **tüm heap hatırlatma alanıdır**. `top` chunk "boş" olduğunda, heap tamamen kullanılmıştır ve daha fazla alan talep etmesi gerekir.
+- `top` chunk, temelde **tüm heap hatırlatma alanı** olan son "chunk"tır. `top` chunk "boş" olduğunda, heap tamamen kullanılmıştır ve daha fazla alan talep etmesi gerekir.
- `last reminder` chunk, tam boyutlu bir chunk mevcut olmadığında ve bu nedenle daha büyük bir chunk bölündüğünde ortaya çıkar; burada kalan kısmın işaretçisi yer alır.
```c
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1812
@@ -263,11 +263,11 @@ return request2size (req);
```
Not edin ki, toplam gereken alanı hesaplamak için yalnızca `SIZE_SZ` 1 kez eklenir çünkü `prev_size` alanı veri depolamak için kullanılabilir, bu nedenle yalnızca başlangıç başlığı gereklidir.
-### Parça verilerini al ve meta verileri değiştir
+### Chunk verilerini al ve meta verileri değiştir
-Bu fonksiyonlar, bir parçaya işaretçi alarak çalışır ve meta verileri kontrol etmek/ayarlamak için faydalıdır:
+Bu fonksiyonlar bir chunk'a işaretçi alarak çalışır ve meta verileri kontrol etmek/ayarlamak için faydalıdır:
-- Parça bayraklarını kontrol et
+- Chunk bayraklarını kontrol et
```c
// From https://github.com/bminor/glibc/blob/master/malloc/malloc.c
@@ -354,7 +354,7 @@ people extending or adapting this malloc.
#define clear_inuse_bit_at_offset(p, s) \
(((mchunkptr) (((char *) (p)) + (s)))->mchunk_size &= ~(PREV_INUSE))
```
-- Başlık ve alt bilgi ayarlayın (parça numaraları kullanıldığında)
+- Başlık ve altbilgi ayarlayın (parça numaraları kullanıldığında)
```c
/* Set size at head, without disturbing its use bit */
#define set_head_size(p, s) ((p)->mchunk_size = (((p)->mchunk_size & SIZE_BITS) | (s)))
@@ -365,7 +365,7 @@ people extending or adapting this malloc.
/* Set size at footer (only when chunk is not in use) */
#define set_foot(p, s) (((mchunkptr) ((char *) (p) + (s)))->mchunk_prev_size = (s))
```
-- Parçanın içindeki gerçek kullanılabilir verinin boyutunu al
+- Parçanın içindeki gerçek kullanılabilir verinin boyutunu alın
```c
#pragma GCC poison mchunk_size
#pragma GCC poison mchunk_prev_size
@@ -398,7 +398,7 @@ return ptr;
### Hızlı Yığın Örneği
-Hızlı yığın örneği [https://guyinatuxedo.github.io/25-heap/index.html](https://guyinatuxedo.github.io/25-heap/index.html) ancak arm64'te:
+Hızlı yığın örneği [https://guyinatuxedo.github.io/25-heap/index.html](https://guyinatuxedo.github.io/25-heap/index.html) adresinden ancak arm64'te:
```c
#include
#include
@@ -415,9 +415,9 @@ Ana fonksiyonun sonunda bir kesme noktası ayarlayın ve bilgilerin nerede sakla
-Panda dizesinin `0xaaaaaaac12a0` adresinde saklandığını görebiliyoruz (bu, `x0` içindeki malloc tarafından verilen yanıttı). 0x10 byte öncesini kontrol ettiğimizde, `0x0` değerinin **önceki parçanın kullanılmadığını** (uzunluk 0) ve bu parçanın uzunluğunun `0x21` olduğunu gösterdiğini görebiliriz.
+Panda dizesinin `0xaaaaaaac12a0` adresinde saklandığını görebiliyoruz (bu, `x0` içindeki malloc tarafından verilen yanıttır). 0x10 byte öncesini kontrol ettiğimizde, `0x0` değerinin **önceki parçanın kullanılmadığını** (uzunluk 0) ve bu parçanın uzunluğunun `0x21` olduğunu gösterdiğini görebiliriz.
-Rezerve edilen ekstra alan (0x21-0x10=0x11), **eklenen başlıklardan** (0x10) gelmektedir ve 0x1, 0x21B olarak rezerve edildiği anlamına gelmez, ancak mevcut başlığın uzunluğunun son 3 biti bazı özel anlamlara sahiptir. Uzunluk her zaman 16 byte hizalı olduğundan (64 bit makinelerde), bu bitler aslında uzunluk numarası tarafından asla kullanılmayacaktır.
+Ayrıca ayrılan ekstra alan (0x21-0x10=0x11), **eklenmiş başlıklardan** (0x10) gelmektedir ve 0x1, 0x21B'nin ayrıldığını değil, mevcut başlığın uzunluğunun son 3 bitinin bazı özel anlamları olduğunu gösterir. Uzunluk her zaman 16 byte hizalı olduğundan (64 bit makinelerde), bu bitler aslında uzunluk numarası tarafından asla kullanılmayacaktır.
```
0x1: Previous in Use - Specifies that the chunk before it in memory is in use
0x2: Is MMAPPED - Specifies that the chunk was obtained with mmap()
@@ -475,7 +475,7 @@ return 0;
-Daha sonra, malloc'u çağıran ilk iş parçacığı çağrıldığında, yeni bir arena oluşturulur:
+Daha sonra, malloc'u çağıran ilk iş parçacığı çağrıldıktan sonra, yeni bir arena oluşturulur:
@@ -505,4 +505,4 @@ heap-memory-functions/heap-functions-security-checks.md
- [https://azeria-labs.com/heap-exploitation-part-2-glibc-heap-free-bins/](https://azeria-labs.com/heap-exploitation-part-2-glibc-heap-free-bins/)
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/binary-exploitation/libc-heap/use-after-free/first-fit.md b/src/binary-exploitation/libc-heap/use-after-free/first-fit.md
index 32e28483e..9f4271d3c 100644
--- a/src/binary-exploitation/libc-heap/use-after-free/first-fit.md
+++ b/src/binary-exploitation/libc-heap/use-after-free/first-fit.md
@@ -1,21 +1,21 @@
-# İlk Uygun
+# First Fit
{{#include ../../../banners/hacktricks-training.md}}
-## **İlk Uygun**
+## **First Fit**
-glibc kullanarak bir programda bellek serbest bıraktığınızda, bellek parçalarını yönetmek için farklı "kutular" kullanılır. İşte iki yaygın senaryonun basitleştirilmiş bir açıklaması: sıralanmamış kutular ve hızlı kutular.
+Bir programda glibc kullanarak bellek serbest bıraktığınızda, bellek parçalarını yönetmek için farklı "kutular" kullanılır. İşte iki yaygın senaryonun basitleştirilmiş bir açıklaması: sıralanmamış kutular ve hızlı kutular.
### Sıralanmamış Kutular
-Hızlı bir parça olmayan bir bellek parçasını serbest bıraktığınızda, bu sıralanmamış kutuya gider. Bu kutu, yeni serbest bırakılan parçaların ön tarafa (baş) eklendiği bir liste gibi davranır. Yeni bir bellek parçası talep ettiğinizde, allocator sıralanmamış kutuya arka taraftan (kuyruk) bakarak yeterince büyük bir parça bulmaya çalışır. Sıralanmamış kutudan bir parça, ihtiyaç duyduğunuzdan büyükse, bu parça bölünür; ön kısmı geri döner ve kalan kısım kutuda kalır.
+Hızlı bir parça olmayan bir bellek parçasını serbest bıraktığınızda, bu sıralanmamış kutuya gider. Bu kutu, yeni serbest bırakılan parçaların ön tarafa (baş) eklendiği bir liste gibi davranır. Yeni bir bellek parçası talep ettiğinizde, allocator sıralanmamış kutuya arka taraftan (kuyruk) bakarak yeterince büyük bir parça bulur. Sıralanmamış kutudan bir parça, ihtiyaç duyduğunuzdan büyükse, bu parça bölünür; ön kısmı geri döner ve kalan kısım kutuda kalır.
Örnek:
-- 300 bayt (`a`) ayırırsınız, ardından 250 bayt (`b`) ayırırsınız, `a`yı serbest bırakırsınız ve tekrar 250 bayt (`c`) talep edersiniz.
+- 300 bayt (`a`) ayırırsınız, ardından 250 bayt (`b`), `a`yı serbest bırakır ve tekrar 250 bayt (`c`) talep edersiniz.
- `a`yı serbest bıraktığınızda, bu sıralanmamış kutuya gider.
-- Eğer sonra tekrar 250 bayt talep ederseniz, allocator `a`yı kuyrukta bulur ve onu böler, talebinize uyan kısmı geri döner ve geri kalanını kutuda tutar.
-- `c`, önceki `a`ya işaret edecek ve `a` ile doldurulacaktır.
+- Eğer tekrar 250 bayt talep ederseniz, allocator `a`yı kuyrukta bulur ve onu böler, talebinize uyan kısmı geri döner ve geri kalanını kutuda tutar.
+- `c`, önceki `a`ya işaret edecek ve `a'nın` içeriği ile doldurulacaktır.
```c
char *a = malloc(300);
char *b = malloc(250);
@@ -28,7 +28,7 @@ Fastbins, küçük bellek parçaları için kullanılır. Sıralanmamış kutula
Örnek:
-- Dört adet 20 baytlık parça (`a`, `b`, `c`, `d`) ayırırsınız.
+- Dört adet 20 baytlık parça ayırırsınız (`a`, `b`, `c`, `d`).
- Bunları herhangi bir sırayla serbest bıraktığınızda, serbest bırakılan parçalar fastbin'in başına eklenir.
- Daha sonra 20 baytlık bir parça talep ederseniz, allocator fastbin'in başından en son serbest bırakılan parçayı döndürecektir.
```c
@@ -45,18 +45,18 @@ b = malloc(20); // c
c = malloc(20); // b
d = malloc(20); // a
```
-## Diğer Referanslar & Örnekler
+## Diğer Referanslar ve Örnekler
- [**https://heap-exploitation.dhavalkapil.com/attacks/first_fit**](https://heap-exploitation.dhavalkapil.com/attacks/first_fit)
- [**https://8ksec.io/arm64-reversing-and-exploitation-part-2-use-after-free/**](https://8ksec.io/arm64-reversing-and-exploitation-part-2-use-after-free/)
-- ARM64. Kullanımdan sonra serbest bırakma: Bir kullanıcı nesnesi oluşturun, serbest bırakın, serbest bırakılan parçayı alan bir nesne oluşturun ve buna yazma izni verin, **öncekinden user->password konumunu üzerine yazarak**. Kullanıcıyı **şifre kontrolünü atlamak için yeniden kullanın**.
+- ARM64. Kullanımdan sonra serbest bırakma: Bir kullanıcı nesnesi oluşturun, serbest bırakın, serbest bırakılan parçayı alan bir nesne oluşturun ve buna yazma izni verin, **önceki kullanıcı->şifre konumunu üzerine yazarak**. Kullanıcıyı **şifre kontrolünü atlamak için yeniden kullanın**.
- [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use_after_free/#example**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use_after_free/#example)
- Program notlar oluşturulmasına izin verir. Bir not, bir malloc(8) içinde not bilgilerini (çağrılabilecek bir işlevin işaretçisi ile) ve notun içeriği ile başka bir malloc(\) işaretçisini içerecektir.
-- Saldırı, not bilgisi boyutundan daha büyük malloc içeriğine sahip 2 not (note0 ve note1) oluşturmak ve ardından bunları serbest bırakmak olacaktır, böylece hızlı kutuya (veya tcache) gireceklerdir.
-- Ardından, içerik boyutu 8 olan başka bir not (note2) oluşturun. İçerik, parçanın yeniden kullanılacağı note1'de olacak, burada işlev işaretçisini kazanan işlevine işaret edecek şekilde değiştirebiliriz ve ardından note1'i Kullanımdan Sonra Serbest Bırakma ile yeni işlev işaretçisini çağırabiliriz.
+- Saldırı, not bilgisi boyutundan daha büyük malloc içeriklerine sahip 2 not (not0 ve not1) oluşturmak ve ardından bunları serbest bırakmak olacaktır, böylece hızlı kutuya (veya tcache) gireceklerdir.
+- Ardından, içerik boyutu 8 olan başka bir not (not2) oluşturun. İçerik, parçanın yeniden kullanılacağı not1'de olacak, burada işlev işaretçisini kazanan işlevine işaret edecek şekilde değiştirebiliriz ve ardından Not1'i Kullanımdan Sonra Serbest Bırakma ile yeni işlev işaretçisini çağırabiliriz.
- [**https://guyinatuxedo.github.io/26-heap_grooming/pico_areyouroot/index.html**](https://guyinatuxedo.github.io/26-heap_grooming/pico_areyouroot/index.html)
-- Bazı bellek ayırmak, istenen değeri yazmak, serbest bırakmak, yeniden ayırmak ve önceki veriler hala orada olduğu için, parçadaki yeni beklenen yapı ile ilgili olarak işlenmesi mümkün olacaktır, bu da değeri ayarlayıp bayrağı almayı mümkün kılar.
+- Bazı bellek ayırmak, istenen değeri yazmak, serbest bırakmak, yeniden ayırmak ve önceki veriler hala orada olduğu için, parçadaki yeni beklenen yapı ile işlenmesi mümkün hale gelir, bu da değeri ayarlayıp bayrağı almayı sağlar.
- [**https://guyinatuxedo.github.io/26-heap_grooming/swamp19_heapgolf/index.html**](https://guyinatuxedo.github.io/26-heap_grooming/swamp19_heapgolf/index.html)
-- Bu durumda, belirli bir parçanın içine 4 yazmak gereklidir, bu da tahsis edilen ilk parçadır (hepsini zorla serbest bıraktıktan sonra bile). Her yeni tahsis edilen parçanın dizideki numarası saklanır. Ardından, 4 parça (+ başlangıçta tahsis edilen) ayırın, sonuncusu içinde 4 bulunduracak, bunları serbest bırakın ve ilk parçanın yeniden tahsis edilmesini zorlayın, bu da içinde 4 bulunan son serbest bırakılan parçayı kullanacaktır.
+- Bu durumda, belirli bir parçanın içine 4 yazmak gereklidir, bu da tahsis edilen ilk parçadır (hepsini zorla serbest bıraktıktan sonra bile). Her yeni tahsis edilen parçanın dizideki numarası saklanır. Ardından, 4 parça (+ başlangıçta tahsis edilen) ayırın, sonuncusu içinde 4 olacak, bunları serbest bırakın ve ilk parçanın yeniden tahsis edilmesini zorlayın, bu da içinde 4 olan son serbest bırakılan parçayı kullanacaktır.
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/generic-methodologies-and-resources/phishing-methodology/discord-invite-hijacking.md b/src/generic-methodologies-and-resources/phishing-methodology/discord-invite-hijacking.md
index 0abbffe6d..251c3cf7f 100644
--- a/src/generic-methodologies-and-resources/phishing-methodology/discord-invite-hijacking.md
+++ b/src/generic-methodologies-and-resources/phishing-methodology/discord-invite-hijacking.md
@@ -2,7 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
-Discord’un davet sistemi açığı, tehdit aktörlerinin süresi dolmuş veya silinmiş davet kodlarını (geçici, kalıcı veya özel vanity) herhangi bir Seviye 3 artırılmış sunucuda yeni vanity bağlantıları olarak talep etmesine olanak tanır. Tüm kodları küçük harfe normalize ederek, saldırganlar bilinen davet kodlarını önceden kaydedebilir ve orijinal bağlantı süresi dolduğunda veya kaynak sunucu artırmasını kaybettiğinde trafiği sessizce ele geçirebilirler.
+Discord’un davet sistemi açığı, tehdit aktörlerinin süresi dolmuş veya silinmiş davet kodlarını (geçici, kalıcı veya özel vanity) yeni vanity bağlantıları olarak herhangi bir Seviye 3 artırılmış sunucuda talep etmesine olanak tanır. Tüm kodları küçük harfe normalize ederek, saldırganlar bilinen davet kodlarını önceden kaydedebilir ve orijinal bağlantı süresi dolduğunda veya kaynak sunucu artırmasını kaybettiğinde trafiği sessizce ele geçirebilirler.
## Davet Türleri ve Ele Geçirme Riski
@@ -22,18 +22,18 @@ Discord’un davet sistemi açığı, tehdit aktörlerinin süresi dolmuş veya
- **Sunucu Ayarları → Vanity URL** kısmında hedef davet kodunu atamayı deneyin. Kabul edilirse, kod kötü niyetli sunucu tarafından rezerve edilir.
3. Ele Geçirme Aktivasyonu
- Geçici davetler için, orijinal davetin süresi dolana kadar bekleyin (veya kaynağı kontrol ediyorsanız manuel olarak silin).
-- Büyük harf içeren kodlar için, küçük harfli versiyonu hemen talep edilebilir, ancak yönlendirme yalnızca süresi dolduktan sonra aktif olur.
+- Büyük harf içeren kodlar için, küçük harfli versiyonu hemen talep edilebilir, ancak yönlendirme yalnızca süresi dolduktan sonra aktif hale gelir.
4. Sessiz Yönlendirme
-- Eski bağlantıyı ziyaret eden kullanıcılar, ele geçirme aktif olduğunda saldırgan kontrolündeki sunucuya sorunsuz bir şekilde yönlendirilir.
+- Eski bağlantıyı ziyaret eden kullanıcılar, ele geçirme aktif hale geldiğinde saldırgan kontrolündeki sunucuya sorunsuz bir şekilde yönlendirilir.
## Discord Sunucusu Üzerinden Phishing Akışı
1. Sunucu kanallarını kısıtlayarak yalnızca bir **#verify** kanalının görünür olmasını sağlayın.
-2. Yeni gelenleri OAuth2 ile doğrulamaya yönlendirmek için bir bot (örneğin, **Safeguard#0786**) dağıtın.
-3. Bot, kullanıcıları bir CAPTCHA veya doğrulama adımı kılıfında bir phishing sitesine (örneğin, `captchaguard.me`) yönlendirir.
+2. Yeni gelenleri OAuth2 ile doğrulamaya teşvik etmek için bir bot (örneğin, **Safeguard#0786**) dağıtın.
+3. Bot, kullanıcıları bir phishing sitesine (örneğin, `captchaguard.me`) yönlendirir ve bunu bir CAPTCHA veya doğrulama adımı olarak gösterir.
4. **ClickFix** UX hilesini uygulayın:
- Bozuk bir CAPTCHA mesajı gösterin.
-- Kullanıcıları **Win+R** diyalogunu açmaya, önceden yüklenmiş bir PowerShell komutunu yapıştırmaya ve Enter tuşuna basmaya yönlendirin.
+- Kullanıcıları **Win+R** diyalogunu açmaya, önceden yüklenmiş bir PowerShell komutunu yapıştırmaya ve Enter'a basmaya yönlendirin.
### ClickFix Panoya Enjeksiyon Örneği
```javascript
@@ -58,4 +58,4 @@ Bu yaklaşım, doğrudan dosya indirmelerini önler ve kullanıcı şüphesini a
- From Trust to Threat: Hijacked Discord Invites Used for Multi-Stage Malware Delivery – https://research.checkpoint.com/2025/from-trust-to-threat-hijacked-discord-invites-used-for-multi-stage-malware-delivery/
- Discord Custom Invite Link Documentation – https://support.discord.com/hc/en-us/articles/115001542132-Custom-Invite-Link
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/generic-methodologies-and-resources/threat-modeling.md b/src/generic-methodologies-and-resources/threat-modeling.md
index 4a3de0119..fc8f41faa 100644
--- a/src/generic-methodologies-and-resources/threat-modeling.md
+++ b/src/generic-methodologies-and-resources/threat-modeling.md
@@ -1,10 +1,10 @@
# Tehdit Modelleme
-{{#include /banners/hacktricks-training.md}}
+{{#include ../banners/hacktricks-training.md}}
## Tehdit Modelleme
-HackTricks'in Tehdit Modelleme üzerine kapsamlı kılavuzuna hoş geldiniz! Siber güvenliğin bu kritik yönünü keşfetmeye başlayın; burada bir sistemdeki potansiyel zayıflıkları tanımlıyor, anlıyor ve bunlara karşı stratejiler geliştiriyoruz. Bu konu, gerçek dünya örnekleri, yararlı yazılımlar ve anlaşılması kolay açıklamalarla dolu adım adım bir kılavuz olarak hizmet vermektedir. Hem yeni başlayanlar hem de siber güvenlik savunmalarını güçlendirmek isteyen deneyimli uygulayıcılar için idealdir.
+HackTricks'in Tehdit Modelleme üzerine kapsamlı kılavuzuna hoş geldiniz! Bu kritik siber güvenlik alanını keşfetmeye başlayın; burada bir sistemdeki potansiyel zayıflıkları tanımlıyor, anlıyor ve bunlara karşı stratejiler geliştiriyoruz. Bu konu, gerçek dünya örnekleri, yararlı yazılımlar ve anlaşılması kolay açıklamalarla dolu adım adım bir kılavuz olarak hizmet vermektedir. Hem yeni başlayanlar hem de siber güvenlik savunmalarını güçlendirmek isteyen deneyimli uygulayıcılar için idealdir.
### Yaygın Olarak Kullanılan Senaryolar
@@ -22,7 +22,7 @@ Tehdit modelleri genellikle kırmızı ile işaretlenmiş unsurlar içerir; bu,
CIA Üçlüsü, bilgi güvenliği alanında yaygın olarak tanınan bir modeldir ve Gizlilik, Bütünlük ve Erişilebilirlik anlamına gelir. Bu üç sütun, birçok güvenlik önlemi ve politikasının temelini oluşturur; bunlar arasında tehdit modelleme metodolojileri de bulunmaktadır.
1. **Gizlilik**: Verilerin veya sistemin yetkisiz kişiler tarafından erişilmemesini sağlamak. Bu, veri ihlallerini önlemek için uygun erişim kontrolleri, şifreleme ve diğer önlemleri gerektiren güvenliğin merkezi bir yönüdür.
-2. **Bütünlük**: Verilerin yaşam döngüsü boyunca doğruluğu, tutarlılığı ve güvenilirliği. Bu ilke, verilerin yetkisiz taraflarca değiştirilmemesini veya müdahale edilmemesini sağlar. Genellikle kontrol toplamları, hashleme ve diğer veri doğrulama yöntemlerini içerir.
+2. **Bütünlük**: Verilerin yaşam döngüsü boyunca doğruluğu, tutarlılığı ve güvenilirliği. Bu ilke, verilerin yetkisiz taraflarca değiştirilmemesini veya bozulmamasını sağlar. Genellikle kontrol toplamları, hashleme ve diğer veri doğrulama yöntemlerini içerir.
3. **Erişilebilirlik**: Bu, verilerin ve hizmetlerin ihtiyaç duyulduğunda yetkili kullanıcılara erişilebilir olmasını sağlar. Bu genellikle sistemlerin kesintilere rağmen çalışmaya devam etmesi için yedeklilik, hata toleransı ve yüksek erişilebilirlik yapılandırmalarını içerir.
### Tehdit Modelleme Metodolojileri
@@ -31,7 +31,7 @@ CIA Üçlüsü, bilgi güvenliği alanında yaygın olarak tanınan bir modeldir
2. **DREAD**: Bu, tanımlanan tehditlerin risk değerlendirmesi için kullanılan başka bir Microsoft metodolojisidir. DREAD, **Zarar potansiyeli, Yeniden üretilebilirlik, Sömürülebilirlik, Etkilenen kullanıcılar ve Keşfedilebilirlik** anlamına gelir. Bu faktörlerin her biri puanlanır ve sonuç, tanımlanan tehditlerin önceliklendirilmesinde kullanılır.
3. **PASTA** (Saldırı Simülasyonu ve Tehdit Analizi Süreci): Bu, yedi adımlı, **risk merkezli** bir metodolojidir. Güvenlik hedeflerini tanımlama ve belirleme, teknik kapsam oluşturma, uygulama ayrıştırma, tehdit analizi, zayıflık analizi ve risk/triage değerlendirmesini içerir.
4. **Trike**: Bu, varlıkları savunmaya odaklanan risk temelli bir metodolojidir. **Risk yönetimi** perspektifinden başlar ve tehditler ile zayıflıkları bu bağlamda inceler.
-5. **VAST** (Görsel, Çevik ve Basit Tehdit modelleme): Bu yaklaşım, daha erişilebilir olmayı hedefler ve Çevik geliştirme ortamlarına entegre olur. Diğer metodolojilerden unsurlar birleştirir ve **tehditlerin görsel temsillerine** odaklanır.
+5. **VAST** (Görsel, Çevik ve Basit Tehdit Modelleme): Bu yaklaşım, daha erişilebilir olmayı hedefler ve Çevik geliştirme ortamlarına entegre olur. Diğer metodolojilerden unsurlar birleştirir ve **tehditlerin görsel temsillerine** odaklanır.
6. **OCTAVE** (Operasyonel Olarak Kritik Tehdit, Varlık ve Zayıflık Değerlendirmesi): CERT Koordinasyon Merkezi tarafından geliştirilen bu çerçeve, **belirli sistemler veya yazılımlar yerine kurumsal risk değerlendirmesine** yöneliktir.
## Araçlar
@@ -40,7 +40,7 @@ Tehdit modellerinin oluşturulması ve yönetilmesi konusunda **yardımcı** ola
### [SpiderSuite](https://github.com/3nock/SpiderSuite)
-Siber güvenlik profesyonelleri için gelişmiş, çok özellikli, çok platformlu bir GUI web örümceği/kraker. Spider Suite, saldırı yüzeyi haritalama ve analiz için kullanılabilir.
+Siber güvenlik profesyonelleri için gelişmiş, çok özellikli, çok platformlu bir GUI web örümceği/gezgini. Spider Suite, saldırı yüzeyi haritalama ve analiz için kullanılabilir.
**Kullanım**
@@ -54,7 +54,7 @@ Siber güvenlik profesyonelleri için gelişmiş, çok özellikli, çok platform
### [OWASP Threat Dragon](https://github.com/OWASP/threat-dragon/releases)
-OWASP'tan açık kaynak bir proje olan Threat Dragon, sistem diyagramları ile birlikte tehditleri/azaltmaları otomatik olarak oluşturmak için bir kural motoru içeren hem web hem de masaüstü uygulamasıdır.
+OWASP'tan açık kaynak bir proje olan Threat Dragon, sistem diyagramları ile tehditleri/azaltmaları otomatik olarak oluşturmak için bir kural motoru içeren hem web hem de masaüstü uygulamasıdır.
**Kullanım**
@@ -86,7 +86,7 @@ Varlıklar hakkında biraz açıklama:
- Aktör (Bir Kişi, örneğin bir Web Sitesi Ziyaretçisi, Kullanıcı veya Yöneticisi)
- Veri Akış Hattı (Etkileşim Göstergesi)
- Güven Sınırı (Farklı ağ segmentleri veya kapsamları.)
-- Depolama (Verilerin saklandığı yerler, örneğin Veritabanları)
+- Depolama (Verilerin depolandığı yerler, örneğin Veritabanları)
5. Bir Tehdit Oluşturun (Adım 1)
@@ -94,11 +94,11 @@ Varlıklar hakkında biraz açıklama:
-Artık tehdidi oluşturabilirsiniz.
+Şimdi tehdidi oluşturabilirsiniz.
-Aktör Tehditleri ile Süreç Tehditleri arasında bir fark olduğunu unutmayın. Eğer bir tehdidi bir Aktöre eklerseniz, yalnızca "Sahtecilik" ve "Reddetme" seçeneklerini seçebilirsiniz. Ancak örneğimizde bir Süreç varlığına tehdit eklediğimiz için tehdit oluşturma kutusunda bunu göreceğiz:
+Aktör Tehditleri ile Süreç Tehditleri arasında bir fark olduğunu unutmayın. Eğer bir Aktöre tehdit eklerseniz, yalnızca "Sahtecilik" ve "Reddetme" seçeneklerini seçebilirsiniz. Ancak örneğimizde bir Süreç varlığına tehdit eklediğimiz için tehdit oluşturma kutusunda bunu göreceğiz:
@@ -110,6 +110,6 @@ Artık bitmiş modeliniz şöyle görünmelidir. Ve OWASP Threat Dragon ile basi
### [Microsoft Threat Modeling Tool](https://aka.ms/threatmodelingtool)
-Bu, yazılım projelerinin tasarım aşamasında tehditleri bulmaya yardımcı olan Microsoft'tan ücretsiz bir araçtır. STRIDE metodolojisini kullanır ve özellikle Microsoft'un yığınında geliştirme yapanlar için uygundur.
+Bu, yazılım projelerinin tasarım aşamasında tehditleri bulmaya yardımcı olan Microsoft'tan ücretsiz bir araçtır. STRIDE metodolojisini kullanır ve özellikle Microsoft'un yığını üzerinde geliştirme yapanlar için uygundur.
-{{#include /banners/hacktricks-training.md}}
+{{#include ../banners/hacktricks-training.md}}
diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md
index 035499a20..1f7638d03 100644
--- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md
+++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md
@@ -117,7 +117,7 @@ Bu erişimi kimin sahip olduğunu _Sistem Ayarları_ > _Gizlilik ve Güvenlik_ >
### `kTCCServiceAccessibility`
-Süreç, **macOS erişilebilirlik özelliklerini** **istismar** edebilecektir, bu da örneğin tuş vuruşlarını basabilmesi anlamına gelir. Böylece Finder gibi bir uygulamayı kontrol etmek için erişim talep edebilir ve bu izinle diyalogu onaylayabilir.
+Süreç, **macOS erişilebilirlik özelliklerini** **istismar** edebilecektir, bu da örneğin tuş vuruşlarını basabilmesi anlamına gelir. Bu nedenle, Finder gibi bir uygulamayı kontrol etmek için erişim talep edebilir ve bu izinle diyalogu onaylayabilir.
## Medium
@@ -127,7 +127,7 @@ Bu yetki, `mmap()` sistem fonksiyonuna `MAP_JIT` bayrağını geçirerek **yazı
### `com.apple.security.cs.allow-unsigned-executable-memory`
-Bu yetki, **C kodunu geçersiz kılmaya veya yamanmaya** izin verir, uzun süredir kullanılmayan **`NSCreateObjectFileImageFromMemory`** (temelde güvensizdir) veya **DVDPlayback** çerçevesini kullanabilir. Daha fazla bilgi için [**bunu kontrol edin**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-unsigned-executable-memory).
+Bu yetki, **C kodunu geçersiz kılmayı veya yamanmayı** sağlar, uzun süredir kullanılmayan **`NSCreateObjectFileImageFromMemory`** (temelde güvensizdir) veya **DVDPlayback** çerçevesini kullanmayı sağlar. Daha fazla bilgi için [**bunu kontrol edin**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-unsigned-executable-memory).
> [!CAUTION]
> Bu yetkiyi dahil etmek, uygulamanızı bellek-güvensiz kod dillerindeki yaygın güvenlik açıklarına maruz bırakır. Uygulamanızın bu istisnaya ihtiyaç duyup duymadığını dikkatlice değerlendirin.
@@ -160,11 +160,11 @@ Sürecin **tüm TCC izinlerini istemesine** izin verin.
### **`kTCCServicePostEvent`**
-{{#include ../../../banners/hacktricks-training.md}}
+
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/mobile-pentesting/android-app-pentesting/flutter.md b/src/mobile-pentesting/android-app-pentesting/flutter.md
index eca8a47d4..397769bfe 100644
--- a/src/mobile-pentesting/android-app-pentesting/flutter.md
+++ b/src/mobile-pentesting/android-app-pentesting/flutter.md
@@ -3,7 +3,7 @@
{{#include ../../banners/hacktricks-training.md}}
# Flutter
-Flutter, geliştiricilerin tek bir Dart kod tabanı yazmasına olanak tanıyan **Google'ın çoklu platform UI araç takımıdır**; bu kod tabanı, **Engine** (yerel C/C++) tarafından Android ve iOS için platforma özgü makine koduna dönüştürülür. Engine, **Dart VM**, **BoringSSL**, Skia vb. bileşenleri bir araya getirir ve **libflutter.so** (Android) veya **Flutter.framework** (iOS) olarak paylaşılan kütüphane olarak gönderilir. Tüm gerçek ağ iletişimi (DNS, soketler, TLS) **bu kütüphane içinde** gerçekleşir, *normal Java/Kotlin Swift/Obj-C katmanlarında* değil. Bu izole tasarım, normal Java düzeyindeki Frida kancalarının Flutter uygulamalarında başarısız olmasının nedenidir.
+Flutter, geliştiricilerin tek bir Dart kod tabanı yazmasına olanak tanıyan **Google'ın çoklu platform UI araç takımıdır**; bu kod tabanı, **Engine** (yerel C/C++) tarafından Android ve iOS için platforma özgü makine koduna dönüştürülür. Engine, **Dart VM**, **BoringSSL**, Skia vb. bileşenleri bir araya getirir ve **libflutter.so** (Android) veya **Flutter.framework** (iOS) olarak paylaşılan bir kütüphane olarak gönderilir. Tüm gerçek ağ iletişimi (DNS, soketler, TLS) **bu kütüphane içinde** gerçekleşir, *normal Java/Kotlin Swift/Obj-C katmanlarında* değil. Bu izole tasarım, normal Java düzeyindeki Frida kancalarının Flutter uygulamalarında başarısız olmasının nedenidir.
## Flutter'da HTTPS trafiğini yakalamak
@@ -61,17 +61,16 @@ onComplete: function () { console.log("scan done"); }
```bash
frida -U -f com.example.app -l bypass.js
```
-*Taşınma ipuçları*
+*Porting tips*
* **arm64-v8a** veya **armv7** için, Ghidra'dan fonksiyonun ilk ~32 baytını alın, boşlukla ayrılmış bir hex dizesine dönüştürün ve `sig` ile değiştirin.
* **Her Flutter sürümü için bir desen** saklayın, hızlı yeniden kullanım için bir kopya kağıdında depolayın.
### Trafiği proxy'niz üzerinden zorlamak
-Flutter kendisi **cihaz proxy ayarlarını** göz ardı eder. En kolay seçenekler:
+Flutter kendisi **cihaz proxy ayarlarını** **göz ardı eder**. En kolay seçenekler:
* **Android Studio emülatörü:** Ayarlar ▶ Proxy → manuel.
-* **Fiziksel cihaz:** kötü niyetli Wi-Fi AP + DNS sahtekarlığı veya Magisk modülü ile `/etc/hosts` düzenleme.
+* **Fiziksel cihaz:** kötü niyetli Wi-Fi AP + DNS sahteciliği veya Magisk modülü ile `/etc/hosts` düzenleme.
-## Referanslar
+## References
- [https://sensepost.com/blog/2025/intercepting-https-communication-in-flutter-going-full-hardcore-mode-with-frida/](https://sensepost.com/blog/2025/intercepting-https-communication-in-flutter-going-full-hardcore-mode-with-frida/)
-
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md b/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md
index 0b1523bf8..6c549afd7 100644
--- a/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md
+++ b/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md
@@ -4,22 +4,22 @@
## Ana fikir
-**`get_task_allow`** yetkisi ile imzalanmış uygulamalar, üçüncü taraf uygulamaların **`task_for_pid()`** adlı bir fonksiyonu, başlangıç uygulamasının işlem kimliği ile argüman olarak çalıştırmasına izin verir; böylece üzerinde görev portunu alabilir (onu kontrol edebilir ve belleğine erişebilir).
+**`get_task_allow`** yetkisi ile imzalanmış uygulamalar, üçüncü taraf uygulamaların **`task_for_pid()`** adlı bir fonksiyonu, başlangıç uygulamasının işlem kimliği ile argüman olarak çalıştırmasına izin verir; böylece üzerinde kontrol sağlamak ve belleğine erişmek için görev portunu alabilirler.
Ancak, IPA'yı çekip, yetki ile yeniden imzalayıp cihazınıza geri yüklemek o kadar kolay değildir. Bunun nedeni FairPlay korumasıdır. Uygulamanın imzası değiştiğinde, DRM (Dijital Haklar Yönetimi) anahtarı **geçersiz hale gelir ve uygulama çalışmaz**.
-Eski bir jailbreak'li cihazda, IPA'yı yüklemek, **favori aracınızı kullanarak şifre çözmek** (örneğin Iridium veya frida-ios-dump gibi) ve cihazdan geri almak mümkündür. Ancak, mümkünse, şifrelenmemiş IPA için sadece istemci olarak talep edilmesi önerilir.
+Eski bir jailbreak'li cihazda, IPA'yı yüklemek, **favori aracınızı kullanarak şifre çözmek** (örneğin Iridium veya frida-ios-dump gibi) ve cihazdan geri almak mümkündür. Ancak, mümkünse, şifrelenmemiş IPA için sadece istemci olarak hareket etmeniz önerilir.
## Şifrelenmemiş IPA'yı elde etme
-### Apple'dan almak
+### Apple'dan alın
1. Pentest yapmak için uygulamayı iPhone'a yükleyin.
2. macOS'unuzda [Apple Configurator](https://apps.apple.com/au/app/apple-configurator/id1037126344?mt=12) uygulamasını yükleyin ve başlatın.
3. Mac'inizde `Terminal`i açın ve `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps` dizinine gidin. IPA daha sonra bu klasörde görünecektir.
4. iOS cihazınızı görmelisiniz. Üzerine çift tıklayın ve ardından üst menü çubuğundan Ekle + → Uygulamalar'a tıklayın.
5. Ekle'ye tıkladıktan sonra, Configurator IPA'yı Apple'dan indirecek ve cihazınıza yüklemeye çalışacaktır. Daha önce önerimi takip ettiyseniz ve IPA'yı zaten yüklediyseniz, uygulamayı yeniden yüklemenizi isteyen bir istem belirecektir.
-6. IPA, `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps` dizinine indirilmelidir; buradan alabilirsiniz.
+6. IPA, `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps` dizininde indirilmiş olmalıdır; buradan alabilirsiniz.
Bu süreç hakkında daha ayrıntılı bilgi için [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) adresini kontrol edin.
@@ -33,7 +33,7 @@ unzip redacted.ipa -d unzipped
```
`Info.plist` dosyasını minimum desteklenen sürüm için kontrol edin ve cihazınız bu sürümden daha eskiyse, değeri desteklenecek şekilde değiştirin.
-IPA dosyasını zipleyin:
+IPA'yı tekrar zipleyin:
```bash
cd unzipped
zip -r ../no-min-version.ipa *
@@ -47,11 +47,11 @@ Not edin ki, herhangi bir `invalid signature` hatasını önlemek için Cydia'da
Yüklendikten sonra, şifrelenmemiş IPA'yı elde etmek için Cydia'dan **Iridium tweak**'i kullanabilirsiniz.
-### İzinleri yamanla ve yeniden imzala
+### Yetkilendirmeleri Yamanla ve Yeniden İmzala
-`get-task-allow` izni ile uygulamayı yeniden imzalamak için `app-signer`, `codesign` ve `iResign` gibi çeşitli araçlar mevcuttur. `app-signer`, yeniden imzalanacak IPA dosyasını belirtip, **`get-task-allow`** ekleyerek ve kullanılacak sertifika ve dağıtım profili ile çok kolay bir şekilde IPA dosyasını yeniden imzalamaya olanak tanıyan çok kullanıcı dostu bir arayüze sahiptir.
+`get-task-allow` yetkilendirmesi ile uygulamayı yeniden imzalamak için `app-signer`, `codesign` ve `iResign` gibi çeşitli araçlar mevcuttur. `app-signer`, yeniden imzalanacak IPA dosyasını belirtip, **`get-taks-allow`** koyarak ve kullanılacak sertifika ve dağıtım profili ile çok kolay bir şekilde yeniden imzalamaya olanak tanıyan çok kullanıcı dostu bir arayüze sahiptir.
-Sertifika ve imzalama profilleri ile ilgili olarak, Apple Xcode aracılığıyla tüm hesaplar için **ücretsiz geliştirici imzalama profilleri** sunmaktadır. Sadece bir uygulama oluşturun ve bir tane yapılandırın. Ardından, `Ayarlar` → `Gizlilik ve Güvenlik` yolunu izleyerek **iPhone'un geliştirici uygulamalarını güvenilir hale getirmesini** sağlayın ve `Geliştirici Modu`na tıklayın.
+Sertifika ve imzalama profilleri ile ilgili olarak, Apple, Xcode aracılığıyla tüm hesaplar için **ücretsiz geliştirici imzalama profilleri** sunmaktadır. Sadece bir uygulama oluşturun ve bir tane yapılandırın. Ardından, `Ayarlar` → `Gizlilik ve Güvenlik` bölümüne giderek **iPhone'un geliştirici uygulamalarını güvenilir hale getirmesini** sağlayın ve `Geliştirici Modu`na tıklayın.
Yeniden imzalanmış IPA ile, onu cihazda kurup pentest yapmak için zamanı geldi:
```bash
@@ -61,7 +61,7 @@ ideviceinstaller -i resigned.ipa -w
### Geliştirici Modunu Etkinleştir (iOS 16+)
-iOS 16 ile Apple **Geliştirici Modu**nu tanıttı: `get_task_allow` taşıyan *veya* bir geliştirme sertifikası ile imzalanmış herhangi bir ikili, cihazda Geliştirici Modu etkinleştirilene kadar başlatılmayı reddedecektir. Bu bayrak açık olmadıkça Frida/LLDB'yi de ekleyemezsiniz.
+iOS 16 ile Apple **Geliştirici Modu**nu tanıttı: `get_task_allow` taşıyan *veya* bir geliştirme sertifikası ile imzalanmış herhangi bir ikili, cihazda Geliştirici Modu etkinleştirilene kadar başlatılmayı reddedecektir. Bu bayrak açık değilse Frida/LLDB'yi de ekleyemezsiniz.
1. **Herhangi** bir geliştirici imzalı IPA'yı telefona yükleyin veya gönderin.
2. **Ayarlar → Gizlilik ve Güvenlik → Geliştirici Modu**'na gidin ve açın.
@@ -75,8 +75,8 @@ Artık jailbreak olmadan yan yükleme yapmak ve yeniden imzalanmış IP'leri gü
| Araç | Gereksinimler | Güçlü Yönler | Sınırlamalar |
|------|---------------|--------------|--------------|
-| **AltStore 2 / SideStore** | IPA'yı her 7 günde ücretsiz bir geliştirici profili ile yeniden imzalayan macOS/Windows/Linux eşlikçisi | Wi-Fi üzerinden otomatik yeniden yükleme, iOS 17'ye kadar çalışır | Aynı ağda bilgisayar gerektirir, Apple tarafından 3 uygulama limiti uygulanmıştır |
-| **TrollStore 1/2** | CoreTrust hatasına karşı savunmasız iOS 14 – 15.4.1 cihazı | *Kalıcı* imzalama (7 günlük limit yok); kurulduktan sonra bilgisayar gerekmez | iOS 15.5+ üzerinde desteklenmiyor (hata yamanmış) |
+| **AltStore 2 / SideStore** | IPA'yı her 7 günde ücretsiz bir geliştirici profili ile yeniden imzalayan macOS/Windows/Linux eşlikçisi | Wi-Fi üzerinden otomatik yeniden yükleme, iOS 17'ye kadar çalışır | Aynı ağda bilgisayar gerektirir, Apple tarafından 3 uygulama limiti uygulanır |
+| **TrollStore 1/2** | CoreTrust hatasına karşı savunmasız iOS 14 – 15.4.1'deki cihaz | *Kalıcı* imzalama (7 günlük limit yok); kurulduktan sonra bilgisayar gerekmez | iOS 15.5+ üzerinde desteklenmiyor (hata yamanmış) |
Mevcut iOS sürümlerinde rutin pentestler için Alt/Side-Store genellikle en pratik seçimdir.
@@ -94,7 +94,7 @@ Son Frida sürümleri (>=16) otomatik olarak işaretçi kimlik doğrulamasını
### Jailbreak olmadan otomatik dinamik analiz MobSF ile
-[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/) gerçek bir cihazda dev-imzalı bir IPA'yı aynı teknikle (`get_task_allow`) enstrümante edebilir ve dosya sistemi tarayıcısı, trafik yakalama ve Frida konsolu ile bir web UI sağlar【turn6view0†L2-L3】. En hızlı yol, MobSF'yi Docker'da çalıştırmak ve ardından iPhone'unuzu USB ile bağlamaktır:
+[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/) gerçek bir cihazda dev-imzalı bir IPA'yı aynı teknikle (`get_task_allow`) enstrümante edebilir ve dosya sistemi tarayıcısı, trafik yakalama ve Frida konsolu ile bir web UI sağlar【】. En hızlı yol, MobSF'yi Docker'da çalıştırmak ve ardından iPhone'unuzu USB ile bağlamaktır:
```bash
docker pull opensecurity/mobile-security-framework-mobsf:latest
docker run -p 8000:8000 --privileged \
@@ -104,9 +104,9 @@ opensecurity/mobile-security-framework-mobsf:latest
```
MobSF, ikili dosyayı otomatik olarak dağıtacak, uygulama sandbox'ında bir Frida sunucusu etkinleştirecek ve etkileşimli bir rapor oluşturacaktır.
-### iOS 17 & Kilitlenme Modu uyarıları
+### iOS 17 & Kilit Modu uyarıları
-* **Kilitlenme Modu** (Ayarlar → Gizlilik & Güvenlik), dinamik bağlayıcının imzasız veya harici olarak imzalanmış dinamik kütüphaneleri yüklemesini engeller. Bu modun etkin olabileceği cihazları test ederken, **devre dışı** olduğundan emin olun, aksi takdirde Frida/objection oturumlarınız hemen sona erecektir.
+* **Kilit Modu** (Ayarlar → Gizlilik & Güvenlik), dinamik bağlayıcının imzasız veya harici olarak imzalanmış dinamik kütüphaneleri yüklemesini engeller. Bu modun etkin olabileceği cihazları test ederken, **devre dışı** olduğundan emin olun, aksi takdirde Frida/objection oturumlarınız hemen sonlanacaktır.
* Pointer Authentication (PAC), A12+ cihazlarda sistem genelinde uygulanmaktadır. Frida ≥16, PAC stripping'i şeffaf bir şekilde yönetir — yeni bir ana iOS sürümü çıktığında *frida-server* ve Python/CLI araç zincirinin güncel olduğundan emin olun.
## Referanslar
diff --git a/src/network-services-pentesting/1414-pentesting-ibmmq.md b/src/network-services-pentesting/1414-pentesting-ibmmq.md
index a833d6bc1..8fbadead4 100644
--- a/src/network-services-pentesting/1414-pentesting-ibmmq.md
+++ b/src/network-services-pentesting/1414-pentesting-ibmmq.md
@@ -4,7 +4,7 @@
## Temel bilgiler
-IBM MQ, mesaj kuyruklarını yönetmek için bir IBM teknolojisidir. Diğer **mesaj aracısı** teknolojileri gibi, üreticiler ve tüketiciler arasında bilgiyi almak, depolamak, işlemek ve sınıflandırmak için tasarlanmıştır.
+IBM MQ, mesaj kuyruklarını yönetmek için bir IBM teknolojisidir. Diğer **mesaj aracısı** teknolojileri gibi, üreticiler ve tüketiciler arasında bilgileri almak, depolamak, işlemek ve sınıflandırmak için tasarlanmıştır.
Varsayılan olarak, **IBM MQ TCP port 1414'ü açar**. Bazen, HTTP REST API **9443** portunda açılabilir. Metriğe (Prometheus) de TCP port **9157** üzerinden erişilebilir.
@@ -24,7 +24,7 @@ Daha manuel bir yaklaşım için, **[pymqi](https://github.com/dsuch/pymqi)** Py
1. [https://login.ibm.com/](https://login.ibm.com/) adresinde bir hesap (IBMid) oluşturun.
2. [https://www.ibm.com/support/fixcentral/swg/selectFixes?parent=ibm%7EWebSphere&product=ibm/WebSphere/WebSphere+MQ&release=9.0.0.4&platform=All&function=fixId&fixids=9.0.0.4-IBM-MQC-\*,9.0.0.4-IBM-MQ-Install-Java-All,9.0.0.4-IBM-MQ-Java-InstallRA&useReleaseAsTarget=true&includeSupersedes=0&source=fc](https://www.ibm.com/support/fixcentral/swg/selectFixes?parent=ibm%7EWebSphere&product=ibm/WebSphere/WebSphere+MQ&release=9.0.0.4&platform=All&function=fixId&fixids=9.0.0.4-IBM-MQC-*,9.0.0.4-IBM-MQ-Install-Java-All,9.0.0.4-IBM-MQ-Java-InstallRA&useReleaseAsTarget=true&includeSupersedes=0&source=fc) adresinden IBM MQ kütüphanelerini indirin. Linux x86_64 için **9.0.0.4-IBM-MQC-LinuxX64.tar.gz**'dir.
-3. Decompress (`tar xvzf 9.0.0.4-IBM-MQC-LinuxX64.tar.gz`).
+3. Sıkıştırmayı açın (`tar xvzf 9.0.0.4-IBM-MQC-LinuxX64.tar.gz`).
4. Lisans şartlarını kabul etmek için `sudo ./mqlicense.sh` komutunu çalıştırın.
> Eğer Kali Linux kullanıyorsanız, `mqlicense.sh` dosyasını değiştirin: aşağıdaki satırları kaldırın/yorumlayın (105-110. satırlar arasında):
@@ -32,8 +32,8 @@ Daha manuel bir yaklaşım için, **[pymqi](https://github.com/dsuch/pymqi)** Py
> ```bash
> if [ ${BUILD_PLATFORM} != `uname`_`uname ${UNAME_FLAG}` ]
> then
-> echo "HATA: Bu paket bu sistemle uyumsuz"
-> echo " Bu paket ${BUILD_PLATFORM} için oluşturuldu"
+> echo "ERROR: This package is incompatible with this system"
+> echo " This package was built for ${BUILD_PLATFORM}"
> exit 1
> fi
> ```
@@ -66,7 +66,7 @@ Sonrasında, `punch-q` komutuyla kullanılabilir.
### Queue Manager
-Bazen, Queue Manager adını almak için herhangi bir koruma yoktur:
+Bazen, Queue Manager adını elde etmeye karşı bir koruma yoktur:
```bash
❯ sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 discover name
Queue Manager name: MYQUEUEMGR
@@ -80,7 +80,7 @@ Queue Manager name: MYQUEUEMGR
"SYSTEM.AUTO.SVRCONN" might exist, but user was not authorised.
"SYSTEM.DEF.SVRCONN" might exist, but user was not authorised.
```
-Bazı IBM MQ örneklerinin **kimlik doğrulaması yapılmamış** MQ isteklerini kabul ettiği durumlar vardır, bu nedenle `--username / --password` gerekli değildir. Elbette, erişim hakları da değişkenlik gösterebilir.
+Bazı IBM MQ örneklerinin **kimlik doğrulaması yapılmamış** MQ isteklerini kabul ettiği durumlar vardır, bu nedenle `--username / --password` gerekli değildir. Elbette, erişim hakları da değişiklik gösterebilir.
Bir kanal adını (burada: `DEV.ADMIN.SVRCONN`) aldığımız anda, diğer tüm kanalları listeleyebiliriz.
@@ -170,7 +170,7 @@ Showing queues with prefix: "*"...
### Dump messages
-Queue'ları/kanalları hedef alarak onlardan mesajları dinleyebilir / dökebilirsiniz (yıkıcı olmayan işlem). _Örnekler:_
+Queue(lar)/channel(lar) hedef alarak onlardan mesajları dinleyebilir / dökebilirsiniz (yıkıcı olmayan işlem). _Örnekler:_
```bash
❯ sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 --username admin --password passw0rd --channel DEV.ADMIN.SVRCONN messages sniff
```
@@ -178,23 +178,23 @@ Queue'ları/kanalları hedef alarak onlardan mesajları dinleyebilir / dökebili
```bash
❯ sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 --username admin --password passw0rd --channel DEV.ADMIN.SVRCONN messages dump
```
-**Tespit edilen tüm kuyruklar üzerinde iterasyona girmekten çekinmeyin.**
+**Tespit edilen tüm kuyruklar üzerinde iterasyona geçmekten çekinmeyin.**
### Kod yürütme
> Devam etmeden önce bazı detaylar: IBM MQ, birden fazla yol ile kontrol edilebilir: MQSC, PCF, Kontrol Komutu. Genel listeler [IBM MQ belgelerinde](https://www.ibm.com/docs/en/ibm-mq/9.2?topic=reference-command-sets-comparison) bulunabilir.
-> [**PCF**](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=commands-introduction-mq-programmable-command-formats) (**_Programlanabilir Komut Formatları_**) ile uzaktan örnekle etkileşimde bulunmaya odaklanıyoruz. **punch-q** ve ayrıca **pymqi** PCF etkileşimlerine dayanmaktadır.
+> [**PCF**](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=commands-introduction-mq-programmable-command-formats) (**_Programlanabilir Komut Formatları_**) ile uzaktan etkileşimde bulunmak için odaklandığımız konudur. **punch-q** ve ayrıca **pymqi** PCF etkileşimlerine dayanmaktadır.
>
> PCF komutlarının bir listesini bulabilirsiniz:
>
> - [PCF belgelerinden](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=reference-definitions-programmable-command-formats), ve
> - [sabitlerden](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=constants-mqcmd-command-codes).
>
-> İlginç bir komut `MQCMD_CREATE_SERVICE` ve belgeleri [burada](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=formats-change-copy-create-service-multiplatforms) mevcuttur. Bir `StartCommand` argümanı alır ve bu, örneğin, örnekteki gibi yerel bir programa işaret eder: `/bin/sh`.
+> İlginç bir komut `MQCMD_CREATE_SERVICE` ve belgeleri [burada](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=formats-change-copy-create-service-multiplatforms) mevcuttur. Bir `StartCommand` argümanı alır ve bu, örneğin, örneğin `/bin/sh` gibi bir yerel programa işaret eder.
>
> Belgelerde komutla ilgili bir uyarı da bulunmaktadır: _"Dikkat: Bu komut, bir kullanıcının mqm yetkisi ile rastgele bir komut çalıştırmasına izin verir. Bu komutu kullanma hakkı verilirse, kötü niyetli veya dikkatsiz bir kullanıcı, sistemlerinize veya verilerinize zarar verecek bir hizmet tanımlayabilir; örneğin, gerekli dosyaları silerek."_
>
-> _Not: her zaman IBM MQ belgelerine (Yönetim Referansı) göre, hizmet oluşturma için eşdeğer MQSC komutunu çalıştırmak üzere `/admin/action/qmgr/{qmgrName}/mqsc` adresinde bir HTTP uç noktası da bulunmaktadır (`DEFINE SERVICE`). Bu konu burada henüz ele alınmamıştır._
+> _Not: Her zaman IBM MQ belgelerine (Yönetim Referansı) göre, hizmet oluşturma için eşdeğer MQSC komutunu çalıştırmak üzere `/admin/action/qmgr/{qmgrName}/mqsc` adresinde bir HTTP uç noktası da bulunmaktadır (`DEFINE SERVICE`). Bu konu burada henüz ele alınmamıştır._
PCF ile uzaktan program yürütme için hizmet oluşturma / silme **punch-q** ile yapılabilir:
@@ -223,7 +223,7 @@ Giving the service 0 second(s) to live...
Cleaning up service...
Done
```
-**Programın başlatılmasının asenkron olduğunu unutmayın. Bu nedenle, istismarı kullanmak için ikinci bir öğeye ihtiyacınız var** **_(ters shell için dinleyici, farklı hizmette dosya oluşturma, ağ üzerinden veri sızdırma ...)_**
+**Programın başlatılmasının asenkron olduğunu unutmayın. Bu nedenle, istismarı kullanmak için ikinci bir öğeye ihtiyacınız var** **_(ters shell için dinleyici, farklı bir hizmette dosya oluşturma, ağ üzerinden veri sızdırma ...)_**
**Örnek 2**
@@ -244,7 +244,7 @@ Perl için:
```
### Özel PCF
-IBM MQ belgelerine göz atabilir ve **punch-q**'da uygulanmamış belirli PCF komutlarını test etmek için doğrudan **pymqi** python kütüphanesini kullanabilirsiniz.
+IBM MQ belgelerine göz atabilir ve **punch-q**'da uygulanmamış belirli bir PCF komutunu test etmek için doğrudan **pymqi** python kütüphanesini kullanabilirsiniz.
**Örnek:**
```python
@@ -276,7 +276,7 @@ qmgr.disconnect()
```
Eğer sabit isimlerini bulamıyorsanız, [IBM MQ belgelerine](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=constants-mqca-character-attribute-selectors) başvurabilirsiniz.
-> _[`MQCMD_REFRESH_CLUSTER`](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=formats-mqcmd-refresh-cluster-refresh-cluster) (Ondalık = 73) için örnek. `MQCA_CLUSTER_NAME` (Ondalık = 2029) parametresine ihtiyaç duyar, bu `_` olabilir (Dok: ):\*
+> _[`MQCMD_REFRESH_CLUSTER`](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=formats-mqcmd-refresh-cluster-refresh-cluster) (Ondalık = 73) için örnek. `_` (Dok: ):\* olan `MQCA_CLUSTER_NAME` parametresine ihtiyaç duyar (Ondalık = 2029):
>
> ```python
> import pymqi
@@ -313,7 +313,7 @@ IBM MQ davranışını ve istismarlarını test etmek istiyorsanız, Docker taba
sudo docker pull icr.io/ibm-messaging/mq:9.3.2.0-r2
sudo docker run -e LICENSE=accept -e MQ_QMGR_NAME=MYQUEUEMGR -p1414:1414 -p9157:9157 -p9443:9443 --name testing-ibmmq icr.io/ibm-messaging/mq:9.3.2.0-r2
```
-Varsayılan olarak, kimlik doğrulama etkinleştirilmiştir, kullanıcı adı `admin` ve şifre `passw0rd` (Ortam değişkeni `MQ_ADMIN_PASSWORD`).
+Varsayılan olarak, kimlik doğrulama etkinleştirilmiştir, kullanıcı adı `admin` ve şifre `passw0rd` (Çevre değişkeni `MQ_ADMIN_PASSWORD`).
Burada, kuyruk yöneticisi adı `MYQUEUEMGR` (değişken `MQ_QMGR_NAME`) olarak ayarlanmıştır.
IBM MQ'nun çalışır durumda olması ve portlarının açık olması gerekir:
@@ -322,12 +322,12 @@ IBM MQ'nun çalışır durumda olması ve portlarının açık olması gerekir:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
58ead165e2fd icr.io/ibm-messaging/mq:9.3.2.0-r2 "runmqdevserver" 3 seconds ago Up 3 seconds 0.0.0.0:1414->1414/tcp, 0.0.0.0:9157->9157/tcp, 0.0.0.0:9443->9443/tcp testing-ibmmq
```
-> IBM MQ docker görüntülerinin eski versiyonu şurada bulunmaktadır: https://hub.docker.com/r/ibmcom/mq/.
+> IBM MQ docker görüntülerinin eski versiyonları şurada bulunmaktadır: https://hub.docker.com/r/ibmcom/mq/.
-## References
+## Referanslar
-- [mgeeky's gist - "Practical IBM MQ Penetration Testing notes"](https://gist.github.com/mgeeky/2efcd86c62f0fb3f463638911a3e89ec)
-- [MQ Jumping - DEFCON 15](https://defcon.org/images/defcon-15/dc15-presentations/dc-15-ruks.pdf)
-- [IBM MQ documentation](https://www.ibm.com/docs/en/ibm-mq)
+- [mgeeky's gist - "Pratik IBM MQ Penetrasyon Testi notları"](https://gist.github.com/mgeeky/2efcd86c62f0fb3f463638911a3e89ec)
+- [MQ Atlama - DEFCON 15](https://defcon.org/images/defcon-15/dc15-presentations/dc-15-ruks.pdf)
+- [IBM MQ belgeleri](https://www.ibm.com/docs/en/ibm-mq)
-{{#include /banners/hacktricks-training.md}}
+{{#include ../banners/hacktricks-training.md}}
diff --git a/src/network-services-pentesting/pentesting-ntp.md b/src/network-services-pentesting/pentesting-ntp.md
index d892ec159..3b6550ac2 100644
--- a/src/network-services-pentesting/pentesting-ntp.md
+++ b/src/network-services-pentesting/pentesting-ntp.md
@@ -4,7 +4,7 @@
## Temel Bilgiler
-**Ağ Zaman Protokolü (NTP)**, değişken gecikme sürelerine sahip ağlar üzerinden bilgisayarların ve ağ cihazlarının saatlerini doğru bir şekilde senkronize etmelerini sağlar. IT operasyonları, güvenlik ve günlükleme için kesin zaman tutmanın sağlanması açısından hayati öneme sahiptir. Zaman, neredeyse her kimlik doğrulama, kripto-protokol ve adli süreçte kullanıldığından, **NTP'yi etkileyebilen bir saldırgan genellikle güvenlik kontrollerini atlayabilir veya saldırıları araştırmayı zorlaştırabilir.**
+**Ağ Zaman Protokolü (NTP)**, değişken gecikme sürelerine sahip ağlar üzerinden bilgisayarların ve ağ cihazlarının saatlerini doğru bir şekilde senkronize etmelerini sağlar. IT operasyonları, güvenlik ve günlükleme için kesin zaman tutmanın sürdürülmesi açısından hayati öneme sahiptir. Zaman, neredeyse her kimlik doğrulama, kripto-protokol ve adli süreçte kullanıldığından, **NTP'yi etkileyebilen bir saldırgan genellikle güvenlik kontrollerini atlayabilir veya saldırıları araştırmayı zorlaştırabilir.**
### Özet & Güvenlik İpuçları
@@ -61,7 +61,7 @@ nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 1
# Explicit monlist check
nmap -sU -p123 --script ntp-monlist
```
-### Kitle/İnternet taraması
+### Kütle/İnternet taraması
```bash
# Check if MONLIST is enabled (zgrab2 module)
zgrab2 ntp --monlist --timeout 3 --output-file monlist.json -f "zmap_results.csv"
@@ -80,10 +80,10 @@ zgrab2 ntp --monlist --timeout 3 --output-file monlist.json -f "zmap_results.csv
| Yıl | CVE | Bileşen | Etki |
|------|-----|-----------|--------|
-| 2023 | **CVE-2023-26551→26555** | ntp 4.2.8p15 (libntp *mstolfp*, *praecis_parse*) | **ntpq** yanıtları aracılığıyla erişilebilen çoklu sınır dışı yazmalar. **4.2.8p16**'da yamanmış, güncelleyin veya düzeltmeleri geri taşıyın. |
+| 2023 | **CVE-2023-26551→26555** | ntp 4.2.8p15 (libntp *mstolfp*, *praecis_parse*) | **ntpq** yanıtları aracılığıyla erişilebilen çoklu sınır dışı yazmaları. **4.2.8p16**'da yamanmış, güncelleme veya geri portlama düzeltmeleri yapılmalıdır. |
| 2023 | **CVE-2023-33192** | **ntpd-rs** (Rust uygulaması) | Bozuk **NTS** çerezi, v0.3.3'ten önce uzaktan **DoS**'ye neden olur – NTS **devre dışı** olsa bile 123 numaralı portu etkiler. |
| 2024 | dağıtım güncellemeleri | **chrony 4.4 / 4.5** – birkaç güvenlik güçlendirmesi ve NTS-KE düzeltmesi (örn. SUSE-RU-2024:2022) |
-| 2024 | Kayıt DDoS | Cloudflare, **5.6 Tbps UDP yansıma** saldırısı rapor ediyor (NTP kullanılan protokoller arasında). İnternete açık sunucularda *monitor* ve *monlist*'i devre dışı bırakın. |
+| 2024 | Kayıt DDoS | Cloudflare, **5.6 Tbps UDP yansıma** saldırısı bildirmektedir (NTP kullanılan protokoller arasında). İnternete açık sunucularda *monitor* ve *monlist*'i devre dışı bırakın. |
> **Sömürü kitleri**: 2023 ntpq OOB-yazma serisi için kanıt konsepti yükleri GitHub'da mevcuttur (Meinberg yazısına bakın) ve sistem yöneticilerinin istemci tarafında oltalama için silahlandırılabilir.
@@ -102,7 +102,7 @@ Adım adım bir inceleme için Cloudflare’ın öğrenim merkezi makalesine bak
### 2. Zaman Kaydırma / Gecikme saldırıları (Khronos / Chronos araştırması)
-Kimlik doğrulama ile bile, bir yol üzerindeki saldırgan, paketleri düşürerek/geciktirerek istemci saatini sessizce **kaydırabilir**. IETF **Khronos (eski adıyla Chronos) taslağı**, arka planda çeşitli sunucuları sorgulamayı ve sonucu kontrol ederek > 𝚡 ms kaymayı tespit etmeyi önerir. Modern chrony (4.4+) zaten benzer bir kontrol filtresi (``maxdistance`` / ``maxjitter``) uygular.
+Kimlik doğrulama ile bile, bir yol üzerindeki saldırgan, paketleri düşürerek/geciktirerek istemci saatini sessizce **kaydırabilir**. IETF **Khronos (eski adıyla Chronos) taslağı**, arka planda çeşitli sunucuları sorgulamayı ve sonucu kontrol ederek > 𝚡 ms kaymayı tespit etmeyi önermektedir. Modern chrony (4.4+) zaten benzer bir kontrol filtresi (``maxdistance`` / ``maxjitter``) uygulamaktadır.
### 3. NTS kötüye kullanımı & 4460/tcp maruziyeti
@@ -119,13 +119,13 @@ Kendinden imzalı veya süresi dolmuş sertifikaları ve zayıf şifreleme takı
---
## Güçlendirme / En İyi Güncel Uygulama (BCP-233 / RFC 8633)
-*Operatörler ŞUNLAR yapmalıdır:*
+*Operatörler ŞUNLARı yapmalıdır:*
1. Tek bir kaynağın zehirlenmesini önlemek için **≥ 4** bağımsız, çeşitli zaman kaynakları (kamusal havuzlar, GPS, PTP-köprüleri) kullanın.
2. Kötüye kullanan istemcilerin tam yanıtlar yerine **Kiss-o'-Death** hız sınırlama paketleri alması için ``kod`` ve ``limited``/``nomodify`` kısıtlamalarını etkinleştirin.
-3. **Panik** olayları veya 1000 s'den fazla adım ayarlamaları için daemon günlüklerini izleyin. (RFC 8633 §5.3'e göre saldırı imzaları.)
-4. Leap-second kesintilerini önlemek için **leap-smear** düşünün, ancak *tüm* aşağı akış istemcilerinin aynı smear penceresini kullandığından emin olun.
-5. Leap-second bayraklarının kaçırılmaması için sorgulamayı ≤24 saat tutun.
+3. **Panik** olayları veya 1000 s'den büyük adım ayarlamaları için daemon günlüklerini izleyin. (RFC 8633 §5.3'e göre saldırı imzaları.)
+4. Leap-second kesintilerini önlemek için **leap-smear**'ı düşünün, ancak *tüm* aşağı akış istemcilerinin aynı smear penceresini kullandığından emin olun.
+5. Leap-second bayraklarının kaçırılmaması için anketi ≤24 saat tutun.
Kapsamlı bir kontrol listesi için RFC 8633'e bakın.
@@ -142,7 +142,7 @@ port:4460 "ntske" # NTS-KE
| Araç | Amaç | Örnek |
|------|---------|---------|
| ``ntpwn`` | monlist & peers sorgularını yaymak için script-kiddie sarmalayıcı | ``python ntpwn.py --monlist targets.txt`` |
-| **zgrab2 ntp** | Toplu tarama / monlist bayrağını içeren JSON çıktısı | Yukarıdaki komuta bakın |
+| **zgrab2 ntp** | Toplu tarama / monlist bayrağı içeren JSON çıktısı | Yukarıdaki komuta bakın |
| ``chronyd`` ile ``allow`` | Pentest laboratuvarında sahte NTP sunucusu çalıştırma | ``chronyd -q 'server 127.127.1.0 iburst'`` |
| ``BetterCap`` | Wi-Fi'de zaman kaydırma MITM için NTP paketleri enjekte etme | ``set arp.spoof.targets ; set ntp.time.delta 30s; arp.spoof on`` |
@@ -179,4 +179,4 @@ Command: nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or bru
- Khronos/Chronos taslağı (zaman kaydırma azaltma)
- chronyc kılavuzu/uzaktan izleme için örnekler
- zgrab2 ntp modülü belgeleri
-{{#include /banners/hacktricks-training.md}}
+{{#include ../banners/hacktricks-training.md}}
diff --git a/src/network-services-pentesting/pentesting-web/angular.md b/src/network-services-pentesting/pentesting-web/angular.md
index b91df394c..2ce4642f2 100644
--- a/src/network-services-pentesting/pentesting-web/angular.md
+++ b/src/network-services-pentesting/pentesting-web/angular.md
@@ -1,12 +1,12 @@
# Angular
-{{#include /banners/hacktricks-training.md}}
+{{#include ../../banners/hacktricks-training.md}}
## Kontrol Listesi
Kontrol Listesi [buradan](https://lsgeurope.com/post/angular-security-checklist).
-* [ ] Angular, istemci tarafı bir çerçeve olarak kabul edilir ve sunucu tarafı koruması sağlaması beklenmez
+* [ ] Angular, istemci tarafı bir framework olarak kabul edilir ve sunucu tarafı koruması sağlaması beklenmez
* [ ] Proje yapılandırmasında scriptler için sourcemap devre dışı bırakılmıştır
* [ ] Güvenilmeyen kullanıcı girişi, şablonlarda kullanılmadan önce her zaman interpolasyon veya sanitizasyon işlemine tabi tutulur
* [ ] Kullanıcının sunucu tarafı veya istemci tarafı şablonları üzerinde kontrolü yoktur
@@ -16,13 +16,13 @@ Kontrol Listesi [buradan](https://lsgeurope.com/post/angular-security-checklist)
## Angular Nedir
-Angular, **güçlü** ve **açık kaynak** bir ön uç çerçevesidir ve **Google** tarafından bakım yapılmaktadır. Kod okunabilirliğini ve hata ayıklamayı artırmak için **TypeScript** kullanır. Güçlü güvenlik mekanizmaları ile Angular, **XSS** ve **açık yönlendirmeler** gibi yaygın istemci tarafı güvenlik açıklarını önler. Ayrıca **sunucu tarafında** da kullanılabilir, bu nedenle güvenlik dikkate alınması gereken önemli bir konudur.
+Angular, **güçlü** ve **açık kaynak** bir ön uç framework'tür ve **Google** tarafından bakım yapılmaktadır. Kod okunabilirliğini ve hata ayıklamayı artırmak için **TypeScript** kullanır. Güçlü güvenlik mekanizmaları ile Angular, **XSS** ve **açık yönlendirmeler** gibi yaygın istemci tarafı güvenlik açıklarını önler. Ayrıca **sunucu tarafında** da kullanılabilir, bu nedenle güvenlik dikkate alınması gereken önemli bir konudur **her iki açıdan**.
-## Çerçeve Mimarisi
+## Framework mimarisi
Angular temellerini daha iyi anlamak için, temel kavramlarına göz atalım.
-Ortak bir Angular projesi genellikle şöyle görünür:
+Tipik bir Angular projesi genellikle şöyle görünür:
```bash
my-workspace/
├── ... #workspace-wide configuration files
@@ -43,7 +43,7 @@ my-workspace/
```
Dokümana göre, her Angular uygulaması en az bir bileşene, DOM ile bir bileşen hiyerarisi bağlayan kök bileşen (`AppComponent`) sahiptir. Her bileşen, uygulama verilerini ve mantığını içeren bir sınıf tanımlar ve hedef ortamda görüntülenecek bir görünümü tanımlayan bir HTML şablonuyla ilişkilendirilir. `@Component()` dekoratörü, hemen altındaki sınıfı bir bileşen olarak tanımlar ve şablonu ve ilgili bileşen özel meta verilerini sağlar. `AppComponent`, `app.component.ts` dosyasında tanımlanmıştır.
-Angular NgModules, bir uygulama alanına, bir iş akışına veya yakından ilişkili bir yetenekler setine adanmış bir bileşen seti için bir derleme bağlamı bildirir. Her Angular uygulamasının, uygulamayı başlatan bootstrap mekanizmasını sağlayan kök modülü, geleneksel olarak `AppModule` olarak adlandırılır. Bir uygulama genellikle birçok işlevsel modül içerir. `AppModule`, `app.module.ts` dosyasında tanımlanmıştır.
+Angular NgModules, bir uygulama alanına, bir iş akışına veya yakından ilişkili bir yetenekler setine adanmış bir bileşen seti için bir derleme bağlamı bildirir. Her Angular uygulamasının, uygulamayı başlatan bootstrap mekanizmasını sağlayan kök modülü vardır ve bu genellikle `AppModule` olarak adlandırılır. Bir uygulama genellikle birçok işlevsel modül içerir. `AppModule`, `app.module.ts` dosyasında tanımlanmıştır.
Angular `Router` NgModule, uygulamanızdaki farklı uygulama durumları ve görünüm hiyerarileri arasında bir navigasyon yolu tanımlamanıza olanak tanıyan bir hizmet sağlar. `RouterModule`, `app-routing.module.ts` dosyasında tanımlanmıştır.
@@ -66,7 +66,7 @@ Ayrıca, bir Angular projesine ait derlenmiş bir JavaScript dosyası, tarayıc
## Veri bağlama
-Bağlama, bir bileşen ile ilgili görünümü arasındaki iletişim sürecini ifade eder. Angular çerçevesine veri aktarmak için kullanılır. Veriler, olaylar, interpolasyon, özellikler veya iki yönlü bağlama mekanizması gibi çeşitli yollarla aktarılabilir. Ayrıca, veriler, ilgili bileşenler (ebeveyn-çocuk ilişkisi) ve iki alakasız bileşen arasında Service özelliği kullanılarak da paylaşılabilir.
+Bağlama, bir bileşen ile ilgili görünümü arasındaki iletişim sürecini ifade eder. Angular çerçevesine veri aktarmak için kullanılır. Veriler, olaylar, interpolasyon, özellikler veya iki yönlü bağlama mekanizması gibi çeşitli yollarla iletilebilir. Ayrıca, veriler, ilgili bileşenler (ebeveyn-çocuk ilişkisi) ve iki alakasız bileşen arasında Service özelliği kullanılarak da paylaşılabilir.
Bağlamayı veri akışına göre sınıflandırabiliriz:
@@ -116,7 +116,7 @@ Sonuç: `