首页
社区
课程
招聘
[旧帖] [原创]C++ 对象的逆向 0.00雪花
发表于: 2013-9-26 21:24 3897

[旧帖] [原创]C++ 对象的逆向 0.00雪花

2013-9-26 21:24
3897

分析平台:VC


编译工具:vs2012


类原型:


class CAddressChain


{


public:


        CAddressChain();



        BYTE* m_pbFeatureCode;


        DWORD m_dwBaseAddress;


        DWORD m_dwOffsetAddress[20];


};


构造函数定义:


CAddressChain:: CAddressChain()


{


        m_pbFeatureCode = 0;


        m_dwBaseAddress = 0;


        for (int i = 0; i < 20; i++)


        {


                m_dwOffsetAddress[i] = -1;


        }


}


创建方式之栈中创建:


void Test()


{


        CAddressChain  acw;


        acw.m_dwBaseAddress = 1;


}


环境分析之准备环境:


void Test()


{


}


push        ebp  /*保存外层栈帧;栈帧,当前环境的栈空间的底部;栈底,空间最小值;栈帧指示了栈空间的底部,栈顶指示了栈空间的最大值;如图(在帖子最底下)



空间的顶部(esp),空间的底部(ebp) */  


mov        ebp,esp /*确定本层环境的栈空间底部;esp当前指示的是外层栈空间的顶部,本层需要拥有自己的栈空间,以方便数据的保存(局部变量),esp指示了栈空间当前的位置,顾把esp传递给ebp,用ebp来锁定本层栈空间的底部,有了底部(ebp),顶部(esp),就能确定本层栈空间的大小 */


/*这里为异常处理指令,没有深入研究,不做分析*/


push        ebx  /*保存外层寄存器,寄存器就那么几个,不够用,外层可能都用到了,所以这里先保存起来*/


push       esi  /*同上*/  


push       edi  /*同上*/



sub        esp,1C4h /*为本层栈空间分配了1C4h的空间;*/


lea        edi,[ebp+FFFFFE30h]  /* ebp,栈底;FFFFFE30h,这是补码形式,转换过来是-1C4h;即取到栈空间的顶部位置 */


mov       ecx,71h  


mov       eax,0CCCCCCCCh  


rep stos    dword ptr es:[edi]  


/*上面五条指令为本层栈空间分配空间,并初始化为CC,即int 3指令,如果不小心运行到这,即产生异常*/


至此,环境就安排好了;总结为:保护外层栈空间、寄存器;申请本层栈空间并初始化;


环境现状:


栈底 ebp


栈顶 esp


栈空间可用来申请的大小   ebp - (ebp – 1C4h)


本层栈空间总容量         ebp - esp


环境分析之退出环境:


之前有sub         esp,1C4


这里有 add         esp,1C4


之前有 push esi


这里有 pop esi


之前有 mov ebp,esp


这里又 mov esp,ebp


/*用到的寄存器,全部还原回去*/


对象创建:


CAddressChain  acw;



push       1  


lea        ecx,[ebp+FFFFFF78h] /* lea  ecx,[acw]; ebp栈底; FFFFFF78h 补码方式,转换为-88h;此处选取了栈空间ebp – 88h 的位置,栈总空间是ebp – 1C4h */


call        016D1B64 /*call   CAddressChain::__autoclassinit;  初始化对象的栈;详细代码如下:


push         ebp  


mov         ebp,esp  


sub         esp,0CCh  


push        ebx  


push        esi  


push        edi  


push        ecx  


lea          edi,[ebp+FFFFFF34h]  


mov         ecx,33h  


mov         eax,0CCCCCCCCh  


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 5
支持
分享
最新回复 (2)
雪    币: 3
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
谢谢楼主写了这么多,正在学习中,很详细
2013-12-15 12:12
0
雪    币: 272
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习,谢谢楼主!
2013-12-15 21:15
0
游客
登录 | 注册 方可回帖
返回