Skip to content

Hook 后 onCallBack 收到的参数数据不正确 #14

@xiaoxiayu

Description

@xiaoxiayu

使用 armHook 后,可以跳转到 onCallBack 的函数去,但是 onCallBack 参数收到的参数不正确。

使用方式是直接参考的 Demo 里的 bool InlineHook(void *pHookAddr, void (*onCallBack)(struct pt_regs *)), 只修改了 onCallBack,改成适合自己的格式。


// 头文件
typedef struct tagINLINEHOOKINFO{
    void *pHookAddr;
    void *pStubShellCodeAddr;  
    void*(*onCallBack)(void*, void*, void*); // onCallBack 改了下,和demo 里有点区别
    void ** ppOldFuncAddr;
    BYTE szbyBackupOpcodes[OPCODEMAXLEN]; 
    int backUpLength;
    int backUpFixLengthList[BACKUP_CODE_NUM_MAX]; 
    uint32_t *pNewEntryForOldFunction;
} INLINE_HOOK_INFO;

// Hook 实现
bool TestHooker::Hook(const char* name, void* org,  void*(*dest)(void*, void*, void*)) {
    bool bRet = false;

    if(org == NULL || dest == NULL)
    {
        return bRet;
    }

    INLINE_HOOK_INFO* pstInlineHook = new INLINE_HOOK_INFO();
    pstInlineHook->pHookAddr = org;
    pstInlineHook->onCallBack = dest;

    if(TEST_BIT0((uint32_t)pstInlineHook->pHookAddr)) { 
        if(HookThumb(pstInlineHook) == false) {
            delete pstInlineHook;
            return bRet;
        }
    } else {
        if(HookArm(pstInlineHook) == false) { // 使用的是 HookArm
            delete pstInlineHook;
            return bRet;
        }
    }
    m_InlineHookInfoPVec.push_back(pstInlineHook);
    Origin_getenv = *pstInlineHook->ppOldFuncAddr;
    return true;
}
// OnCallback 函数
void* CalledFunc(void* param0, void* param1, void* param2){
    std::string memStr = PrintBuffer(param0, 10);
     __android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "** %s **", memStr.c_str()); // **被调用后,打印出 ”50 30 02 e4 00 00 00 00 00 00“,内容是不正确的。**
    return ((void*(*)(void*, void*, void*))Origin_getenv)(param0, param1, param2);;
}

// 运行
Hook("test",  orgAddr, CalledFunc); // orgAddr 是从一个第三方 so 中获取出的函数地址。

Hook 运行后正确执行到了 CalledFunc, Orgigin_getenv 调用也正确,但参数的数据都不对了
有试过对同一个 so 的另一个只有一个参数的函数 hook过,运行是正常的。
测试机: Google Pixel2

刚接触 hook ,对 arm 和底层不大了解,哪位大佬能帮忙看下问题大概是出在哪里吗。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions