MMA ile uğraşıyordum biraz güzel baya kullanımın öğrendim. öncelikle virtual ethernet için TCP protokolünü implement etmem gerekiyor.
SourcePort
DestinationPort
SequenceNumber
AcknolwedgementNum
DataOffset
gibi klasik TCP gereksinimlerinin yanında options kısmını da windows kendisine göre gönderiyor. Örnek olarak ben TCP için öncelikle bir tane VPN ile handshake yapıyorum ve daha sonra local portuma gelen paketi inceliyorum. Aynı şekilde visual ethernet bağdaştırıcımı da bu option'ları okuyup ona göre istekte bulunmaya teşvik etmeliyim veya harici PI'ye wireshark kurup gelen paketi nasıl parse edebilirim ona bakmalıyım.
winsock2 ile
HANDLE serialPort = CreateFileA(SERIAL_PORT, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
ve daha sonra DCB ile
https://learn.microsoft.com/en-us/windows/win32/api/winbase/ns-winbase-dcb?redirectedfrom=MSDNseri porta paket göndermek mümkün. peki nasıl ağı koplayacağımıza gelirsek recv() ile soketten gelen verileri bloke ederek okuyacağım. şimdilik TCP paketleri hakkında ve kodlamaları hakkında daha fazla bilgi edinmeliyim. nedense MMA'da yazan PID değerleriyle task managerda gördüğüm PID verileri birbirini tutmuyor. yarın onu araştıracağım niçin böyle bi fark var. çünkü şu tabloya sahip olmak zorundayım:
1- hangi process hangi IP adresine request atıyor
2- process hangi uygulamanın alt processi (bunu Opera ile okumak çok kolay ama Chrome'da yapabilirsem diğer uygulamalara da geçirebilirim)
3- bu processin signature'u ne?
4- bu PID'nin parent PID'si ne?
5- processin başlangıç tarihi nedir?
6- AuthID'si ne
7- parent tree'sini çıkart
8- gönderdiği paket içeriği (source addres, destination addres, PORT, payload)
şimdilik bunlara bakıp şu soruya cevap alacağım, hangi process'lere izin vermeliyim hangilerine vermemeliyim. örnek olarak Chrome şu an arkada 34 tane process kullanıyor ve bellek kullanımı sürekli değişiyor. chrome ile signed olup da malicious bir paket olduğunda bunu onaylamamak için ne yapabilirim. Chromium'un kaynak koduna baktığımda
extern NSString* const kNotificationCreatorPid
base::GetCurrentProcId
gibi bir takım fonksiyonların olduğunu görüyorum. tıpkı şu an yapmaya çalıştığım gibi createrPID yani ParentPID vs oluşturduğunu görüyorum. asıl sorum neden chrome bu kadar fazla task oluşturuyor ve bu tasklere niçin ihtiyacı var.
kendi commitlerinde bakınca mesela bir ara notification kısmında kullanıp daha sonra bıraktıkları bir kod parçası var:
- NSNumber* creatorPid =
- response[notification_constants::kNotificationCreatorPid];
- EXPECT_TRUE([creatorPid isEqualToNumber:@0]);
bu da CreatorPid'lerin bir şekilde kendileri tarafından track edildiğini gösteriyor. ama bahsettikleri "PID" benim, işletim sistemi bağlamında, bahsettiğim PID ile aynı değil sanırım.
tiradı yazarkenki not: biraz ara verip kaynak koda baktım
>GetProcessIdint32_t GetCurrentProcessId() {
return static_cast<int32_t>(base::GetProcessId());
}
bu şekilde tanılnanmış bir fonksiyon.
base namespaceinden GetProcessId çağırıyor o da böyle tanımlanmış:
#if PERFETTO_BUILDFLAG(PERFETTO_OS_FUCHSIA)
using PlatformProcessId = zx_handle_t;
inline PlatformProcessId GetProcessId() {
return zx_process_self();
}
#elif PERFETTO_BUILDFLAG(PERFETTO_OS_WIN)
using PlatformProcessId = uint64_t;
inline PlatformProcessId GetProcessId() {
return static_cast<uint64_t>(GetCurrentProcessId());
}
#else
using PlatformProcessId = pid_t;
inline PlatformProcessId GetProcessId() {
return getpid();
}
#endif
YANİ BURADA İKİNCİ PERFETTO_BUILDFLAG OLARAK BİZİMKİ WINDOWS OLDUĞU İÇİN uint64_t olarak çalışan processorID'yi döndürüyor ve tahmin edin o nasıl tanılmanmış!
>Prototype extracted from the Windows SDK to avoid including windows.h.demek ki gerçekten de istediğim şey buymuş. PID derken Chrome projesi içinde farklı bir Process Stack yazmamışlar. Demek ki arkada 50 tane process olmasının arkasında bi mantık var ve bu Chrome/Chromium içine öyle kodlanmış. Bu da yine aynı şekilde demek ki hangi process'in hangi paketi göndermeye çalıştığına ve hangi parent tarafından gönderildiğine bakabiliriz. Bu da demek ki yalnızca yapmak istediğimiz sorgu için internet kullanımına izin vermemizin mümkün olduğunu söylüyor. Sanırım yani... Chrome gibi kocaman bi projeyi anlamak imkansıza yakın, service worker var, salak saçma (aslında salak değil hepsinin mantığı var ama benim anlayamayacağım) bir takım ayar indirmesi falan gerekiyor. En azından process bazında mesela auto update vs indirmesini engellemek isterim, her bi sorgusuna izin vermesem de benim başlatmak istediğim processler ve onların oluşturduğu child processler internet kullanabilecek şekile getirebilirim sanırım.
burada webdev bi anon vardı tiradıma gelirse sevinirim baya bir şey biliyordu firefox ve chrome hakkında. kaynak kodlarını falan da inceliyordu. şimdilik ben bırakıyorum burada