91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 12KB
    文件類型: .7z
    金幣: 1
    下載: 0 次
    發(fā)布日期: 2021-06-03
  • 語言: C/C++
  • 標簽: HookAPI??detours??

資源簡介

VC++源碼 一個使用detours來HookAPI的簡單例子 DeviceIoControl獲取硬盤串號 GetAdaptersInfo獲取MAC Hook這兩個API改變獲取的硬盤串號和MAC地址 HDHook工程 生成dll GetHDDSN工程 載入生成的dll 獲取硬盤串號和MAC地址 需要自行安裝detours

資源截圖

代碼片段和文件信息

//?GetHDDSN.cpp?:?定義控制臺應用程序的入口點。
//Notic:雖然使用了_T的寫法,但是不能開啟UNICODE

#include?“stdafx.h“
#include?
#include?
#include?
//#include?
#include?

#pragma?comment?(?lib?“iphlpapi.lib“?)?

BOOL?GetPhyDriveSerial();
void?ToLittleEndian(PUSHORT?pWords?int?nFirstIndex?int?nLastIndex?LPTSTR?pBuf);
void?TrimStart(LPTSTR?pBuf);
void?GetMAC();

int?_tmain(int?argc?_TCHAR*?argv[])
{
LoadLibrary(_T(“C:\\HDHook.dll“));
GetPhyDriveSerial();
GetMAC();
getchar();
return?0;
}

//
//?Model?Number:?40?ASCII?Chars
//?SerialNumber:?20?ASCII?Chars
//
BOOL?GetPhyDriveSerial()
{
TCHAR?szModelNo[41]szSerialNo[21]szSerialNo2[21];
PBYTE?pSerial=nullptr;
ZeroMemory(szModelNo41);
ZeroMemory(szSerialNo21);
ZeroMemory(szSerialNo221);
//-1是因為?SENDCMDOUTPARAMS?的結(jié)尾是?BYTE?bBuffer[1];
BYTE?IdentifyResult[sizeof(SENDCMDOUTPARAMS)?+?IDENTIFY_BUFFER_SIZE?-?1];
BYTE?pBuffer[sizeof(STORAGE_DEVICE_DEscriptOR)+512];?
DWORD?dwBytesReturned;
GETVERSIONINPARAMS?get_version;
SENDCMDINPARAMS?send_cmd?=?{?0?};

HANDLE?hFile?=?CreateFile(_T(“\\\\.\\PHYSICALDRIVE0“)?GENERIC_READ?|?GENERIC_WRITE????
FILE_SHARE_READ?|?FILE_SHARE_WRITE?NULL?OPEN_EXISTING?0?NULL);
if(hFile?==?INVALID_HANDLE_VALUE)
return?FALSE;

//get?version
DeviceIoControl(hFile?SMART_GET_VERSION?NULL?0
&get_version?sizeof(get_version)?&dwBytesReturned?NULL);

//identify?device
send_cmd.irDriveRegs.bCommandReg?=?(get_version.bIDEDeviceMap?&?0x10)??ATAPI_ID_CMD?:?ID_CMD;
DeviceIoControl(hFile?SMART_RCV_DRIVE_DATA?&send_cmd?sizeof(SENDCMDINPARAMS)?-?1
IdentifyResult?sizeof(IdentifyResult)?&dwBytesReturned?NULL);

DeviceIoControl(hFile?IOCTL_STORAGE_QUERY_PROPERTY?&send_cmd?sizeof(SENDCMDINPARAMS)?-?1
pBuffer?sizeof(pBuffer)?&dwBytesReturned?NULL);
CloseHandle(hFile);

//for?(int?j=0;j // printf(“%d:%d??%c\n“jpBuffer[j]pBuffer[j]);

pSerial=pBuffer+((PSTORAGE_DEVICE_DEscriptOR)pBuffer)->SerialNumberOffset;
if?(((PSTORAGE_DEVICE_DEscriptOR)pBuffer)->SerialNumberOffset&&dwBytesReturned-((PSTORAGE_DEVICE_DEscriptOR)pBuffer)->SerialNumberOffset>1)
for?(int?i=0;i<19;i++)
{
szSerialNo2[i+1]=(pSerial[2*i]<<4)+(pSerial[2*i+1]&0x0F)+((pSerial[2*i+1]>>6)*0x09);
i++;
szSerialNo2[i-1]=(pSerial[2*i]<<4)+(pSerial[2*i+1]&0x0F)+((pSerial[2*i+1]>>6)*0x09);
}

//adjust?the?byte?order
PUSHORT?pWords?=?(USHORT*)(((SENDCMDOUTPARAMS*)IdentifyResult)->bBuffer);
ToLittleEndian(pWords?27?46?szModelNo);
ToLittleEndian(pWords?10?19?szSerialNo);
TrimStart(szSerialNo);
TrimStart(szSerialNo2);
_tprintf(_T(“Model?Number:%s\n“)szModelNo);
_tprintf(_T(“SMART_RCV_DRIVE_DATA?Serial:%s\n“)szSerialNo);
_tprintf(_T(“IOCTL_STORAGE_QUERY_PROPERTY?Serial:%s\n“)szSerialNo2);
return?TRUE;
}

//把WORD數(shù)組調(diào)整字節(jié)序為little-endian,并濾除字符串結(jié)尾的空格。
void?ToLittleEndian(PUSHORT?pWords?int?nFirstIndex?int?nLastIndex?LPTS

評論

共有 條評論