这段花指令代码为什么使用: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标签,这个为什么不报错?

请教请教
...全文
162 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
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

21,458

社区成员

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

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