首页
社区
课程
招聘
[旧帖] [求助]逆向一函数发现来历不明的ecx 0.00雪花
发表于: 2007-3-16 17:11 4497

[旧帖] [求助]逆向一函数发现来历不明的ecx 0.00雪花

2007-3-16 17:11
4497
直接贴代码了哈....  

问题是不明白ecx+100h到底怎么来的 有什么用....不像别的寄存器用之前都是要压栈的... 这里没有压栈....

wardenseg1:0C3D115D 53                             push    ebx
wardenseg1:0C3D115E 57                             push    edi
wardenseg1:0C3D115F 90                             nop
wardenseg1:0C3D1160
wardenseg1:0C3D1160                loc_C3D1160:                            ; CODE XREF: wardencrypt+70j
wardenseg1:0C3D1160 8A 81 00 01 00+                mov     al, [ecx+100h]
wardenseg1:0C3D1166 8A 99 01 01 00+                mov     bl, [ecx+101h]
wardenseg1:0C3D116C FE C0                             inc     al
wardenseg1:0C3D116E 88 81 00 01 00+                mov     [ecx+100h], al         

wardenseg1:0C3D1174 0F B6 C0                         movzx   eax, al
wardenseg1:0C3D1177 8A 14 08                          mov     dl, [eax+ecx]
wardenseg1:0C3D117A 8D 3C 08                         lea     edi, [eax+ecx]
wardenseg1:0C3D117D 02 DA                             add     bl, dl
wardenseg1:0C3D117F 88 99 01 01 00+                mov     [ecx+101h], bl   
wardenseg1:0C3D1185 8A 17                              mov     dl, [edi]         
wardenseg1:0C3D1187 0F B6 C3                         movzx   eax, bl         
wardenseg1:0C3D118A 8A 1C 08                         mov     bl, [eax+ecx]   

这只是函数刚进来的一部分....  这个函数是单独给出的... 跟外面没有联系...

逆向方面高手的告诉一下我啊 一定要阿...

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 242
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
是寄存器传递的参数吧?

__fastcall调用的某些参数类型一般编译器会用寄存器传值的
比如VC6.0的话就是的对32位指针的传递就是用ECX和EDX。第一个参数用ECX传递,第二个参数用EDX
2007-3-16 17:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
真的是作为函数参数传递的吗。。。  说真的,有点不敢相信。。因为函数里以这个ecx为基址引用内存中数值的操作很多。。。。如果作为参数看 好像这个函数什么功能都没有。。没办法逆向。。。

有一点没提 ecx这个寄存器的值在整个函数执行过程中都是不变的

who can help me ...
2007-3-16 20:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
最初由 DeCr雪球 发布
直接贴代码了哈....

问题是不明白ecx+100h到底怎么来的 有什么用....不像别的寄存器用之前都是要压栈的... 这里没有压栈....

wardenseg1:0C3D115D 53 push ebx
........

我感觉也象参数传递,
我也经常碰见用ecx作为一个结构体的指针 传递参数
2007-3-16 20:43
0
雪    币: 200
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
VC编译的对象类的指针使用ECX传递

通常称这个指针为this指针,隐含的,不压栈
2007-3-16 21:49
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
Thx for all your hands ...

I will publish my research report after I finish it..
2007-3-17 09:25
0
雪    币: 101
活跃值: (12)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
7
__fastcall
首选的积存器是eax,然后是edx, ecx,不够在压栈
对于vc来说. 如果看到
push xxx
push xxx
mov ecx, xxx
call xxx
那么可以肯定是调用一个类的非静态函数了.
ecx就是指针. 只有一个虚表的话, [ecx]就是虚表了

对于delphi来说, 这个this是eax.
2007-3-17 10:38
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
其实照我看 这个ecx不一定是指针.... 因为这个不一定是vc编译出来的程序...

这可能是一段加密程序 通过ecx作为基址在内存中运算出一个还算复杂的地址,然后取内容跟一个串异或..

有人又兴趣的吗 我可以把代码贴出来,大家研究研究.....
2007-3-17 10:55
0
雪    币: 200
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
有什么编译器编译代码时,会将结构基址作为指针传递到ECX呢?

在这里,ECX参与了各种计算,取的均是偏移量,就已经很明显的提示了

Borland公司的编译器,this指针是由EAX传递

而MS的,就是靠ECX来传递

至于其它的参数及函数调用方式,几乎都不采用这样的指针传递方式

多掌握下各种语言的参数传递就清楚了,结构基址作为参数传递,以及类对象作为参数传递,均会压栈,不会通过寄存器传递(自然__fastcall例外)
2007-3-17 11:50
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
最初由 苦茶 发布
有什么编译器编译代码时,会将结构基址作为指针传递到ECX呢?

在这里,ECX参与了各种计算,取的均是偏移量,就已经很明显的提示了

Borland公司的编译器,this指针是由EAX传递
........


是喔....  应该是以加密有关的结构体的指针....  我现在懂了
2007-3-17 12:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
顺便再问个问题啊...

如遇到未知内存, 怎么作为参数处理阿.
大概代码是怎样的阿
2007-3-17 12:08
0
游客
登录 | 注册 方可回帖
返回
//