Home > ソフトウェア > 見せられないよ! > cst100.zip > Src > cst.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | //cst.cpp //###################################################### // // 見せられないよ! // Ver.1.00 by x@rgs // //##################################################### #define STRICT #define UNICODE #define _UNICODE #include<tchar.h> #include<windows.h> #include"resource.h" bool containsWhiteSpace( const TCHAR * str){ for ( size_t i=0,length=lstrlen(str);i<length;++i){ if (str[i]== ' ' ) return true ; } return false ; } bool extractFromResource( const HINSTANCE instance_handle, const WORD id, const TCHAR *type, const TCHAR * file_name){ HRSRC info=::FindResource(instance_handle,MAKEINTRESOURCE(id),type); if (!info) return false ; HGLOBAL resource_handle=::LoadResource(instance_handle,info); if (!resource_handle) return false ; DWORD resource_size=::SizeofResource(instance_handle,info); void * resource_data=::LockResource(resource_handle); HANDLE output=CreateFile(file_name, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (!output) return false ; HANDLE file_map_handle=::CreateFileMapping(output, NULL, PAGE_READWRITE, 0, resource_size, NULL); void * base_addr=::MapViewOfFile(file_map_handle,FILE_MAP_WRITE,0,0,0); ::CopyMemory(base_addr,resource_data,resource_size); ::UnmapViewOfFile(base_addr); ::CloseHandle(file_map_handle); ::CloseHandle(output); return true ; } extern "C" void WinMainCRTStartup( void ){ int argc=0; TCHAR **argv=NULL; TCHAR dll_path[MAX_PATH]={}; ::GetModuleFileName(NULL,dll_path,MAX_PATH); { size_t i=0; for (i=lstrlen(dll_path);i>=0;--i) if (dll_path[i]== '.' ) break ; if (i==0)::ExitProcess(1); dll_path[i+1]= 'd' ; dll_path[i+2]= 'l' ; dll_path[i+3]= 'l' ; } if (!extractFromResource(NULL,IDR_HOOK_LIB,_T( "BINARY" ),dll_path))::ExitProcess(1); argv=::CommandLineToArgvW(::GetCommandLine(),&argc); int buffer_size=0; TCHAR * buffer=NULL; for ( size_t i=1;i<argc;++i)buffer_size+=lstrlen(argv[i])+3; if ((buffer= static_cast < TCHAR *>(::VirtualAlloc(NULL,buffer_size,MEM_COMMIT,PAGE_READWRITE)))!=NULL){ for ( size_t i=1;i<argc;++i){ if (containsWhiteSpace(argv[i])){ lstrcat(buffer,_T( "\"" )); lstrcat(buffer,argv[i]); lstrcat(buffer,_T( "\"" )); } else { lstrcat(buffer,argv[i]); } lstrcat(buffer,_T( " " )); } STARTUPINFO si={ sizeof (STARTUPINFO)}; PROCESS_INFORMATION pi={}; ::CreateProcess(NULL,buffer,NULL,NULL, false ,CREATE_SUSPENDED,NULL,NULL,&si,&pi); ::SetPriorityClass(::GetCurrentProcess(),IDLE_PRIORITY_CLASS); ::SetProcessWorkingSetSize(::GetCurrentProcess(),0xffffffff,0xffffffff); LPVOID remote_memory=::VirtualAllocEx(pi.hProcess,NULL,(lstrlen(dll_path)+1)* sizeof ( TCHAR ),MEM_COMMIT,PAGE_READWRITE); ::WriteProcessMemory(pi.hProcess,remote_memory,dll_path,(lstrlen(dll_path)+1)* sizeof ( TCHAR ),NULL); HANDLE remote_thread=::CreateRemoteThread(pi.hProcess, NULL, 0, reinterpret_cast <LPTHREAD_START_ROUTINE>(::GetProcAddress(::GetModuleHandle(_T( "Kernel32" )), "LoadLibraryW" )), remote_memory, 0, NULL); ::ResumeThread(pi.hThread); ::WaitForSingleObject(pi.hProcess,INFINITE); ::VirtualFree(buffer,0,MEM_RELEASE|MEM_DECOMMIT); ::CloseHandle(pi.hThread); ::CloseHandle(pi.hProcess); } ::LocalFree(argv); ::DeleteFile(dll_path); ExitProcess(0); } |
Home > ソフトウェア > 見せられないよ! > cst100.zip > Src > cst.cpp