首页
社区
课程
招聘
[旧帖] [求助]汇编中怎么调用API函数? 0.00雪花
发表于: 2009-5-23 11:32 4973

[旧帖] [求助]汇编中怎么调用API函数? 0.00雪花

2009-5-23 11:32
4973
我在调试某人的病毒文件时,发现他如下调用了WinExec这个函数

pushfd
pushad
push    0
  push    0040DEE0                         ; ASCII "taskkill /im XX.exe /f"
   push    0040E0C0
      nop
   mov     eax, 1
    nop
      nop
       nop
push    dword ptr [<&kernel32.WinExec>]  ; kernel32.WinExec
       retn

这个应该是他用来K掉XX程序的
简化一下,代码大概就是这样吧
push    0
push    0040DEE0                         ; ASCII "taskkill /im XX.exe /f"
   push    0040E0C0     (这个应该是在函数调用完后的返回地址)
   mov     eax, 1
PUSH   dword ptr [<&kernel32.WinExec>]  ; kernel32.WinExec
RETN

这样的话一个WinExec函数就调用完成了。
那么请问各位大牛
怎么样在汇编中调用其他函数呢,应该怎么设置呢》?
比如我现在想在某个程序一开始加上自删除功能,那么我用该调用哪个函数?
怎么像上面这个一样写代码呢?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
添加代码很麻烦, 你要想直接修改exe必须很小心的组织堆栈调用, 在进程里找个没有用到的地址空间调用函数,
然后直接跳过去再跳回来. 目前我就知道这个办法.
2009-5-23 12:24
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
恩,这个我知道,现在问题的关键就在于函数的代码怎么写
尤其是前面那些PUSH 0那些参数的那些~
求助啊~
2009-5-23 12:38
0
雪    币: 360
活跃值: (77)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
4
汇编调用函数有很多方法,比如最简单的push call 或者是masm32中的invoke ,还有你的后一个问题自己找找,方法很多,还有请不要布置作业!
2009-5-23 12:46
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
你可以找个编译器调用你需要的函数, 然后直接在exe截取贴过来.
2009-5-23 12:49
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
饿,什么叫布置作业?
不是很懂&
2009-5-23 12:54
0
雪    币: 125
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
布置作业 ,应该是陕西话,意思是让别人完成指定的任务!!!
2009-5-23 13:42
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
晕,我真不知道怎么表达饿……
我规定大家完成什么了么?》》》》?????
2009-5-23 23:15
0
雪    币: 107
活跃值: (404)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我在想的一个事儿是....执行完WinExec就完了??程序不用返回的??

如果要返回..那么下一句指令的地址在哪里??WinExe执行ret的时候,为什么能定位到指令地址??

好神奇呀...快告诉我..我要学习一下!!!
2009-5-25 07:52
0
雪    币: 141
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
invoke 是伪指令!!
本质上还是push加call
2009-6-7 00:14
0
雪    币: 264
活跃值: (11)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
11
前面的push 是参数 多数api是使用堆栈进行参数传递的

而在本例中
通过代码
push 返回地址
push apiaddr
ret
模拟了指令call apiaddr
仅此而已

只是某些小把戏罢了..
2009-6-7 01:19
0
游客
登录 | 注册 方可回帖
返回
//