能力值:
( LV2,RANK:10 )
|
-
-
2 楼
我帮你一起求。我也想学点东西。
|
能力值:
( LV12,RANK:770 )
|
-
-
3 楼
分析C++对象或者是Object Pascl对象.
抓好this对象指针和self对象指针,
C++编译器一般都约定ECX寄存器为this指针在各个对象之间传来传去.
object pascl约定为eax寄存器...
找到了this.self.指针.就可以根据MFC.VCL翻译出各个虚拟表中的函数,并找出具体对象字符串名子,还有父类this和self指针等.
假如不是MFC VCL中的类,是用户自定义的类可以根据对象地址找出它的类名,也可以找出一些方法指针和一些私有成员等..对象具体功能要靠自己分析了.
还有对象的虚方法动态联编成多态运行.这个捏需要重定位父子之间的this指针.因为它们的虚方法表solt位置是相同地.例如call [ecx+4],-->ecx联编成父类this或者是子类this指针.这个需要程序编译完,在运行期才晓得捏.
没什么好说的.
关键定位到this.self上,什么东东都可以引用来了.如果迷失了它就乱了捏...
|
能力值:
( LV9,RANK:250 )
|
-
-
4 楼
《Reversing Secrets of Reverse Engineering》里面有几章将面向对象程序的,LZ不妨看看
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
我说的就是那本书,其实那上面也只是泛泛地讲了一些皮毛.还有很多很多具体的东西需要去慢慢探索.
我看了一下,VC里面,光是call指令就有很多种变化,比如象call xxxxxxxx这是最普通的一种,还有call [eax+xxxx]这是虚函数,其他还有call [edx+xxxx],call[esi+xxxx],call ebp等.每一种call对应c++里面什么样的编码.都需要自己去一点点的试验.
另外vc的寄存器分配也是如此,函数调用时ecx总是存放this.这个很容易看出来,而其他几个寄存器同样肯定也是有特定规律的.但具体规律是什么,分析起来很累.
这些非常细节和具体的东西,对逆向来说实在是太重要.掌握了它们,分析起代码来就要轻松多了.机器编译出来的代码,看起来一大段一大段挺复杂,但其实都是有规律性的东西.绝对不象手工编写的汇编码那样灵活多变,因此只要摸清了它们的规律,一眼就能看出个大概了.我估计这也是高手们绝对不会外传的独门绝活.HOHO~~
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
最初由 qiweixue 发布 分析C++对象或者是Object Pascl对象. 抓好this对象指针和self对象指针, C++编译器一般都约定ECX寄存器为this指针在各个对象之间传来传去. object pascl约定为eax寄存器...
........
仔细琢磨了一下,这位大哥说得对,关键就是this,根据这个this去搞清它的类名和父类等等.我一定要call到它~~~~
|
|
|