Merhabalar ben Anka Red Team'den Bunjo,
Bu konuda Ruby programlama dilinde "XOR" Shell Code Encrypter yapmayı anlatacağım.
Bu konu örnek olduğu için giriş seviye de bırakacağım.
Shellcode Nedir?
Shellcode, bilgisayar güvenliği ve yazılım geliştirme alanlarında sıkça kullanılan bir terimdir.
Temel olarak, bir bilgisayarın belleğine yerleştirilerek çalıştırılabilen, genellikle kötü niyetli olan küçük ve optimize edilmiş bir makine kodu parçasını ifade eder.
Shellcode genellikle şu amaçlarla kullanılır:
Saldırılar: Bilgisayar sistemlerine sızma veya zararlı işlemler gerçekleştirme amacıyla kullanılır.
Örneğin, kötü niyetli bir kullanıcı bir güvenlik açığından yararlanmak için shellcode kullanabilir.
Yazılım Geliştirme: Bazı durumlarda, shellcode güvenlik açıklarını tespit etmek ve yamalar oluşturmak için kullanılabilir.
Bu tür shellcode'lar genellikle "exploit" araçlarıyla birlikte kullanılır.
Shellcode'un önemli özellikleri şunlardır:
Küçüklük: Shellcode, olabildiğince küçük olmalıdır çünkü hedef sistem belleğinde sınırlı bir alan kullanır.
Gizlilik: Genellikle shellcode gizli olmalıdır, yani algılanması veya engellenmesi zor olmalıdır.
Makineye Özgü: Shellcode, hedeflenen işletim sistemi ve mimariye göre yazılmalıdır. Örneğin, x86 ve x64 sistemler için farklı shellcode'lar gerekebilir.
Yürütme Yetkisi: Shellcode'un çalışabilmesi için genellikle yürütme yetkisine sahip bir kullanıcı veya süreç gereklidir.
Shellcode genellikle assembly dilinde yazılır ve ardından derlenerek elde edilir. Ancak bazı durumlarda yüksek seviyeli diller veya araçlar da kullanılabilir.
Shellcode'un amacı, hedef sistemde istenilen işlemi gerçekleştirebilecek şekilde makine kodunu temsil etmektir.
Shellcode, bilgisayar güvenliği ve yazılım geliştirme alanlarında sıkça kullanılan bir terimdir.
Temel olarak, bir bilgisayarın belleğine yerleştirilerek çalıştırılabilen, genellikle kötü niyetli olan küçük ve optimize edilmiş bir makine kodu parçasını ifade eder.
Shellcode genellikle şu amaçlarla kullanılır:
Saldırılar: Bilgisayar sistemlerine sızma veya zararlı işlemler gerçekleştirme amacıyla kullanılır.
Örneğin, kötü niyetli bir kullanıcı bir güvenlik açığından yararlanmak için shellcode kullanabilir.
Yazılım Geliştirme: Bazı durumlarda, shellcode güvenlik açıklarını tespit etmek ve yamalar oluşturmak için kullanılabilir.
Bu tür shellcode'lar genellikle "exploit" araçlarıyla birlikte kullanılır.
Shellcode'un önemli özellikleri şunlardır:
Küçüklük: Shellcode, olabildiğince küçük olmalıdır çünkü hedef sistem belleğinde sınırlı bir alan kullanır.
Gizlilik: Genellikle shellcode gizli olmalıdır, yani algılanması veya engellenmesi zor olmalıdır.
Makineye Özgü: Shellcode, hedeflenen işletim sistemi ve mimariye göre yazılmalıdır. Örneğin, x86 ve x64 sistemler için farklı shellcode'lar gerekebilir.
Yürütme Yetkisi: Shellcode'un çalışabilmesi için genellikle yürütme yetkisine sahip bir kullanıcı veya süreç gereklidir.
Shellcode genellikle assembly dilinde yazılır ve ardından derlenerek elde edilir. Ancak bazı durumlarda yüksek seviyeli diller veya araçlar da kullanılabilir.
Shellcode'un amacı, hedef sistemde istenilen işlemi gerçekleştirebilecek şekilde makine kodunu temsil etmektir.
XOR Nedir?
XOR (İngilizce "exclusive or" kelimesinin kısaltması), iki değer arasında bit düzeyinde "exclusive or" (XOR) mantıksal işlemini gerçekleştiren bir mantıksal operatördür. XOR işlemi, Boolean mantığında yaygın olarak kullanılır ve genellikle şifreleme ve veri işleme gibi alanlarda önemli bir rol oynar.
XOR operatörü şu şekilde çalışır:
İki giriş değeri alır: A ve B.
Her iki girişin de değeri 1 ise, XOR operatörü 0 döndürür.
Her iki girişten biri 1 ise, XOR operatörü 1 döndürür.
Her iki giriş de 0 ise, XOR operatörü 0 döndürür.
XOR operatörü genellikle "⊕" veya "^" sembolleriyle gösterilir. Örneğin, A ve B iki bitlik değerler olduğunda, XOR işlemi şu şekilde gösterilir:
A ⊕ B
A ^ B
XOR operatörünün mantıksal tablosu şöyle görünür:
XOR (İngilizce "exclusive or" kelimesinin kısaltması), iki değer arasında bit düzeyinde "exclusive or" (XOR) mantıksal işlemini gerçekleştiren bir mantıksal operatördür. XOR işlemi, Boolean mantığında yaygın olarak kullanılır ve genellikle şifreleme ve veri işleme gibi alanlarda önemli bir rol oynar.
XOR operatörü şu şekilde çalışır:
İki giriş değeri alır: A ve B.
Her iki girişin de değeri 1 ise, XOR operatörü 0 döndürür.
Her iki girişten biri 1 ise, XOR operatörü 1 döndürür.
Her iki giriş de 0 ise, XOR operatörü 0 döndürür.
XOR operatörü genellikle "⊕" veya "^" sembolleriyle gösterilir. Örneğin, A ve B iki bitlik değerler olduğunda, XOR işlemi şu şekilde gösterilir:
A ⊕ B
A ^ B
XOR operatörünün mantıksal tablosu şöyle görünür:
CoffeeScript:
A B A ⊕ B
--------------
0 0 0
0 1 1
1 0 1
1 1 0
XOR operatörü, özellikle şifreleme algoritmalarında kullanılan temel bir operatördür. XOR işlemi, aynı anahtarı kullanarak veriyi şifreleme ve şifreli veriyi anahtarla geri çözme işlemlerinde sıklıkla kullanılır. XOR işlemi, veriye bir anahtar uygularken herhangi bir veri kaybı olmaksızın geri dönüşümlü bir şekilde çalışır,
bu da onu şifreleme ve veri güvenliği alanlarında kullanışlı kılar.
bu da onu şifreleme ve veri güvenliği alanlarında kullanışlı kılar.
Ruby Kodu
Ruby:
#!/usr/bin/env ruby
class XorCrypter
def initialize
@plaintext = nil
end
def encrypt(data, key)
data.bytes.map.with_index do |byte, b2|
current_key = key[b2 % key.size]
(current_key.ord ^ byte).to_s(16)
end
end
def format_output(ciphertext)
'{ 0x' + ciphertext.join(', 0x') + ' };'
end
def main
begin
@plaintext = open(ARGV[0], "rb").read
rescue Exception => exception
puts(exception.message)
exit(1)
end
encryption_key = "BunjoRuby"
ciphertext = encrypt(@plaintext, encryption_key)
puts(format_output(ciphertext))
end
end
crypter = XorCrypter.new
crypter.main
Kod Açıklaması
#!/usr/bin/env ruby: Bu satır, Unix/Linux işletim sistemlerinde bu Ruby programının nasıl çalıştırılacağını belirtir.
class XorCrypter: Bu satırda XorCrypter adında bir sınıf tanımlanır. Bu sınıf, XOR şifrelemesi yapabilen metodları içerir.
def initialize: Bu metod, sınıfın başlatıcı metodudur. @plaintext adında bir değişkeni nil değeriyle başlatır. Bu değişken, şifrelenecek metni temsil eder.
def encrypt(data, key): Bu metod, veriyi XOR şifrelemesi kullanarak şifreler. data parametresi şifrelenecek olan veriyi, key parametresi ise XOR işlemi için kullanılacak anahtarı temsil eder.
data.bytes.map.with_index do |byte, b2|: Veriyi baytlara ayırır ve her bir baytla birlikte indeks bilgisini (b2) kullanarak döngü başlatır.
current_key = key[b2 % key.size]: Anahtarın boyutuna bağlı olarak döngü içinde kullanılacak olan anahtar parçasını belirler.
(current_key.ord ^ byte).to_s(16): Baytları ve anahtarı XOR işlemine tabi tutar, sonucu onaltılık (hexadecimal) formata dönüştürür ve bir dizi olarak döndürür.
def format_output(ciphertext): Bu metod, şifrelenmiş veriyi C dilindeki dizi formatında düzenler. ciphertext parametresi şifrelenmiş metni temsil eder.
'{ 0x' + ciphertext.join(', 0x') + ' };': Şifrelenmiş metni bir dizi olarak formatlar ve başına { 0x, sonuna }; ekler.
def main: Bu metod, programın ana işlevini içerir. Kullanıcıdan alınan dosyayı (ARGV[0]) okur, şifreler ve şifrelenmiş metni formatlayarak ekrana yazdırır.
@plaintext = open(ARGV[0], "rb").read: Kullanıcı tarafından sağlanan dosyayı binary modda okur ve @plaintext değişkenine atar.
encryption_key = "BunjoRuby": Şifreleme için kullanılacak sabit bir anahtar belirlenir.
ciphertext = encrypt(@plaintext, encryption_key): encrypt metodunu kullanarak metni şifreler.
puts(format_output(ciphertext)): Şifrelenmiş metni C dilindeki dizi formatında ekrana yazdırır.
crypter = XorCrypter.new ve crypter.main: Kodun en alt kısmında ise XorCrypter sınıfından bir nesne oluşturulur ve main metodunu çağırarak programın çalışması sağlanır.
Örnek Kullanım
CoffeeScript:
{ 0x0, 0x20, 0x20, 0x20, 0x20, 0x58, 0x27, 0x37, 0x3b, 0x1b, 0x7f, 0x3a, 0x2f, 0x3c, 0x6, 0x7f, 0x20, 0x2b, 0x3, 0x23, 0x21, 0x4a, 0x3d, 0x17, 0x23, 0x27, 0x2b, 0x11, 0x30, 0x4e, 0x2b, 0x3b, 0x6, 0x3c, 0x2c, 0x58, 0x48, 0x21, 0x3b, 0x38, 0x24, 0x1a, 0x34, 0x21, 0x32, 0x16, 0x30, 0x2f, 0x27, 0x65, 0x1b, 0x55, 0x23, 0x34, 0x62, 0x3d, 0x2f, 0x29, 0x24, 0x17, 0x27, 0x42, 0x21, 0x6, 0x31, 0x64, 0x3e, 0x2a, 0x1, 0x21, 0x42, 0x3d, 0xd, 0x26, 0x37, 0x2b, 0x3c, 0x1b, 0x7f, 0x30, 0x3c, 0x14, 0x30, 0x3c, 0x39, 0x2a, 0x72, 0xb1, 0xd2, 0xba, 0xc5, 0xb1, 0xde, 0x24, 0x4f, 0x10, 0x34, 0xa7, 0xe7, 0x3, 0x27, 0x27, 0x26, 0x2e, 0x0, 0x7f };
Anlatacaklarım buraya kadardı.
Foruma kazandırmış olduğum "Ruby" kategorisini elimden geldiğince doldurup öğrenmek isteyenler için gönüllü olarak Türkçe bir kaynak sağlamaya çalışıyorum,
bu esnada konuları beğenip güzel bir yorum atarak destek çıkabilirsiniz. Binlerce kişi okuyor fakat pek bir dönüt gelmiyor maalesef.
Okuyan herkese teşekkür ederim.
İyi forumlar..
Foruma kazandırmış olduğum "Ruby" kategorisini elimden geldiğince doldurup öğrenmek isteyenler için gönüllü olarak Türkçe bir kaynak sağlamaya çalışıyorum,
bu esnada konuları beğenip güzel bir yorum atarak destek çıkabilirsiniz. Binlerce kişi okuyor fakat pek bir dönüt gelmiyor maalesef.
Okuyan herkese teşekkür ederim.
İyi forumlar..
Moderatör tarafında düzenlendi: