首页
社区
课程
招聘
[求助]MessageBoxA用法
发表于: 2010-2-11 22:14 8161

[求助]MessageBoxA用法

2010-2-11 22:14
8161
今天找了个教程,讲的是在程序开始前加一个MessageBox
  其中有这样一段:找到USER32.dll里的 MessageBoxA 的地址,
在程序里写 push 0
                push 标题
                push 内容
                push 0
                call .....
                jmp 程序原入口

我用的Win7,地址是7721EA71.
其中call后加的就是USER32.dll这个地址..写完OD里代码就变成call <&USER32.MessageBoxA>.
当时弄成了,移植到另一台计算机上却不行.

我想应该是call 的地址不一样吧..

那为了可移植,应该怎么做呢??
我刚学反汇编1星期不到.. 拜托哪位大虾能详细讲讲,谢谢!

[注意]看雪招聘,专注安全领域的专业人才平台!

收藏
免费
支持
分享
最新回复 (14)
雪    币: 220
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
建议搜索地址再调用
2010-2-11 22:32
0
雪    币: 399
活跃值: (38)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
找到IAT里面的地址再调用
具体一点就是在OD中按下Ctrl+N,找到目标函数地址,假设为xxxxxxxx
call [xxxxxxxx]即可
如果没有找到,则需要导入这个函数,可以用LordPE等工具来完成未导入函数的导入
2010-2-11 22:40
0
雪    币: 458
活跃值: (426)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
可以参考 楼上同学的一篇精华文章  叫  计算器增加退出动画的  自己搜搜
2010-2-11 23:04
0
雪    币: 191
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
但是我写的就是CALL 7721EA71
我是在想是不是可以通过别的方式,不再是直接取地址呢,因为不通操作系统不一样阿~
就是类似于C的MessageBox函数,就不存在这个问题。
现在用手机上的,这又该睡觉拉~明天再来,谁能帮我阿~谢谢楼上的回复!
2010-2-11 23:22
0
雪    币: 67
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
.................
2010-2-12 09:51
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
先定位GetProcAddress,其他API用GetProcAddress
2010-2-12 14:27
0
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
果然很科普。。。还有人问这个东西。。。。。
2010-2-12 15:26
0
雪    币: 67
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
别以为很简单,哈哈  这也是有点难度的
2010-2-12 18:27
0
雪    币: 0
活跃值: (964)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
动态 IAT 下,实在不行先GetProAddress下。
2010-2-13 04:28
0
雪    币: 80
活跃值: (1051)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
程序自身有MessageBoxA,直接调IAT地址,没有Loadpe塞一个进去~有也可以塞···
2010-2-13 09:03
0
雪    币: 191
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
楼上你好,能给个方法不?
新手,还不很懂汇编..
2010-2-13 11:23
0
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
13
http://bbs.pediy.com/showthread.php?t=54960

第四部分可以参考下

用暴力的话我记得也写过一段代码,可以给你找找
2010-2-13 13:17
0
雪    币: 101
活跃值: (164)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
invoke GetModuleHandle,SADD("user32.dll")
.if eax
mov ebx , eax
invoke GetProcAddress,ebx,SADD("MessageBoxA")
PrintHex eax
               push 标题
          push 内容
          push 0
                call eax
.endif

"但是我写的就是CALL 7721EA71
我是在想是不是可以通过别的方式,不再是直接取地址呢,因为不通操作系统不一样阿~"

注意,直接CALL 7721EA71h 是无法通过编译的。因为编译时找不到地址,但是你可以这样做:
mov eax , 7721EA71h
call eax
2010-2-13 14:34
0
雪    币: 65
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
再IAT里查找地址,然后
CALL IAT函数地址

就可以了
2010-2-17 21:40
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册