Sign in to follow this  
Followers 0
john123

Disable Driver Unsigning

2 posts in this topic

Hello everyone!

I search google and get below code in VC++ to disable driver unsigning, it work well.

Can anybody convert it to AutoIT3?

Thanks for you help!

#include <windows.h>
#include <wincrypt.h>
#include <stdio.h>

#define HP_HASHVALUE HP_HASHVAL

//* This program turns the Driver signing Policy On/Off for Windows XP */
// * Written by Stefan 'Sec' Zehl <sec@xxxxxx>, 15.11.2004
// *
// * Thanks to sysinternals.com for regmon and apispy
// *        to msdn.microsoft.com for windows reference
// *        to cygwin for their environment
// *

void MyHandleError(char *s){
    printf("Error: %s, number %x\n.",s,(unsigned int)GetLastError());
    exit(1);
}
//--------------------------------------------------------------------
int main(void){
    HCRYPTPROV hCryptProv;
    HCRYPTHASH hHash;
    BYTE data[16];
    DWORD len;
    DWORD seed;
    HKEY hkey;
    BYTE onoff=0; // This is the On/Off toggle
    char input[4];
    int x;

    // HKLM\System\WPA\PnP\seed
    if(RegOpenKeyEx(
            HKEY_LOCAL_MACHINE,
            "System\\WPA\\PnP",
            0,
            KEY_READ,
            &hkey
            )==ERROR_SUCCESS){
        printf("RegOpenKey sucess\n");
    }else{
        printf("RegOpenKey failure\n");
    };

    len=sizeof(seed);
    if(RegQueryValueEx(
            hkey,
            "seed",
            NULL,
            NULL,
            (BYTE*)&seed,
            &len
            )==ERROR_SUCCESS){
        printf("RegQueryValue sucess\n");
    }else{
        printf("RegQueryValue failure\n");
    };

    if(hkey)
        RegCloseKey(hkey);

    printf("Seed=%x\n",(unsigned int)seed);

    printf("Hello, World\n");
    if(CryptAcquireContext(
                &hCryptProv, 
                NULL, 
                NULL, 
                PROV_RSA_FULL, 
            //  0)) 
                CRYPT_VERIFYCONTEXT))
    {
        printf("CryptAcquireContext complete. \n");
    } else {
        MyHandleError("Acquisition of context failed.");
    }
    //--------------------------------------------------------------------
    // Create a hash object.

    if(CryptCreateHash(
                hCryptProv, 
                CALG_MD5, 
                0, 
                0, 
                &hHash)) 
    {
        printf("An empty hash object has been created. \n");
    } else {
        MyHandleError("Error during CryptBeginHash!\n");
    }
    //--------------------------------------------------------------------
    // Compute the cryptographic hash on the data.

    input[0]=0;
    input[1]=onoff; // This is the Value!
    input[2]=0;
    input[3]=0;

    if(CryptHashData(
            hHash,
            input,
            sizeof(input),
            0))
    {
        printf("The data has been hashed. \n");
    } else {
        MyHandleError("Error during CPHashData!\n");
    }
    //--------------------------------------------------------------------

    if(CryptHashData(
            hHash,
            (BYTE*)&seed,
            sizeof(seed),
            0))
    {
        printf("The data has been hashed. \n");
    } else {
        MyHandleError("Error during CPHashData!\n");
    }
    //--------------------------------------------------------------------
    len=sizeof(data);
    if( CryptGetHashParam(
            hHash,
            HP_HASHVALUE,
            data,
            &len,
            0))
    {
        printf("The hash has been retrieved. \n");
    } else {
        MyHandleError("Error during CPGetHashParam!\n");
    }

    //--------------------------------------------------------------------
    // Clean up.

    // Destroy the hash object.

    if(hHash) {
        if(!(CryptDestroyHash(hHash)))
            MyHandleError("Error during CryptDestroyHash");
    }

    // Release the CSP.

    if(hCryptProv) {
        if(!(CryptReleaseContext(hCryptProv,0)))
            MyHandleError("Error during CryptReleaseContext");
    }

    printf("Hash: ");
    for(x=0;x<sizeof(data);x++){
        printf("%x ",data[x]);
    };
    printf("\nCreate md5 hash completed without error. \n");

    //--------------------------------------------------------------------
    // HKLM\Software\Microsoft\Windows\CurrentVersion\Setup\PrivateHash
    if(RegOpenKeyEx(
            HKEY_LOCAL_MACHINE,
            "Software\\Microsoft\\Windows\\CurrentVersion\\Setup",
            0,
            KEY_WRITE,
            &hkey
            )==ERROR_SUCCESS){
        printf("RegOpenKey sucess\n");
    }else{
        printf("RegOpenKey failure\n");
    };

    len=sizeof(seed);
    if(RegSetValueEx(
            hkey,
            "PrivateHash",
            0,
            REG_BINARY,
            data,
            sizeof(data)
            )==ERROR_SUCCESS){
        printf("RegSetValueEx sucess\n");
    }else{
        printf("RegSetValueEx failure\n");
    };

    if(hkey)
        RegCloseKey(hkey);
    //--------------------------------------------------------------------
    // HKLM\Software\Microsoft\Driver Signing\Policy
    if(RegOpenKeyEx(
            HKEY_CURRENT_USER,
            "Software\\Microsoft\\Driver Signing",
            0,
            KEY_WRITE,
            &hkey
            )==ERROR_SUCCESS){
        printf("RegOpenKey sucess\n");
    }else{
        printf("RegOpenKey failure\n");
    };

    len=sizeof(seed);
    if(RegSetValueEx(
            hkey,
            "Policy",
            0,
            REG_BINARY,
            &onoff,
            1
            )==ERROR_SUCCESS){
        printf("RegSetValueEx sucess\n");
    }else{
        printf("RegSetValueEx failure\n");
    };
    if(hkey)
        RegCloseKey(hkey);

    //--------------------------------------------------------------------
    // HKLM\Software\Microsoft\Driver Signing\Policy
    if(RegOpenKeyEx(
            HKEY_LOCAL_MACHINE,
            "Software\\Microsoft\\Driver Signing",
            0,
            KEY_WRITE,
            &hkey
            )==ERROR_SUCCESS){
        printf("RegOpenKey sucess\n");
    }else{
        printf("RegOpenKey failure\n");
    };

    len=sizeof(seed);
    if(RegSetValueEx(
            hkey,
            "Policy",
            0,
            REG_BINARY,
            &onoff,
            1
            )==ERROR_SUCCESS){
        printf("RegSetValueEx sucess\n");
    }else{
        printf("RegSetValueEx failure\n");
    };
    if(hkey)
        RegCloseKey(hkey);

    exit(0);
}

Share this post


Link to post
Share on other sites



Hello everyone!

I search google and get below code in VC++ to disable driver unsigning, it work well.

Can anybody convert it to AutoIT3?

Thanks for you help!

If that works well, why not just use it? Note limitations on changing that registry key in XP and above: KB298503: Driver signing registry values cannot be modified directly in Windows

;)


Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0