Windows İşletim Sisteminde Python Winreg Modülü ile Kayıt İşlemlerinin Gerçekleştirilmesi

0
981
views
Windows işletim sisteminde kayıt (registry) işlemleri için Python dili kullanılabilir. Python’da Windows kayıt işlemlerini gerçekleştirebilmek için _winreg modülü bulunmaktadır. Bu yazıda python dilinde winreg modülü ile Windows kayıt değerlerinin yönetimi incelenecektir.

Pentist: Sızma Testleri ve Bilgi Güvenliği Danışmanlık Hizmetleri

 

Kayıt işlemleri için “winreg” kütüphanesi kullanılmaktadır. Bu kütüphanenin öğeleri kullanılmadan önce, kütüphane import edilmelidir.

import _winreg

 

Windows işletim sisteminde bir çok kök kayıt değeri vardır. HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE ve HKEY_USERS en önemli olanlarındandır.

HKEY_Degeri = _winreg.HKEY_CURRENT_USER
# Tam anahtar yolu da olabilir. Ornek: “HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings”
# Butun HKEY Degerleri: HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_DYN_DATA, HKEY_LOCAL_MACHINE, HKEY_PERFORMANCE_DATA, HKEY_USERS

 

Kayıt değerlerinin, dizin yapısına benzer bir mimarisi vardır. İşlem yapılacak kayıt değeri, anahtar, kayıt verisi… bu dizin yapısında bulunmaktadır.

anahtarYolu = “Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings”

 

Bir kayıt nesnesine erişimler çeşitlilik gösterebilir. Örneğin, bir anahtar değeri için KEY_READ yetkisi alınmışsa, bu değer sadece okunabileceği için değiştirilemez.

erisimYetkisi= _winreg.KEY_ALL_ACCESS
# Butun Erisim Yetkileri: KEY_ALL_ACCESS, KEY_CREATE_LINK, KEY_CREATE_SUB_KEY, KEY_ENUMERATE_SUB_KEYS, KEY_EXECUTE, KEY_NOTIFY, KEY_QUERY_VALUE, KEY_READ, KEY_SET_VALUE

 

Bir kayıt değeri katar (string), ikili (binary),… gibi farklı tiplerde olabilir.

degerTipi = 4
# Onemli Deger Tipleri: REG_NONE = 0, REG_SZ = 1, REG_EXPAND_SZ = 2, REG_BINARY = 3, REG_DWORD = 4, REG_MULTI_SZ = 7,

 

Belirtilen temel bilgiler sayesinde Python’daki winreg modülü kullanılarak, kayıt nesneleri üzerinde işlemler yapılabilir.

Bir anahtar açılacaksa OpenKey metodu kullanılabilir.

print “Anahtara erisim aciliyor…”
anahtar = _winreg.OpenKey(HKEY_Degeri, anahtarYolu, 0, erisimYetkisi)

 

Bir anahtar hakkında detaylı bilgi almak için QueryInfoKey foksiyonu kullanılabilir.

altAnahtarAdedi, mevcutAnahtarinAltindakiDegerAdedi, mevcutAnahtarIcinSonDegisiklikTarihi = _winreg.QueryInfoKey(anahtar)
print “Bu anahtarin altindaki alt anahtarlarin adedi: ” + str(altAnahtarAdedi)
print “Bu anahtarin altindaki (alt anahtarlarinin degerleri dahil olmayacak sekilde) degerlerin adedi: ” + str(mevcutAnahtarinAltindakiDegerAdedi)
print “Bu anahtarin son degisiklik tarihi: ” + str(mevcutAnahtarIcinSonDegisiklikTarihi)

 

Bir anahtarın altındaki belli bir değer için sorgulamak için EnumValue kullanılabilir.

sira = 11
degerAdi, degerVerisi, degerTipi = _winreg.EnumValue(anahtar, sira)
print “Bu anahtarin altindaki ” + str(sira+1) + “. degerin adi: ” + str(degerAdi)
print “Bu anahtarin altindaki ” + str(sira+1) + “. degerin verisi: ” + str(degerVerisi)
print “Bu anahtarin altindaki ” + str(sira+1) + “. degerin tipi: ” + str(degerTipi)

 

Belli bir anahtarın altındaki alt anahtarı sorgulamak için EnumKey kullanılabilir.

sira = 2
altAnahtar = _winreg.EnumKey(anahtar, sira)
print “Bu anahtarin altindaki ” + str(sira+1) + “. alt anahtarin degeri: ” + altAnahtar

 

Bir anahtar altında yeni bir anahtar oluşturmak için CreateKey kullanılabilir.

print “Bu anahtarin altinda yeni bir anahtar olusturuluyor…”
yeniAnahtarAdi = “Yeni Anahtar Adi”
yeniAnahtar = _winreg.CreateKey(anahtar, yeniAnahtarAdi)

 

Bir anahtar altındaki bir anahtarı ve bu anahtarın altındaki değerleri silmek için DeleteKey kullanılabilir.

print “Bu anahtarin altinda mevcutta olan bir anahtar ve altindaki degerler siliniyor…”
mevcutAnahtarAdi = “Mevcutta Bulunan Bir Anahtar Adi”
_winreg.DeleteKey(anahtar, mevcutAnahtarAdi)

 

Bir anahtarın altındaki değerleri silmek için DeleteValue kullanılabilir.

print “Bu anahtarin altinda mevcutta olan bir deger siliniyor…”
mevcutDegerAdi = “Mevcutta Bulunan Bir Deger Adi”
_winreg.DeleteValue(anahtar, mevcutDegerAdi)

 

Bir değerin verisini ve tipini sorgulamak için QueryValueEx kullanılabilir.

mevcutDegerAdi = “Mevcutta Bulunan Bir Deger Adi”
degerVerisi, degerTipi = _winreg.QueryValueEx(anahtar, mevcutDegerAdi)
print “Bu anahtarin altindaki ” + mevcutDegerAdi + ” adindaki degerinin verisi: ” + str(degerVerisi)
print “Bu anahtarin altindaki ” + mevcutDegerAdi + ” adindaki degerinin tipi: ” + str(degerTipi)

 

Bir değerin verisini ve tipini ayarlamak için SetValueEx kullanılabilir.

degerAdi = “Deger Adi”
degerTipi = _winreg.REG_DWORD
ayarlananDegerinVerisi = 250
print “Yeni veya mevcutta olan degere (” + degerAdi + “) ” + str(ayarlananDegerinVerisi) + ” ataniyor”
_winreg.SetValueEx(anahtar, degerAdi, 0, degerTipi, ayarlananDegerinVerisi)

 

Not: Uzak bir bilgisayarın kayıt defterine bağlanarak bir işlem yapılması için ConnectRegistry kullanılabilir. Ancak bazı durumlarda düzgün olarak çalışmayabilmektedir.

# uzakMakine = “\\192.168.2.50”
# HKEY_Degeri = _winreg.HKEY_CURRENT_USER
# uzakKayitEditoru = _winreg.ConnectRegistry(uzakMakine, HKEY_Degeri)
# anahtarYolu = “Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings”
# uzakAnahtar = OpenKey(uzakKayitEditoru, anahtarYolu, 0, erisimYetkisi)

 

Uzak bir bilgisayarın kayıt defterine bağlanarak bir değer atanması için check_output modülü kullanılabilir.

from subprocess import check_output

uzakBilgisayarIpAdresi = “192.168.2.50”
uzakBilgisayarYoneticisi = “Ornek\Yonetici”
uzakBilgisayarYoneticisininParolasi = “Aa123456”

tamAnahtarYolu = “\\\\” + uzakBilgisayarIpAdresi + “\HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server”
degerAdi = “fDenyTSConnections”
degerTipi = “REG_DWORD”
ayarlananDegerinVerisi = 0

calistirilacakKomut = “net use ” + “\\\\” + uzakBilgisayarIpAdresi + “\C$ /USER:” + uzakBilgisayarYoneticisi + ” ” + uzakBilgisayarYoneticisininParolasi + ” && ” + “reg add ” + “\”” + tamAnahtarYolu + “\”” + ” /v ” + “\”” + degerAdi + “\”” + ” /t ” + degerTipi + ” /d ” + str(ayarlananDegerinVerisi) + ” /f”
print uzakBilgisayarIpAdresi + ” uzak bilgisayarinda calistirilacak olan komut: \n\t” + calistirilacakKomut

calistirilanKomutCiktisi = check_output(calistirilacakKomut, shell=True)
print “Komut ciktisi: \n\t” + calistirilanKomutCiktisi

 

Kaynak:

https://docs.python.org/2/library/_winreg.html

 

 

 

Pentist: Sızma Testleri ve Bilgi Güvenliği Danışmanlık Hizmetleri

CEVAP VER

Yorumunuzu giriniz
İsminizi giriniz

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.