Soru:
Bir Windows sürücüsünü manuel olarak nasıl güvenilir bir şekilde açabilirsiniz?
Ange
2013-03-30 01:43:20 UTC
view on stackexchange narkive permalink

Bir Windows kullanıcı modu yürütülebilir dosyasını manuel olarak paketinden çıkardığınızda, Giriş Noktasında (veya TLS'de) kolayca kırabilir ve ardından orijinal Giriş Noktasına ulaşana kadar izleyebilirsiniz. Ancak bu, paketlenmiş bir sürücü ile mümkün değildir.

Bir Windows sürücüsünü manuel olarak nasıl güvenilir bir şekilde açabilirsiniz?

Hepsinin en büyüğünü kim kaçırmaz, Softice
Dört yanıtlar:
#1
+16
mrduclaw
2013-03-30 07:19:14 UTC
view on stackexchange narkive permalink

Alt sistemi değiştirmeyle ilgili cevabınızı beğendim, özellikle de çekirdek hata ayıklama hayranı değilseniz. Yine de büyük bir Windbg hayranıyım. Bunu yapmamın yolu:

  1. Çekirdek hata ayıklayıcımı bir sanal makineye bağlayın
  2. Sürücünün giriş noktasının ilk baytını bir INT3 (0xCC) olacak şekilde değiştirin.
  3. PE sağlama toplamını düzeltin ( pefile 'ın bu işi benim için yapmasına izin verme hayranıyım). ​​
  4. Sürücüyü sanal makineye yükleyin ( OSR harika bir sürücü yükleyiciye sahiptir)

Çekirdek, sürücünüzde DriverEntry () 'i çağırmalı ve sizin için hata ayıklayıcınıza girmelidir. Daha sonra, zaten yaptığınız gibi OEP'yi bulana kadar kodu takip edebilirsiniz. Bu yöntemin en büyük avantajı, kernel DLL'leri veya sürücünün paket açma sırasında yapabileceği çağrıları taklit etmenize gerek olmaması ve x64 üzerinde çalışıyor olmasıdır.

Yine de daha yeni Windows sürümlerinde duvara çarpabilirsiniz. OP'nin cevabı bu anlamda daha çok yönlü, ancak sizinki kesinlikle daha profesyonel :) ... ayrıca sürücü yükleme ihtiyaçları için `devcon'u da unutmayın (DDK'lerde / WDK'lerde kaynakla birlikte gelir)
@0xC0000022L Windows'un yeni sürümlerinde bununla ilgili bir sorun yaşamadım; sadece test imzalamayı etkinleştirmek vb. gibi normal şeyleri yapın. Kuşkusuz, Windows 8'de denemedim. Bir şey mi değişti?
@mrduclaw Sürücünün giriş noktasının ilk baytını bir INT3 olacak şekilde nasıl değiştirebilirim?! ??
@AminM Geç yanıt verdiğim için üzgünüm, bu hesabı uzun süredir kontrol etmedim. Dosyayı IDA'da açın, giriş noktasının bulunduğu baytları bulun. Bir onaltılık düzenleyicide açın ve bir 0xCC'ye (kırılma noktası) ekleyin. Veya bu günlerde muhtemelen doğrudan IDA'da düzenleyebilirsiniz. İyi şanslar!
#2
+11
Ange
2013-03-30 01:43:20 UTC
view on stackexchange narkive permalink
  1. sürücü alt sistemini GUI olarak değiştirin (bunu kullanıcı modu ikili programına çevirin)
  2. içe aktarılan RVA'yı temizleyin veya bir dizi sahte çekirdek DLL'si kullanın (yalnızca 32 bit) içe aktarımların yüklenmesini etkinleştirmek için
  3. hata ayıklayıcınızda başlatın ve kullanıcı modundaymış gibi ilerleyin - muhtemelen orijinal Giriş Noktasına ulaşmadan önce bazı API çağrılarını simüle etmeniz gerekecektir.
#3
+8
ekse
2013-08-14 01:15:14 UTC
view on stackexchange narkive permalink

DriverInit işlevini INT3 ile yamalamaya bir alternatif, DriverInit'i çağırmaktan sorumlu olan IopLoadDriver işlevine bir kesme noktası koymaktır. Windows XP SP3'te kesme noktası, call dword ptr [edi + 2Ch] olan IopLoadDriver + 0x66a 'ya eklenmelidir (0x2C, _DRIVER_OBJECT.DriverInit'dir).

  1. x nt! IopLoadDriver ile IopLoadDriver'ı bulun
  2. IopLoadDriver + 0x66a'da bir kesme noktası ekleyin
  3. Sürücünüzü yükleyin ve başlatın

Diğer Windows sürümleri için ofsetler:

  • Windows 7 Pro SP1 32-bit Almanca: nt! IopLoadDriver + 0x7eb
  • Windows 7 Ultimate 64-bit ABD: nt! IopLoadDriver + 0xA04
  • Windows 10 Pro x64 ABD: nt! IopLoadDriver + 0x51C (Derleme 10586.420)

(Windows'un diğer sürümleri için ofsetleriniz varsa , lütfen bu yanıtı düzenleyin)

Güzel bilgi. Ters çevirici olarak bir araya getirebileceğiniz parçalara sahip olmak her zaman değerlidir. Ayrıca, ReactOS kaynak koduna bakarak Windows'ta uygulama ayrıntıları hakkında iyi bir tahminde bulunabileceğinizi unutmayın.
#4
+6
blabb
2013-08-14 05:43:33 UTC
view on stackexchange narkive permalink

nt! IopLoadDriver dolaylı çağrı yalnızca SERVICE_DEMAND start sürücü girişi için kullanılır

nt! IopInitializeBuiltInDriver üzerinde kırmanız gereken sürücüleri yüklerken önyükleme yapmak için dolaylı çağrı da

bu bağlantıdaki 17 numaralı & # 18 mesajında ​​kısa bir örnek görebilirsiniz

http://www.osronline.com/showthread.cfm ? link = 231280

Bu, sonsuza kadar beklemeye devam eden ve her an! drvobj ayrıntılarını yazdıran gc (önerilen şekilde gitmek yerine koşulludan gidin) kullanmak için biraz düzenlenmiş hareketsiz bir komut dosyasıdır sürücü bir çekirdek hata ayıklama oturumuna yüklendi

hiçbir kelime sarmalı komut tek satırda olmamalıdır

  .foreach / pS 1 / ps 10 (place {# call * dword * ptr * \ [* \ + * \] nt! IopInitializeBuiltinDriver}) {bu yer ".printf \"% msu \\ n \ ", poi (esp + 4); r $ t0 = poi (esp); gu ;! drvobj $ t0 2; gc "}. foreach / pS 1 / ps 10 (yer {# call * dword * ptr * \ [* \ + * \] nt! IoploadDriver}) {bu yer" .printf \ "% msu \\ n \ ", poi (esp + 4); r $ t1 = poi (esp); gu;! drv obj $ t1 2; gc "}  

xp sp3 vm

bağlı bir kd oturumunda do sxe ibp; .reboot kd, bu komut dosyasını çalıştırma bozuk olduğunda yeniden başlatmada bir ilk ara (boot.ini'deki / break anahtarına eşdeğer) isteyecektir

  $$ >a< "thisscript.extension"  kod> 

tüm sistem sürücüsü giriş noktalarını ve sürücü nesnelerini yazdırmanın yanı sıra

uygulamanız ek bir sürücü yüklerse, ayrıntıları da yazdırılacaktır

hedef sanal makinede açılan sysinternals dbgview için örnek bir çıktı

dbgv.sys giriş noktası, çekirdek yakalamayı etkinleştir'i (ctrl + k) işaretlediğinizde çağrılır

  \ REGISTRY \ MACHINE \ SYSTEM \ ControlSet001 \ Services \ DBGV *** HATA: Modül yüklemesi tamamlandı, ancak Dbgv.sysDriver nesnesi için semboller yüklenemedi (ffbd6248): \ Driver \ DBGVDriverEntry: f6d89185 DbgvDriverStartIo : 00000000 DriverUnload: 00000000 AddDevice: 00000000 Gönderme rutinleri:
[00] ırp_mj_create f6d87168 Dbgv + 0x1168 [01] IRP_MJ_CREATE_NAMED_PIPE 804fa87e puan! IopInvalidDeviceRequest [02] ırp_mj_close f6d87168 Dbgv + 0x1168 [03] ırp_mj_read 804fa87e puan! IopInvalidDeviceRequest [04] ırp_mj_wrıte 804fa87e puan! IopInvalidDeviceRequest [05] IRP_MJ_QUERY_INFORMATION 804fa87e puan! IopInvalidDeviceRequest 06 IRP_MJ_SET_INFORMATION 804fa87e puan! IopInvalidDeviceRequest [07] IRP_MJ_QUERY_EA 804fa87e puan! IopInvalidDeviceRequest [08] IRP_MJ_SET_EA 804fa87e puan! IopInvalidDeviceRequest [09] IRP_MJ_FLUSH_BUFFERS 804fa87e puan! IopInvalidDeviceRequest [0a] IRP_MJ_QUERY_VOLUME_INFORMATION 804fa87e puan! IopInvalidDeviceRequest [0b] IRP_MJ_SET_VOLUME_INFORMATION 804fa87e puan! IopInvalidDeviceRequest [0c] IRP_MJ_DIRECTORY_CONTROL 804fa87e nt! IopInvalidDeviceRequest [0d] IRP_MJ_FILE _SYSTEM_CONTROL 804fa87e puan! IopInvalidDeviceRequest [0e] ırp_mj_devıce_control f6d87168 Dbgv + 0x1168 [0f] IRP_MJ_INTERNAL_DEVICE_CONTROL 804fa87e noktaları! IopInvalidDeviceRequest [10] IRP_MJ_SHUTDOWN 804fa87e 11 puan! IopInvalidDeviceRequest IRP_MJ_LOCK_CONTROL 804fa87e 12 puan! IopInvalidDeviceRequest ırp_mj_cleanup 804fa87e puan! IopInvalidDeviceRequest [13] IRP_MJ_CREATE_MAILSLOT 804fa87e 14 puan! IopInvalidDeviceRequest IRP_MJ_QUERY_SECURITY 804fa87e 15 puan! IopInvalidDeviceRequest IRP_MJ_SET_SECURITY 804fa87e 16 puan! IopInvalidDeviceRequest IRP_MJ_POWER 804fa87e 17 puan! IopInvalidDeviceRequest IRP_MJ_SYSTEM_CONTROL 804fa87e 18 puan! IopInvalidDeviceRequest IRP_MJ_DEVICE_CHANGE 804fa87e 19 puan! IopInvalidDeviceRequest IRP_MJ_QUERY_QUOTA 804fa87e puan! IopInvalidDeviceRequest
[1a] IRP_MJ_SET_QUOTA 804fa87e nt! IopInvalidDeviceRequest [1b] IRP_MJ_PNP 804fa87e nt! IopInvalidDeviceRequest  


Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...