C++友元函数获取成员变量(作为调试后门程序)

C++友元函数获取成员变量(作为调试后门程序)

一.源码例子:

[user:Backdoor] ls
main.cpp
[user:Backdoor] cat main.cpp
/// @file main.cpp
/// @brief
/// @author EastonWoo
/// 0.01
/// @date 2012-12-24

#include <stdio.h>

#define DEBUG_BACKDOOR //后门宏

typedef struct s_hello
{
    int aa;
    char bb;
    int cc;
}s_hello;

class CTest
{
public:
    CTest()
    {
        m_a = 1;
        m_s.aa = 10;
        m_s.bb = 20;
        m_s.cc = 30;
    }
    #ifdef DEBUG_BACKDOOR
    friend bool getValue(CTest &disk, int index, void** output, int &size);  //友元函数
    typedef enum e_value
    {
        E_M_A,
        E_M_S,
    }e_value;
    #endif

private:
    int m_a;
    s_hello m_s;
};

#ifdef DEBUG_BACKDOOR
bool getValue(CTest &disk, int index, void** output, int &size)   //获取私有成员变量
{
    switch(index)
    {
        case CTest::E_M_A:
            *output = (void*)&disk.m_a;
            size = sizeof(disk.m_a);
            break;
        case CTest::E_M_S:
            *output = (void*)&disk.m_s;
            size = sizeof(disk.m_s);
            break;
        default:
            return false;
            break;
    }
    return true;
}
#endif

int main()
{
    CTest hd;
    int *pA = NULL;
    int size = 0;
    getValue(hd,CTest::E_M_A,(void**)&pA,size);
    printf("*pA = %d, size = %d\n",*pA,size);

    s_hello* my_hello;
    int my_size = 0;
    getValue(hd,CTest::E_M_S,(void**)&my_hello,my_size);
    printf("*pA = %d, size = %d\n",my_hello->aa,my_size);
    return 0;
}
[user:Backdoor]

 

二.编译运行:

[user:Backdoor] g++ -g main.cpp
[user:Backdoor] ls
a.out*  main.cpp
[user:Backdoor] ./a.out
*pA = 1, size = 4
*pA = 10, size = 12                       //成功获取.可作为后门调试
[user:Backdoor]

 

你可能感兴趣的:(C++,linux)