病毒中调用API

von 2004-03-19 09:02:03
我已经得到了api的地址,如:GetProcAddress:0xbff76e28
MessageBoxA:0xbff713d4(win98)
并分别存放在aGetProcAddress,aMessageBoxA中,ebp存放病毒体的基址
call dword ptr [ebp+offset aGetProcAddress]
push 40h+1000h
push offset Caption
push offset Text
push 0
;call eax
call dword ptr [ebp+offset aMessageBoxA]
在上面的代码中,第一个call可以使用,并返回0x8f5c5130(具体值可能跟
运行环境有关)放如eax中
若用"call eax"则可正确显示messagebox
若用call dword ptr [ebp+offset aMessageBoxA]则没有显示
请问GetProcAddress 与 MessageBox 的调用方法是不是不同啊?
怎么在知道GetProcAddress:0xbff76e28
MessageBoxA:0xbff713d4(win98)
的情况下,直接调用MessageBoxA,而不通过GetProcAddress?
...全文
56 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wowocock 2004-03-22
  • 打赏
  • 举报
回复
X86的基本概念搞清楚再说。
von 2004-03-22
  • 打赏
  • 举报
回复
ft!
用ebx代替Base 就可以了
von 2004-03-22
  • 打赏
  • 举报
回复
哦,我用了一个local Base:DWORD 存放ebp
不过为什么在子程序中就不能用
call dword ptr [ebp+offset aMessageBoxA]
call dword ptr [ebp+offset aGetProcAddress]?
真是想不通啊!!!
csdsjkk 2004-03-21
  • 打赏
  • 举报
回复
一般用ebx作重定位修正值,
子程序如果使用局部变量,会用到(改变)ebp
von 2004-03-21
  • 打赏
  • 举报
回复
恩,0xbff713d4在kernel.dll中的1-9号函数的rva+imagebase
可能是没找到的就用这个值吧
getprocaddress返回的值的确可以不是0xbfc041ba,我用vc调试
发现0x8f5c5130是push 0xbfc041ba
估计是间接调用的0xbfc041ba
我换了0xbfc041ba后call dword ptr [ebp+offset aMessageBoxA]
就可以用了
不过还发现了另外一个问题
call dword ptr [ebp+offset aMessageBoxA]
call dword ptr [ebp+offset aGetProcAddress]
都不能在病毒体内部的调用函数中使用,使用就发生access violation
eax 中的返回值为0x00000001
而不在子程序中却都可以用,而且在进入子程序是ebp值改变为0x0063fe2c
不是进入前的0x00000000
是不是在自定义的子程序中不能这样调用api 啊?



von 2004-03-21
  • 打赏
  • 举报
回复
不好意思,messagebox 的地址(0xbff713d4)错了,我是遍历kernel.dll 的export表
得到的,可是messagebox在user32.dll的export表中啊!也不知道这个地址(0xbff713d4)怎么来的。郁闷
我又查了user32.dll的export表,得到messagebox地址为0xbfc041ba
呵呵,win98的这些地址应该是固定的 啊!不解啊
紫郢剑侠 2004-03-20
  • 打赏
  • 举报
回复
调用方式其实是一样的,都是先把参数压入堆栈, 再CALL

关键是函数地址的重定位
csdsjkk 2004-03-20
  • 打赏
  • 举报
回复
奇怪,
既然 call dword ptr [ebp+offset aGetProcAddress]
是取messagebox入口地址,
为何返回值0x8f5c5130与已知的messagebox地址0xbff713d4不同呢?
von 2004-03-20
  • 打赏
  • 举报
回复
那到底怎么定位啊?
就上面的代码,我该怎么调用messagebox?
wowocock 2004-03-19
  • 打赏
  • 举报
回复
病毒中用API和普通程序没什么区别,就是重新定位的问题。
ChenYongThread 2004-03-19
  • 打赏
  • 举报
回复
学习中!

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧