首页
社区
课程
招聘
[原创]趁手的Hooker,代码还原之前的准备
发表于: 2023-1-25 22:20 7672

[原创]趁手的Hooker,代码还原之前的准备

2023-1-25 22:20
7672

一个趁手的Hook于逆向代码还原工作而言,犹如一个趁手的兵器于战场上的战士。通过搜罗不同的Hook库,找到了一份适合个人的Hook模块。因为原模块是针对一个游戏的,所以Hook库本身有较多游戏元素的代码片段。于是为了便于日后的使用,本人经过了一些裁剪,以满足自己目前的需求。该模块目前只支持x86,但于个人而言,够用。后续如果有X64需求,再寻求改动。

下面写了一些测试代码,记录和说明模块的用途和用法。测试结果先出:
图片描述

接下来是代码说明:

完整测试代码如下:

Hooker模块如下附件。

 
 
 
#include <Windows.h>
#include<stdio.h>
 
#include "./Plugin/Hooker/Hooker.h"
 
class MathMethod
{
public:
    __declspec(noinline) int add(int a, int b)
    {
        int nResult = a + b;
        printf("methold add, result: %d\n", nResult);
        return nResult;
    }
 
    __declspec(noinline) int mul(int a, int b)
    {
        int nResult = a * b;
        printf("methold mul, result: %d\n", nResult);
        return nResult;
    }
 
    __declspec(noinline) int algorithm(int a, int b)
    {
        int nResult = mul(add(a, b), 10);
        printf("algorithm result: %d\n", nResult);
        return nResult;
    }
};
 
 
class MathMethodFake
{
public:
    __declspec(noinline) int add(int a, int b)
    {
        printf("LINE %d : a=%d, b=%d\n", __LINE__, a, b);
        return a + b;
    }
 
    __declspec(noinline) int mul(int a, int b)
    {
        return plugin::CallMethodAndReturn<int, 0x0401280, MathMethodFake*, int, int>(this, a, b);
    }
 
    __declspec(noinline) int algorithm(int a, int b)
    {
        int nResult = mul(add(a, b), 20);
        printf("algorithm result: %d\n", nResult);
        return nResult;
    }
};
 
 
int main(int argc, char* argv[])
{
    int nResult = 0;
    volatile int a(2), b(3);
    MathMethod mathMethod;
    nResult = mathMethod.algorithm(a, b);
    printf("LINE %d : nResult=%d\n", __LINE__, nResult);
    printf("LINE %d :\n &MathMethod::mul->%p,\t&MathMethod::algorithm->%p,\t&MathMethod::add->%p\n", __LINE__
        , &MathMethod::mul, &MathMethod::algorithm, &MathMethod::add);
 
    printf("\n-----------Hook start...\n");
 
    ReversibleHooks::Install("MathMethodFake", "add", 0x0401260, &MathMethodFake::add);
    ReversibleHooks::Install("MathMethodFake", "algorithm", 0x04012A0, &MathMethodFake::algorithm);
    nResult = mathMethod.algorithm(a, b);
    printf("LINE %d : nResult=%d\n", __LINE__, nResult);
 
    system("pause");
    return 0;
}
#include <Windows.h>
#include<stdio.h>
 
#include "./Plugin/Hooker/Hooker.h"
 
class MathMethod
{
public:
    __declspec(noinline) int add(int a, int b)
    {
        int nResult = a + b;
        printf("methold add, result: %d\n", nResult);
        return nResult;
    }
 
    __declspec(noinline) int mul(int a, int b)
    {
        int nResult = a * b;
        printf("methold mul, result: %d\n", nResult);
        return nResult;
    }
 
    __declspec(noinline) int algorithm(int a, int b)
    {
        int nResult = mul(add(a, b), 10);
        printf("algorithm result: %d\n", nResult);
        return nResult;
    }
};
 
 
class MathMethodFake
{

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2023-1-25 22:43 被_THINCT编辑 ,原因:
上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//