首页
社区
课程
招聘
[求助]大家帮忙看一下这些代码段,有关类继承的逆向
发表于: 2009-2-20 13:58 5209

[求助]大家帮忙看一下这些代码段,有关类继承的逆向

2009-2-20 13:58
5209
CODE:00411570
CODE:00411570 ; *************** S U B R O U T I N E ******************
CODE:00411570
CODE:00411570
CODE:00411570 sub_411570      proc near               
CODE:00411570                 mov     edx, [eax]
CODE:00411572                 xor     ecx, ecx
CODE:00411574                 mov     [eax], ecx
CODE:00411576                 mov     eax, edx
CODE:00411578                 call    sub_403D98
CODE:00411578
CODE:0041157D                 retn
CODE:0041157D
CODE:0041157D sub_411570      endp
CODE:0041157D
CODE:0041157D ; ---------------------------------------------------------------------------

CODE:00403D98
CODE:00403D98 ; *************** S U B R O U T I N E **************
CODE:00403D98
CODE:00403D98
CODE:00403D98 sub_403D98      proc near               
CODE:00403D98                 test    eax, eax
CODE:00403D9A                 jz      short locret_403DA3
CODE:00403D9A
CODE:00403D9C                 mov     dl, 1
CODE:00403D9E                 mov     ecx, [eax]
CODE:00403DA0                 call    dword ptr [ecx-4]
CODE:00403DA0
CODE:00403DA3
CODE:00403DA3 locret_403DA3:                          ;
CODE:00403DA3                 retn
CODE:00403DA3
CODE:00403DA3 sub_403D98      endp
CODE:00403DA3

这里有一个Call Dword ptr[ecx-4] 是否可以断定这是一个虚拟函数的调用。

还有哪些情况下,会用到这样动态调用函数点的情况?谢谢

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
还有一个问题,就是retn

这样的返回方式,该如何确定是哪种调用约定? cdecl还是stdcall
我查了一下retn,好像给的资料不多。谢谢了
2009-2-20 14:00
0
雪    币: 196
活跃值: (135)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
3
从sub_411570()调用sub_403D98函数的情况来看,后者不是成员函数(它本身也不是什么成员函数),且没有参数,至于那个call dword ptr[ecx-4] 也不像是在调用虚函数,倒更像是有一个放着一堆函数指针的数组,这里只是随便调用了一下.

不过这两个函数都有点怪,默认都敢用EAX,如果不是特殊情况的话,我通常在写的时候都会给他们加个参数.

从这里我只能看出这么多来,究竟正不正确,需要更多的代码 :)
2009-2-20 17:15
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
4
像是调用vmt的Destroy,delphi是borland风格的fastcall
2009-2-20 17:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
额... 3楼说的参数指的是CDECL 跟 STDCALL吧...  这两种调用约定都是通过堆栈传递参数的... 而我看楼主的代码... 那个就是FASTCALL啊... 运用EAX EDX ECX 传递参数额...
    而我觉得那个CALL就是形式上是虚函数的调用... 但是负索引无法解释... 我在逆向DELPHI程序也遇到这种问题... 难道是多重继承下调用虚函数产生的?  
    关于调用约定:
    http://bbs.pediy.com/showthread.php?t=75658
2009-2-20 17:31
0
雪    币: 196
活跃值: (135)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
6
TO: 5楼
原来fastcall会用eax, 传递this也可能用到eax, 长见识了.
2009-2-20 17:50
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
7
楼主的CODE:00403D98是 Delhpi 标准的 TObject.Free

CODE:00403D98      test    eax, eax            This

CODE:00403D9E      mov     ecx, [eax]         ECX指向Function列表(非指向起点)

CODE:00403DA0      call    dword ptr [ecx-4]   call 父.Destory

delphi 父的destory都是在 -4
2009-2-20 18:44
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
谢谢各位大侠们的帮助,让我茅塞顿开。以后还请多多指教
2009-2-20 21:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
CODE:005C544E word_5C544E     dw 0Bh                  ; DATA XREF: CODE:005C5234o
CODE:005C5450                 dd 0A002A005h, 0A006A003h, 0A015A00Ah, 0A023A01Fh, 0A064A009h
CODE:005C5464                 db 5Bh, 0A0h
CODE:005C5466                 dd offset sub_5C5614
CODE:005C546A                 dd offset sub_5C569C
CODE:005C546E                 dd offset sub_5C56C4
CODE:005C5472                 dd offset sub_5C5684
CODE:005C5476                 dd offset dword_5C54E8
CODE:005C547A                 dd offset sub_5C5A64
CODE:005C547E                 dd offset sub_5C5CCC
CODE:005C5482                 dd offset sub_5C5EFC
CODE:005C5486                 dd offset sub_5C6090
CODE:005C548A                 dd offset sub_5C6774
CODE:005C548E                 dd offset sub_5C6408

这一段又是什么意思呢?唉,大家别嘲笑我哦
2009-2-20 22:23
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
10
技术的地方. 有问题共同研究, 没人会嘲笑
我是来跟你说声再见的.
2009-2-20 23:14
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
楼主的可以再看看这2个:
DELPHI 反编译
http://bbs.pediy.com/showthread.php?t=80205
DELPHI 类逆向
http://it.syue.com/Hacker/HTML/62925.shtml
2009-2-20 23:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
还有这个: DELPHI的原子世界 (GOOGLE就有)
2009-2-21 00:24
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
谢谢大家的支持。还有个问题,如何结贴的?在看雪是不是不用结贴?
2009-2-23 11:34
0
游客
登录 | 注册 方可回帖
返回
//