首页
社区
课程
招聘
call别人程序的内部函数
发表于: 2006-4-25 15:02 4653

call别人程序的内部函数

2006-4-25 15:02
4653
我还没怎么入门,用dll可以call别人程序的内部函数。
一般的只要注意调用方式和传参顺序就可以了。
但是我碰到一个简单的call,却不调用
是这样
00574A18  |.  6A 01         push 1
00574A1A  |.  68 55550098   push 985555                           ;
00574A1F  |.  68 85070000   push 785                                ;
00574A24  |.  8B4D F4       mov ecx,dword ptr ss:[ebp-C]            ;
00574A27  |.  E8 A47C0B00   call unpack.0062C6D0                    ;

这个ecx需要如何处理一下?
0062c6d0这个函数里需要ecx的值.
请知道的指点我入门吧~谢谢大家!!

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 212
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
请大家指点一下,谢谢了
2006-4-25 17:05
0
雪    币: 257
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
那个ECX值一般是this的多
2006-4-25 17:18
0
雪    币: 234
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
这个还不大懂,看看有熟悉的没,我也好学习一下。
2006-4-25 17:20
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
5
这个问题实在不好回答。说简单也可以,说不简单也可以(因为你并没有说出[ebp-c]的值是如何得到的),简单的是如果[ebp-c]的值是直接赋值给[ebp-c]的,如:mov [ebp-c],xxxxxxxx,那么你只须将xxxxxxxx的值直接传给ecx就行了(mov ecx,xxxxxxxx)。难的是如果在传给[ebp-c]的值是前面经过复杂运算所得到的值,如:
....
....
.... //前面经过复杂运算
mov [ebp-c],xxxxxxxx //最后将值赋给[ebp-c]的临时变量里。
那么,在你的Dll里也必须重复执行前面复杂的运算,最后将得到的值赋给ecx就行了。如:
.....
.....
.....
mov ecx.xxxxxxxx
push 1
push 985555
push 785
call 0062C6D0
2006-4-25 17:21
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
6
不过的确很像C++中的函数调用前的this指针。
2006-4-25 17:24
0
雪    币: 212
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
听了上面的指点以后,我感觉聪明了很多,谢谢
2006-4-25 17:24
0
雪    币: 212
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
ecx每次都是固定的值
我只是不知道如何在vc里处理象ecx这样的变量
用内嵌汇编
_asm{
mov ecx,f19c20;

}
然后再函数调用,这样可以吗?调试不出来。
2006-4-25 17:30
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
9
自己试试不就明白了,如果不行,那么调用这个函数就全部用内嵌汇编完成也一样。
__asm{
  mov ecx,0xf19c20
  push 985555
  push 785
  call 0062C6D0
}
2006-4-25 17:34
0
雪    币: 212
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谢谢楼上的,可以了
但是如果全都内嵌就是
__asm{
mov ecx,0xf19c20
push 985555
push 785
call 0062C6D0
}
是不行的,我的vc会报错误improper operand type


_asm{
mov ecx,0xf19c20
}
然后函数调用,没有问题
谢谢你了,给了我这么多知识
2006-4-25 20:04
0
雪    币: 257
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
全部照搬了

__asm{
mov ecx,0xf19c20
push 985555
push 785
call 0062C6D0   ***这句错了
}

改成两句
mov eax, 0x0062C6D0   
call eax
2006-4-25 20:36
0
雪    币: 212
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
啊,是的,谢谢楼上的,不自己弄一次还真加深不了印象,以前看过别人说过也没过脑子...
呵呵,麻烦大家了!!
还是内嵌进去方便!!
2006-4-25 21:02
0
雪    币: 200
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
13
在c中可以这样用
DWORD p=0xxxxxxxxx
然后直接
call p
不可以
但在delphi中这样内嵌汇编是不成立了。

所以只能接触寄存器
mov eax, xxxx
call eax

如果楼主有兴趣可以加我qq和你探讨一下。刚好这2天也在研究这个。
2006-4-25 23:47
0
雪    币: 212
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
想联系你,可是找不到你QQ
写下我的QQ:110121121
2006-4-28 20:00
0
游客
登录 | 注册 方可回帖
返回
//