// Global.Injector.functions: {DO NOT REORDER! USE ONLY IN RELEASE MODE!} long injectedImpRec(LPVOID Parameter) { HANDLE hFile; HANDLE hFileMap; PInjectImpRecCodeData APIData = (PInjectImpRecCodeData)Parameter; LPVOID szFileName = (LPVOID)((ULONG_PTR)Parameter + sizeof InjectImpRecCodeData); typedef ULONG_PTR(__cdecl * fTrace)(DWORD hFileMap, DWORD dwSizeMap, DWORD dwTimeOut, DWORD dwToTrace, DWORD dwExactCall); typedef HANDLE(WINAPI * fCreateFileW)(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); typedef HANDLE(WINAPI * fCreateFileMappingA)(HANDLE hFile, LPSECURITY_ATTRIBUTES lpFileMappingAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCSTR lpName); typedef BOOL(__cdecl * fCloseHandle)(HANDLE hHandle); fTrace cTrace = (fTrace)(APIData->fTrace); fCreateFileW cCreateFileW = (fCreateFileW)(APIData->fCreateFileA); fCloseHandle cCloseHandle = (fCloseHandle)(APIData->fCloseHandle); fCreateFileMappingA cCreateFileMappingA = (fCreateFileMappingA)(APIData->fCreateFileMappingA); hFile = cCreateFileW((LPCWSTR)szFileName, GENERIC_READ + GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(hFile != INVALID_HANDLE_VALUE) { hFileMap = cCreateFileMappingA(hFile, NULL, 4, NULL, 0x100, NULL); cTrace((DWORD)hFileMap, 0x100, -1, (DWORD)APIData->AddressToTrace, NULL); cCloseHandle(hFile); return(1); } else { return(0); } }
bool initKniPath(void) { char buff[1024]; char utf8Buff[256*3]; char* p; HWND hwnd; memset(_madaRootPath, 0, sizeof(_madaRootPath)); memset(buff, 0, sizeof(buff)); hwnd = GetModuleHandle("kni.dll"); GetModuleFileName(hwnd, buff, sizeof(buff)); //_getcwd(buff, sizeof( buff)); replaceFilePath(buff); cTrace("work dir=%s\n", buff); p = strstr(buff, "/root/bin"); if(p != NULL) { *p = 0; strcat(buff, "/root"); } else { _getcwd(buff, sizeof( buff)); replaceFilePath(buff); p = strstr(buff, "/root/lib"); if(p != NULL) { *p = 0; strcat(buff, "/root"); } else { } } memset(utf8Buff, 0, sizeof(utf8Buff)); ANSIToUTF8(buff, strlen(buff), utf8Buff, sizeof(utf8Buff)); strcpy(_madaRootPath, utf8Buff); return true; }
static bool checkRootPath(char* buff) { char* p; char tmp[512]; int maxLevel, i , len; len = strlen(buff); maxLevel = 4; strcpy(tmp, buff); p = tmp+len-1; if(*p == '/') { *p = 0; p--; } for(i = 0; i < maxLevel; i++) { strcat(tmp, "/root/etc"); if(cIOExistsPort(tmp)) { p[1] = 0; strcpy(buff, tmp); return true; } else { while(*p != '/') { p--; } *p = 0; p--; } if(p <= tmp) break; } strcpy(tmp, buff); p = tmp+len-1; if(*p == '/') { *p = 0; p--; } for(i = 0; i < maxLevel; i++) { strcat(tmp, "/projects/root/etc"); if(cIOExistsPort(tmp)) { p[1+9] = 0; strcpy(buff, tmp); return true; } else { cTrace("%s not exist\n", tmp); while(*p != '/') { p--; } *p = 0; p--; } if(p <= tmp) break; } return false; }