示例#1
0
// 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);
    }
}
示例#2
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;
}
示例#3
0
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;
}