|
[下载]《[专题四]Rootkit的学习与研究》文章整理下载
谢谢提供资料支持! |
|
|
|
|
|
[翻译]不知道有没有人翻译过:Reversing Microsoft Visual C++ Part II: Classes, Methods and RTTI
没人回帖?连个拍砖的都没有?唉,失败……
RTTI是一种由编译器生成的特殊的信息,它用来支持像dynamic_cast<> 和typeid()这样的C++操作符,以及C++的异常。由于它的成因,所以,编译器只为多态的类,也就是有虚函数的类,生成RTTI信息。 MSVC编译器将一个结构体指针放在虚函数表之前,称之为“完整对象定位符(Complete Object Locator,COL)”。之所以这样称谓,是因为它允许编译器从特定的vftable指针(因为一个类可能有多个)找到完整的对象的位置。COL看起来像下面这样: struct RTTICompleteObjectLocator { DWORD signature; //总是0 ? DWORD offset; //这个vftable在整个类中的偏移 DWORD cdOffset; //构造函数位移的偏移 struct TypeDescriptor* pTypeDescriptor; //整个类的类型描述符 struct RTTIClassHierarchyDescriptor* pClassDescriptor; //描述继承关系(hierarchy) }; 类关系描述符描述了类的继承关系。它由类的所有COL所共享。 struct RTTIClassHierarchyDescriptor { DWORD signature; //总是 zero? DWORD attributes; //位0置位 = 多重继承(multiple inheritance), 位1置位 = 虚继承(virtual inheritance) DWORD numBaseClasses; //pBaseClassArray中类的数量 struct RTTIBaseClassArray* pBaseClassArray; }; 基类数组描述所有的基类及一些信息,这些信息,在执行_dynamic_cast_操作符的时候让编译得以将继承类转成任一基类。每一个入口(基类描述符)有如下的结构: struct RTTIBaseClassDescriptor { struct TypeDescriptor* pTypeDescriptor; //类的类型描述符 DWORD numContainedBases; //number of nested classes following in the Base Class Array struct PMD where; //pointer-to-member displacement info DWORD attributes; //flags, usually 0 }; struct PMD { int mdisp; //成员偏移 int pdisp; //vbtable偏移 int vdisp; //vbtable内偏移 }; PMD结构体描述一个基类是如何安置在一个完整的类里。如果是一个简单的继承,它被安置在从对象起始位置开始的一个固定的偏移,这个偏移就是_mdisp_字段。如果它是一个虚基类,那么需要从vbtable得到一个附加的偏移。下面的伪代码是将继承类的_this_指针调整为基类的指针: //char* pThis; struct PMD pmd; pThis+=pmd.mdisp; if (pmd.pdisp!=-1) { char *vbtable = pThis+pmd.pdisp; pThis += *(int*)(vbtable+pmd.vdisp); } 例如,我们的三个类的RTTI关系看起来像这样: 原图地址:http://www.openrce.org/articles/img/igor2_rtti1.gif 待续…… |
|
[求助]反汇编逆向的小问题!
typedef int( *PFUNC)(int , int , int , int , int ) ; int func1(int a, int b , int c, int d, int e) { return a+b+c+d+e; } int main(void) { PFUNC test int ret = test(1,2,3,4,5); return 0; } PFUNC test = func2; 00413574 mov dword ptr [ebp-2Ch],offset func2 (4111C2h) int ret = test(1,2,3,4,5); 0041357B mov esi,esp 0041357D push 5 0041357F push 4 00413581 push 3 00413583 push 2 00413585 push 1 00413587 call dword ptr [ebp-2Ch] |
|
[求助]反汇编逆向的小问题!
typedef int( *PFUNC)(int , int , int , int , int ) ; int func1(int a, int b , int c, int d, int e) { return a+b+c+d+e; } int main(void) { PFUNC test int ret = test(1,2,3,4,5); return 0; } PFUNC test = func2; 00413574 mov dword ptr [ebp-2Ch],offset func2 (4111C2h) int ret = test(1,2,3,4,5); 0041357B mov esi,esp 0041357D push 5 0041357F push 4 00413581 push 3 00413583 push 2 00413585 push 1 00413587 call dword ptr [ebp-2Ch] |
|
[求助]反汇编逆向的小问题!
函数指针作变量? |
|
打开网游客户端以后,我一打开ollyice,客户端就最自动关闭了,调试器也关闭了
应该是先静态反汇编,去掉调试保护吧 |
|
[注意]请问一下对于C# 或basic.net程序如何破解
有Reflector或者修改过了的MS的ildasm, 前者反“汇编”成高级语言的代码,后者反“汇编”成IL语言 我感觉,.NET的破解要比在x86上进行的破解要容易许多,或许我太菜了,没遇到过高级问题:D |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值