ctypes ile Windows API

Açıklama: Merhaba arkadaşlar, ITÜ’de siber güvenlik öğrencisiyim ve bir pentest tool projesi için Python’da ctypes kullanarak Windows API’leriyle (özellikle Winsock) socket programlama öğrenmeye çalışıyorum. Hedefim, reverse TCP bağlantısı kuran bir kod yazmak (mesela, bir IP/port’a bağlanıp veri gönderip almak). Normal Python socket modülünü biliyorum, ama düşük seviyeli kontrol için Winsock API’lerini (socket, connect, send, recv gibi) ctypes ile çağırmam lazım.

Şimdiye kadar şu örneği çalıştırmayı denedim:

from ctypes import windll, c_int, Structure, c_ushort, c_ulong, byref

class SOCKADDR_IN(Structure):
fields = [
(“sin_family”, c_ushort),
(“sin_port”, c_ushort),
(“sin_addr”, c_ulong),
(“sin_zero”, c_char * 8)
]

ws2_32 = windll.ws2_32
wsa_data = (c_char * 400)()
ws2_32.WSAStartup(c_uint16(0x0202), byref(wsa_data))
sock = ws2_32.socket(2, 1, 6) # AF_INET, SOCK_STREAM, IPPROTO_TCP

ama karmaşık geliyor, özellikle pointer’lar (byref) ve argtypes/restype tanımları. Türkçe kaynak bulmakta zorlanıyorum, BTK Akademi’de de ctypes için detaylı bir şey yok. Şu sorularım var:

  1. ctypes ile Winsock’u kullanırken nelere dikkat etmeliyim?
  2. Reverse TCP bağlantısı için basit bir örnek verebilir misiniz?
  3. Hata yakalamak için WSAGetLastError nasıl kullanılır?
  4. Türkçe kaynak veya basit tutorial öneriniz var mı?

Merhabalar,

Bu API’yi veya ctypes’i daha once kullanmadiysaniz oncelikle C programi yazmaniz lazim. Sonra isterseniz oradaki kodu ctypes kullanan python koduna cevirebilirsiniz.

ctypes ile Winsock’u kullanırken nelere dikkat etmeliyim?

C ile kullanirken dikkat ettiklerinizin aynisina. Uzerine, SOCKADDR_IN gibi struct’larin alignment ve padding degerlerinin, ve kullandiginiz turlerin C’dekilerle ayni olmalarina dikkat etmeniz lazim.

Reverse TCP bağlantısı için basit bir örnek verebilir misiniz?

Bu nedir?
Verdiginiz ornek dur biz TCP baglantisi ve socket moduluyle kolayca yapilabilir.

Hata yakalamak için WSAGetLastError nasıl kullanılır?

Hata donduren bir WSA fonksiyonundan hemen sonra ve ayni thread’de cagirmaniz lazim

Türkçe kaynak veya basit tutorial öneriniz var mı?

Ceviri tavsiye edebilirim. (Yukaridaki dokumentasyonun resmi cevirisi de var)
Basit tutorial icin mevcut AI chatbot’larini kullanabilirsiniz.
Hatta lokalde calistiracaginiz bir LLM modelinin bile bu konuda yardim edebilecegini dusunuyorum, cunku konu cok eski ve nispeten basit.

1 Beğeni