Eleethal
6th July 2004, 01:09
If anyone else wants to try to tackle PunkBuster with a similar project, here is the source for the DLL. Take note the hook is missing because it is used in other private hacks and the coder who leant it for this DLL asked for it not to be republished.
BOOL (WINAPI *p_DeviceIoControl)( HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped );
BOOL WINAPI h_DeviceIoControl( HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped )
{
BOOL out = p_DeviceIoControl( hDevice, dwIoControlCode, lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped );
char iotype[255];
if(dwIoControlCode == IOCTL_STORAGE_QUERY_PROPERTY) {
strcpy(iotype,"IOCTL_STORAGE_QUERY_PROPERTY");
} else if(dwIoControlCode == DFP_GET_VERSION) {
strcpy(iotype,"DFP_GET_VERSION");
} else if(dwIoControlCode == DFP_SEND_DRIVE_COMMAND) {
strcpy(iotype,"DFP_SEND_DRIVE_COMMAND");
} else if(dwIoControlCode == DFP_RECEIVE_DRIVE_DATA) {
strcpy(iotype,"DFP_RECEIVE_DRIVE_DATA");
} else {
sprintf(iotype,"UNKNOWN'%d'",dwIoControlCode);
}
add_log("DeviceIoControl(%08X,%s)==%d",hDevice, iotype, out);
if(out) {
// Listed in order as called by Punkbuster
if(dwIoControlCode == IOCTL_STORAGE_QUERY_PROPERTY) {
STORAGE_DEVICE_DESCRIPTOR* descrip = (STORAGE_DEVICE_DESCRIPTOR*)lpOutBuffer;
add_log("Results from IOCTL_STORAGE_QUERY_PROPERTY:");
if(descrip->VendorIdOffset) { add_log("VendorId=%s",descrip+descrip->VendorIdOffset); }
else { add_log("VendorId=[FAILED]"); }
if(descrip->ProductIdOffset) { add_log("ProductId=%s",(DWORD)descrip+descrip->ProductIdOffset); }
else { add_log("ProductIdOffset=[FAILED]"); }
if(descrip->SerialNumberOffset) {
char* serial = (char*)((DWORD)descrip+descrip->SerialNumberOffset);
add_log("SerialNumber=%s",serial);
for(int n = 0; n < 10; n++)
serial[n] = '0' + (rand() % 10);
add_log("New SerialNumber=%s",serial);
}
else { add_log("SerialNumber=[FAILED]"); }
} else if(dwIoControlCode == DFP_GET_VERSION) {
// Get version info about harddrive
// Do not need to hook this....
} else if(dwIoControlCode == DFP_SEND_DRIVE_COMMAND) {
// Not sure yet
} else if(dwIoControlCode == DFP_RECEIVE_DRIVE_DATA) {
// After looking at some sample code do not feel like coding this yet
memset(lpOutBuffer, '0', nOutBufferSize);
add_log("Failing DFP_RECEIVE_DRIVE_DATA...");
return 0;
}
}
return out;
}
HANDLE (WINAPI *p_CreateFileA)( LPCTSTR lpszName, DWORD fdwAccess, DWORD fdwShareMode, LPSECURITY_ATTRIBUTES lpsa, DWORD fdwCreate, DWORD fdwAttrsAndFlags, HANDLE hTemplateFile );
HANDLE WINAPI h_CreateFileA( LPCTSTR lpszName, DWORD fdwAccess, DWORD fdwShareMode, LPSECURITY_ATTRIBUTES lpsa, DWORD fdwCreate, DWORD fdwAttrsAndFlags, HANDLE hTemplateFile )
{
HANDLE out = p_CreateFileA( lpszName, fdwAccess, fdwShareMode, lpsa, fdwCreate, fdwAttrsAndFlags, hTemplateFile );
if (strstr(lpszName,"\\\\.\\")) {
if(out == (HANDLE)0xFFFFFFFF) {
add_log("Openning->%s [FAILED]",lpszName);
} else {
add_log("Openning->%s Handle->%08X",lpszName,out);
}
}
return out;
}
void HookStuffUp()
{
add_log("--HW SPOOFER---");
srand( (unsigned)time( NULL ) );
HookFunction((DWORD)DeviceIoControl,(DWORD)h_Devic eIoControl,(DWORD)&p_DeviceIoControl);
HookFunction((DWORD)CreateFileA,(DWORD)h_CreateFil eA,(DWORD)&p_CreateFileA);
MessageBox(0,"harddrive spoofer activated",0,0);
}
This code (for those who didn't know) is in C++, you n00bs can find great C++ tutorials on this site in the tutorials sectiopn if you want to try to make anything relevant to America's Army.
BOOL (WINAPI *p_DeviceIoControl)( HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped );
BOOL WINAPI h_DeviceIoControl( HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped )
{
BOOL out = p_DeviceIoControl( hDevice, dwIoControlCode, lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped );
char iotype[255];
if(dwIoControlCode == IOCTL_STORAGE_QUERY_PROPERTY) {
strcpy(iotype,"IOCTL_STORAGE_QUERY_PROPERTY");
} else if(dwIoControlCode == DFP_GET_VERSION) {
strcpy(iotype,"DFP_GET_VERSION");
} else if(dwIoControlCode == DFP_SEND_DRIVE_COMMAND) {
strcpy(iotype,"DFP_SEND_DRIVE_COMMAND");
} else if(dwIoControlCode == DFP_RECEIVE_DRIVE_DATA) {
strcpy(iotype,"DFP_RECEIVE_DRIVE_DATA");
} else {
sprintf(iotype,"UNKNOWN'%d'",dwIoControlCode);
}
add_log("DeviceIoControl(%08X,%s)==%d",hDevice, iotype, out);
if(out) {
// Listed in order as called by Punkbuster
if(dwIoControlCode == IOCTL_STORAGE_QUERY_PROPERTY) {
STORAGE_DEVICE_DESCRIPTOR* descrip = (STORAGE_DEVICE_DESCRIPTOR*)lpOutBuffer;
add_log("Results from IOCTL_STORAGE_QUERY_PROPERTY:");
if(descrip->VendorIdOffset) { add_log("VendorId=%s",descrip+descrip->VendorIdOffset); }
else { add_log("VendorId=[FAILED]"); }
if(descrip->ProductIdOffset) { add_log("ProductId=%s",(DWORD)descrip+descrip->ProductIdOffset); }
else { add_log("ProductIdOffset=[FAILED]"); }
if(descrip->SerialNumberOffset) {
char* serial = (char*)((DWORD)descrip+descrip->SerialNumberOffset);
add_log("SerialNumber=%s",serial);
for(int n = 0; n < 10; n++)
serial[n] = '0' + (rand() % 10);
add_log("New SerialNumber=%s",serial);
}
else { add_log("SerialNumber=[FAILED]"); }
} else if(dwIoControlCode == DFP_GET_VERSION) {
// Get version info about harddrive
// Do not need to hook this....
} else if(dwIoControlCode == DFP_SEND_DRIVE_COMMAND) {
// Not sure yet
} else if(dwIoControlCode == DFP_RECEIVE_DRIVE_DATA) {
// After looking at some sample code do not feel like coding this yet
memset(lpOutBuffer, '0', nOutBufferSize);
add_log("Failing DFP_RECEIVE_DRIVE_DATA...");
return 0;
}
}
return out;
}
HANDLE (WINAPI *p_CreateFileA)( LPCTSTR lpszName, DWORD fdwAccess, DWORD fdwShareMode, LPSECURITY_ATTRIBUTES lpsa, DWORD fdwCreate, DWORD fdwAttrsAndFlags, HANDLE hTemplateFile );
HANDLE WINAPI h_CreateFileA( LPCTSTR lpszName, DWORD fdwAccess, DWORD fdwShareMode, LPSECURITY_ATTRIBUTES lpsa, DWORD fdwCreate, DWORD fdwAttrsAndFlags, HANDLE hTemplateFile )
{
HANDLE out = p_CreateFileA( lpszName, fdwAccess, fdwShareMode, lpsa, fdwCreate, fdwAttrsAndFlags, hTemplateFile );
if (strstr(lpszName,"\\\\.\\")) {
if(out == (HANDLE)0xFFFFFFFF) {
add_log("Openning->%s [FAILED]",lpszName);
} else {
add_log("Openning->%s Handle->%08X",lpszName,out);
}
}
return out;
}
void HookStuffUp()
{
add_log("--HW SPOOFER---");
srand( (unsigned)time( NULL ) );
HookFunction((DWORD)DeviceIoControl,(DWORD)h_Devic eIoControl,(DWORD)&p_DeviceIoControl);
HookFunction((DWORD)CreateFileA,(DWORD)h_CreateFil eA,(DWORD)&p_CreateFileA);
MessageBox(0,"harddrive spoofer activated",0,0);
}
This code (for those who didn't know) is in C++, you n00bs can find great C++ tutorials on this site in the tutorials sectiopn if you want to try to make anything relevant to America's Army.