Arkadaşlar selamlar kernel koda biraz daha vakit ayırıp daha iyi bir yapı oluşturdum bu diğer basic koda göre biraz daha gelişmiş bir kod tabiki üstüne eklemeler yapılabilir.
#include <ntddk.h>
#intrin.h dosyasını dahil et
#define VGK_DRIVER_NAME L"\\Sürücü\\vgk"
#define SÜRÜCÜ_ADI L"\\Aygıt\\vgk_PLZNOHACK"
VOID Yazma Korumasını Devre Dışı Bırak() {
__writecr0(__readcr0() & ~(1 << 16));
}
VOID EnableWriteProtection() {
__writecr0(__readcr0() | (1 << 16));
}
NTSTATUS HideDriver(PDRIVER_OBJECT SürücüNesnesi) {
Yazma Korumasını Devre Dışı Bırak();
SürücüNesnesi->SürücüKaldırma = NULL;
SürücüNesnesi->SürücüBaşlangıcı = NULL;
YazmaKorumasınıEtkinleştir();
DURUM_BAŞARISI'nı döndür;
}
NTSTATUS BaypasVGK() {
PDRIVER_OBJECT SürücüNesnesi = NULL;
UNICODE_STRING SürücüAdı;
RtlInitUnicodeString(&DriverName, VGK_DRIVER_NAME);
NTSTATUS Durumu = IoGetDeviceObjectPointer(&SürücüAdı, GENEL_OKUMA, NULL, &SürücüNesnesi);
eğer (!NT_SUCCESS(Durum)) {
Durum'u geri döndür;
}
HideDriver(SürücüNesnesi);
ObDereferenceObject(SürücüNesnesi);
DURUM_BAŞARISI'nı döndür;
}
VOID PreventHookDetection() {
PVOID* EtwRoutine = (PVOID*)MmGetSystemRoutineAddress(&RtlFindExportedRoutineByName);
eğer (EtwRutin && *EtwRutin) {
Yazma Korumasını Devre Dışı Bırak();
*EtwRutin = (PVOID)0xCCCCCCCCCCCCCCCC;
YazmaKorumasınıEtkinleştir();
}
PVOID* ObRegRoutine = (PVOID*)MmGetSystemRoutineAddress(&ObRegisterGeriÇağrıları);
eğer (ObRegRoutine && *ObRegRoutine) {
Yazma Korumasını Devre Dışı Bırak();
*ObRegRoutine = NULL;
YazmaKorumasınıEtkinleştir();
}
}
VOID YamaHipervizörü() {
__writemsr(0xC0000082, 0);
}
VOID YamaPatchGuard() {
BAŞ cr4 = __readcr4();
cr4 &= ~((BAŞ)0x10);
__writecr4(cr4);
}
NTSTATUS SürücüGirişi(PDRIVER_OBJECT SürücüNesnesi, PUNICODE_STRING KayıtYolu) {
BAŞVURULMAMIŞ_PARAMETRE(KayıtYolu);
NTSTATUS Durumu;
Durum = BypassVGK();
eğer (!NT_SUCCESS(Durum)) {
DbgPrint("[HATA] VGK atlanamadı: %08X\n", Durum);
Durum'u geri döndür;
}
YamaHipervizörü();
YamaPatchGuard();
KancaAlgılamayıÖnle();
SürücüNesnesi->SürücüKaldırma = SürücüKaldırma;
DURUM_BAŞARISI'nı döndür;
}
VOID SürücüUnload(PDRIVER_OBJECT SürücüNesnesi) {
BAŞVURULMAMIŞ_PARAMETRE(SürücüNesnesi);
}
#include <ntddk.h>
#intrin.h dosyasını dahil et
#define VGK_DRIVER_NAME L"\\Sürücü\\vgk"
#define SÜRÜCÜ_ADI L"\\Aygıt\\vgk_PLZNOHACK"
VOID Yazma Korumasını Devre Dışı Bırak() {
__writecr0(__readcr0() & ~(1 << 16));
}
VOID EnableWriteProtection() {
__writecr0(__readcr0() | (1 << 16));
}
NTSTATUS HideDriver(PDRIVER_OBJECT SürücüNesnesi) {
Yazma Korumasını Devre Dışı Bırak();
SürücüNesnesi->SürücüKaldırma = NULL;
SürücüNesnesi->SürücüBaşlangıcı = NULL;
YazmaKorumasınıEtkinleştir();
DURUM_BAŞARISI'nı döndür;
}
NTSTATUS BaypasVGK() {
PDRIVER_OBJECT SürücüNesnesi = NULL;
UNICODE_STRING SürücüAdı;
RtlInitUnicodeString(&DriverName, VGK_DRIVER_NAME);
NTSTATUS Durumu = IoGetDeviceObjectPointer(&SürücüAdı, GENEL_OKUMA, NULL, &SürücüNesnesi);
eğer (!NT_SUCCESS(Durum)) {
Durum'u geri döndür;
}
HideDriver(SürücüNesnesi);
ObDereferenceObject(SürücüNesnesi);
DURUM_BAŞARISI'nı döndür;
}
VOID PreventHookDetection() {
PVOID* EtwRoutine = (PVOID*)MmGetSystemRoutineAddress(&RtlFindExportedRoutineByName);
eğer (EtwRutin && *EtwRutin) {
Yazma Korumasını Devre Dışı Bırak();
*EtwRutin = (PVOID)0xCCCCCCCCCCCCCCCC;
YazmaKorumasınıEtkinleştir();
}
PVOID* ObRegRoutine = (PVOID*)MmGetSystemRoutineAddress(&ObRegisterGeriÇağrıları);
eğer (ObRegRoutine && *ObRegRoutine) {
Yazma Korumasını Devre Dışı Bırak();
*ObRegRoutine = NULL;
YazmaKorumasınıEtkinleştir();
}
}
VOID YamaHipervizörü() {
__writemsr(0xC0000082, 0);
}
VOID YamaPatchGuard() {
BAŞ cr4 = __readcr4();
cr4 &= ~((BAŞ)0x10);
__writecr4(cr4);
}
NTSTATUS SürücüGirişi(PDRIVER_OBJECT SürücüNesnesi, PUNICODE_STRING KayıtYolu) {
BAŞVURULMAMIŞ_PARAMETRE(KayıtYolu);
NTSTATUS Durumu;
Durum = BypassVGK();
eğer (!NT_SUCCESS(Durum)) {
DbgPrint("[HATA] VGK atlanamadı: %08X\n", Durum);
Durum'u geri döndür;
}
YamaHipervizörü();
YamaPatchGuard();
KancaAlgılamayıÖnle();
SürücüNesnesi->SürücüKaldırma = SürücüKaldırma;
DURUM_BAŞARISI'nı döndür;
}
VOID SürücüUnload(PDRIVER_OBJECT SürücüNesnesi) {
BAŞVURULMAMIŞ_PARAMETRE(SürücüNesnesi);
}