Herkese merhaba TurkHackTeam üyeleri,
Ben Bugs Bunny

Temel Statik Analiz - C Keylogger
Keyloggerimizi packing işlemi yapmadan önce taratalım.

12/37 gibi bir sonuç aldık artık packing işlemini yapabiliriz.
Ben packing işlemini upx ile yapacağım siz isterseniz farklı bir packers kullanabilirsiniz.
UPX, yazılımdaki tüm register keys?i yani push all registers yapıp hafızaya atar ardından sahte bir giriş noktası, entry point oluşturarak işleyişi bozma mantığıyla çalışır.



Packing işlemimiz tıkladığımız anda yapılıyor, Detect it easy(die) veya Exeinfo ile bunu görebiliriz.
Şimdi ise packing işlemi sonrası dosyamızı taratalım.

Bu da packing işlemi yaptıktan sonraki hali, 6/37 sonucunu bize verdi.
Statick Analysis bölümünden zararlımız hakkında bilgi toplayabiliriz.



Zararlımız hakkında ****data gibi bilgileri görebiliyoruz. Burada ufak bir parantez açıp bazı kısımlara değinelim. PE başlığı program tarafından tutulan kütüphane ve fonksiyon bilgilerini saklar. PE birçok bölüme ayrılır. (.text, .rdata .data, .rsrc vb.) Burada upx ile pack edilmiş zararlımızı incelediğimiz zaman PE sections alanında upx0, upx1, upx2 yer aldığını görüyoruz. Bu da executable?ın upx ile packlendiğinin bir kanıtıdır. Aynı zamanda uygulamanın import ettiği DLL dosyalarını da görmekteyiz. Burada ?ws2_32.dll? dosyasının import edildiğini görüyoruz. Bu DLL dosyası ağ üzerinden bağlantı açmak için kullanılır. Tıpkı ?wsock32.dll? dosyasında olduğu gibi.
Artık unpack işlemine geçebiliriz, Detect it easy(die) ve Exeinfo?dan gördüğümüz üzere zararlımız upx ile packlenmiş.


Unpack yapacağımız dosyayı seçip devam edelim.

Unpack edilecek dosyamızın konumunu ve ismini seçip işlemimizi bitirelim.
Unpack işlemimiz bu kadardı.
Şimdi Strings aracıyla packlenmiş ve unpacklenmiş halini inceleyelim.



Görüldüğü üzere packlediğimiz zararlının içinde UPX0, UPX1 gibi yazılar gözükmekte. Bunlar PE Sections alanında görülen bilgiler idi. Sağ tarafta ise packlenmemiş halinin strings analizinde .text, .data, .bss gibi segmentleri görebilmekteyiz. Burada strings ile uygulamanın içerisinde geçen karakterleri inceleyerek zararlı hakkında bilgiler edineceğiz.



Çıktıların içinde arama yaptığımda karşıma bu stringler çıkıyor, GetAsyncKeyState kurbanın klavye girdilerini ele geçirmemize yarar.
Şimdi ise CFF Explorer?i çalıştıralım.

Section Headers kısmını ele alalım.

UPX0 boş bir section, UPX1 ise packer tarafından oluşturulmuş sahte, fake bir entry point.
Bunlar UPX'in obfuscate işleminden geliyor.
UPX1'de orjinal entry point sıkıştırılıyor, sonrasında memoryde yeni bir process içerisine saklanıyor.
UPX2 ise daha sonra eklenen loader tarafından sıkıştırılmış bir section.
Unpack işlemini yaptığımız sırada memory dump işlemi yaptık çünkü bu packer memory'de önceki sectionları saklıyor ve sahte entry point açıyor.
Şimdi ise Import Directory kısmını ele alalım.

sub_f00008fd(.)
Orjinal entry point üzerinden, birçok fonksiyon ile process oluşturuyor.
Unpack için İlk olarak main adrese zıplamak gerekiyor, daha sonra dump edip, oep'i kendimiz yeniden rebuild ediyoruz.
UPX kısaca import üzerinden dll boyutunu azaltıyor.
Kod:
#include "conf.h"
#include "compress.h"
#include "mem.h"
Bunları inculede ediyor.
upx_adler32 (ana fonksiyonlardan biri)
MemBuffer::getSizeForCompression(src_len) (dll ve benzeri file?ların boyunu düzenliyor)
upx_decompress (fonksiyonlardan biri)
Kod:
#undef dos
#undef linux
#undef small
#undef tos
#undef Unix
UPX, undef ile bu sürümlerde desteklenmekte.
typedef size_t upx_rsize_t
confused işlemini gerçekleştirirken exe?yi resize ediyor.
#define EXIT_FILE_READ 1
#define EXIT_FILE_WRITE 1
Klasik her packer?da olduğu gibi read ile write kullanılmış.
Bu konumunda burda sonuna gelmiş bulunmaktayım.
Bugs Bunny iyi günler diler.

Ben Bugs Bunny

Temel Statik Analiz - C Keylogger
Keyloggerimizi packing işlemi yapmadan önce taratalım.

12/37 gibi bir sonuç aldık artık packing işlemini yapabiliriz.
Ben packing işlemini upx ile yapacağım siz isterseniz farklı bir packers kullanabilirsiniz.
UPX, yazılımdaki tüm register keys?i yani push all registers yapıp hafızaya atar ardından sahte bir giriş noktası, entry point oluşturarak işleyişi bozma mantığıyla çalışır.



Packing işlemimiz tıkladığımız anda yapılıyor, Detect it easy(die) veya Exeinfo ile bunu görebiliriz.
Şimdi ise packing işlemi sonrası dosyamızı taratalım.

Bu da packing işlemi yaptıktan sonraki hali, 6/37 sonucunu bize verdi.
Statick Analysis bölümünden zararlımız hakkında bilgi toplayabiliriz.



Zararlımız hakkında ****data gibi bilgileri görebiliyoruz. Burada ufak bir parantez açıp bazı kısımlara değinelim. PE başlığı program tarafından tutulan kütüphane ve fonksiyon bilgilerini saklar. PE birçok bölüme ayrılır. (.text, .rdata .data, .rsrc vb.) Burada upx ile pack edilmiş zararlımızı incelediğimiz zaman PE sections alanında upx0, upx1, upx2 yer aldığını görüyoruz. Bu da executable?ın upx ile packlendiğinin bir kanıtıdır. Aynı zamanda uygulamanın import ettiği DLL dosyalarını da görmekteyiz. Burada ?ws2_32.dll? dosyasının import edildiğini görüyoruz. Bu DLL dosyası ağ üzerinden bağlantı açmak için kullanılır. Tıpkı ?wsock32.dll? dosyasında olduğu gibi.
Artık unpack işlemine geçebiliriz, Detect it easy(die) ve Exeinfo?dan gördüğümüz üzere zararlımız upx ile packlenmiş.


Unpack yapacağımız dosyayı seçip devam edelim.

Unpack edilecek dosyamızın konumunu ve ismini seçip işlemimizi bitirelim.
Unpack işlemimiz bu kadardı.
Şimdi Strings aracıyla packlenmiş ve unpacklenmiş halini inceleyelim.



Görüldüğü üzere packlediğimiz zararlının içinde UPX0, UPX1 gibi yazılar gözükmekte. Bunlar PE Sections alanında görülen bilgiler idi. Sağ tarafta ise packlenmemiş halinin strings analizinde .text, .data, .bss gibi segmentleri görebilmekteyiz. Burada strings ile uygulamanın içerisinde geçen karakterleri inceleyerek zararlı hakkında bilgiler edineceğiz.



Çıktıların içinde arama yaptığımda karşıma bu stringler çıkıyor, GetAsyncKeyState kurbanın klavye girdilerini ele geçirmemize yarar.
Şimdi ise CFF Explorer?i çalıştıralım.

Section Headers kısmını ele alalım.

UPX0 boş bir section, UPX1 ise packer tarafından oluşturulmuş sahte, fake bir entry point.
Bunlar UPX'in obfuscate işleminden geliyor.
UPX1'de orjinal entry point sıkıştırılıyor, sonrasında memoryde yeni bir process içerisine saklanıyor.
UPX2 ise daha sonra eklenen loader tarafından sıkıştırılmış bir section.
Unpack işlemini yaptığımız sırada memory dump işlemi yaptık çünkü bu packer memory'de önceki sectionları saklıyor ve sahte entry point açıyor.
Şimdi ise Import Directory kısmını ele alalım.

sub_f00008fd(.)
Orjinal entry point üzerinden, birçok fonksiyon ile process oluşturuyor.
Unpack için İlk olarak main adrese zıplamak gerekiyor, daha sonra dump edip, oep'i kendimiz yeniden rebuild ediyoruz.
UPX kısaca import üzerinden dll boyutunu azaltıyor.
Kod:
#include "conf.h"
#include "compress.h"
#include "mem.h"
Bunları inculede ediyor.
upx_adler32 (ana fonksiyonlardan biri)
MemBuffer::getSizeForCompression(src_len) (dll ve benzeri file?ların boyunu düzenliyor)
upx_decompress (fonksiyonlardan biri)
Kod:
#undef dos
#undef linux
#undef small
#undef tos
#undef Unix
UPX, undef ile bu sürümlerde desteklenmekte.
typedef size_t upx_rsize_t
confused işlemini gerçekleştirirken exe?yi resize ediyor.
#define EXIT_FILE_READ 1
#define EXIT_FILE_WRITE 1
Klasik her packer?da olduğu gibi read ile write kullanılmış.
Bu konumunda burda sonuna gelmiş bulunmaktayım.
Bugs Bunny iyi günler diler.
