这段花指令代码为什么使用:mov eax,[MessageBox+4],sub eax,4前后加减4是什么作用?

imur2008 2008-12-29 01:46:41
;花指令反反汇编与反跟踪示例 by AoGo
;欢迎访问我的站点:aogo.yeah.net
;这段代码很简单,但是使用Win32DASM反汇编此程序,不但无法正常显示出输入/输出函数名与字符串列表,并且会让它反汇编出错误的代码.
;同样这段代码能对付SoftICE,使用SoftICE下MessagBoxA中断,中断后,你会发现SoftICE列出的代码一样是面目全非.
;本站有些例子相关的文章,标题为"MASM的反反汇编技术",希望对软件保护者能有帮助.

.386
.Model Flat, StdCall
Option Casemap :None ; 不区分大小写(对API与API常数无效)
;___________________________________________________________________________
Include windows.inc
Include user32.inc
Include kernel32.inc

IncludeLib user32.lib
IncludeLib kernel32.lib
.data ;数据段

.data?

.CODE
START:
push 0
push 0
push offset Welcome
push 0
jz @F
jnz @F
Welcome db "Welcome",0
@@:
mov eax,[MessageBox+4]
sub eax,4
jnz @F
Welcome1 db "Welcome",0
@@:
call eax
;在这里写入代码
invoke ExitProcess,0
END START

这段花指令代码为什么使用:mov eax,[MessageBox+4],sub eax,4前后加减4是什么作用?
另外jz @F,jnz @F代码里面没有那个@F标签,这个为什么不报错?

请教请教
...全文
95 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xiaopoy 2008-12-29
LZ那花指令很基础啊,hmm,混淆作用而已,混淆人脑比混淆PC有用多了
well,上一段自己经常用的.

call 1;
dd ?//参数 argc2
1:
call 2
dd ?//参数 argc1
2:
call 3
dd ?//参数 argc0
3:
call API; API (argc0, argc1, argc2)
回复
cadhy 2008-12-29

一点都不懂,只有学习学习
回复
imur2008 2008-12-29
服了,结贴
谢谢killbug2004大侠
回复
xtdumpling 2008-12-29
mark
回复
killbug2004 2008-12-29
mov eax,[MessageBox+4],sub eax,4
这样在调试其中不会一下子看到eax中是MessageBoxA的地址
在我这里OD中显示
00401017 . B8 36104000 MOV EAX,gg.00401036
0040101C . 83E8 04 SUB EAX,4
如果是mov eax,[MessageBox]
调试时像OD直接显示MOV EAX,<JMP.&user32.MessageBoxA>,这样一定程度上隐藏API调用

@F是对该条指令下面的第一个@@标号的引用,F代表Folow
@B是对该条指令前面最近的@@标号的引用.B是Before
回复
相关推荐
发帖
汇编语言
创建于2007-08-27

2.1w+

社区成员

汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
申请成为版主
帖子事件
创建了帖子
2008-12-29 01:46
社区公告
暂无公告