首页
社区
课程
招聘
最近用masm32汇编发现的一个有意思的咚咚
发表于: 2011-7-15 12:28 5264

最近用masm32汇编发现的一个有意思的咚咚

2011-7-15 12:28
5264
源码

start:
mov eax,DecryptCodeLen
mov eax,CloneCodeLen
mov eax,DCEntryoffset                                                               
invoke FixJumpAddr,NULL,0,0,DecryptCodeLen,CloneCodeLen,DCEntryoffset,0       

反汇编代码
.text:00401042                 mov     eax, 1Dh         //DecryptCodeLen
.text:00401047                 mov     eax, 0Dh         //CloneCodeLen
.text:0040104C                 mov     eax, 19h         //DCEntryoffset
.text:00401051                 push    0
.text:00401053                 push    21h              //DCEntryoffset
.text:00401058                 push    0Dh              //CloneCodeLen
.text:0040105D                 push    25h             //DecryptCodeLen
.text:00401062                 push    0
.text:00401064                 push    0
.text:00401066                 push    0
.text:00401068                 call    _FixJumpAddr@28 ; FixJumpAddr(x,x,x,x,x,x,x)

看见了吧,同一个值,在mov eax是1dh,在传递给函数的时候却变成 25h

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
										.386 
										.model flat,stdcall
										option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include 						windows.inc
include 						kernel32.inc
include 						user32.inc
includelib 					kernel32.lib
includelib	 				user32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DecryptCodeLen   		equ     _DecryptCodeEnd - _DecryptCodeStart
CloneCodeLen    		equ     _CloneCodeEnd - _CloneCodeStart
DCEntryoffset				equ     _DecryptCodeEntry - _DecryptCodeStart

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

										.code
_DecryptCodeStart:
;...................................................................................................
_RVAToOffset				proc	_lpFileHead,_dwRVA
										pushad
										;若没有后面jmp @F 语句及@@标号,就没有问题,若有,则不一致
										;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
										jmp @F
@@:
										;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
										popad
										ret
_RVAToOffset				endp
_CloneCodeStart:
FixJumpAddr					proc _rawBase,_sclen,_rblen,_dclen,_clen,_dcentryoffset,_scentryoffset
										pushad
										popad
										ret
FixJumpAddr					endp
;...................................................................................................
										nop
										nop
										nop
										nop										
_CloneCodeEnd:
;...................................................................................................
										nop
_DecryptCodeEntry:									
										nop
										nop
										nop
										nop
_DecryptCodeEnd:
										nop
start:
										mov eax,DecryptCodeLen
										mov eax,CloneCodeLen
										mov eax,DCEntryoffset								
										invoke FixJumpAddr,NULL,0,0,DecryptCodeLen,CloneCodeLen,DCEntryoffset,0	
										
										invoke ExitProcess,NULL
										end start

算不算一个bug:,大家也可以试试

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

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 204
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不会吧,真没看懂。
这两汇编 没什么联系啊  没看出来啥意思  1DH 25H 都是常数啊
.text:00401042                 mov     eax, 1Dh         //DecryptCodeLen
text:0040105D                 push    25h             //DCEntryoffset
2011-7-15 13:09
0
雪    币: 75
活跃值: (688)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
我写错了应该是
.text:00401042                 mov     eax, 1Dh         //DecryptCodeLen
text:0040105D                 push    25h             //DecryptCodeLen

也就是同一个常量DecryptCodeLen,在
mov eax,DecryptCodeLen

invoke FixJumpAddr,NULL,0,0,DecryptCodeLen,xxx,xxxx,0
被编译成不同的值
2011-7-15 14:23
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
好奇怪  不知道为什么 。。。
2011-7-15 14:35
0
雪    币: 193
活跃值: (64)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
那都没有错,错就错在你这样定义了
DecryptCodeLen       equ     _DecryptCodeEnd - _DecryptCodeStart
CloneCodeLen        equ     _CloneCodeEnd - _CloneCodeStart
DCEntryoffset        equ     _DecryptCodeEntry - _DecryptCodeStart
2011-7-15 15:08
0
雪    币: 193
活跃值: (64)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                    .386
                    .model flat,stdcall
                    option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include             windows.inc
include             kernel32.inc
include             user32.inc
includelib           kernel32.lib
includelib           user32.lib

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
DecryptCodeLen       dword    0
CloneCodeLen         dword    0
DCEntryoffset        dword    0

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                    .code
_DecryptCodeStart:
;...................................................................................................
_RVAToOffset        proc  _lpFileHead,_dwRVA
                    pushad
                    ;若没有后面jmp @F 语句及@@标号,就没有问题,若有,则不一致
                    ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                    jmp @F
@@:
                    ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                    popad
                    ret
_RVAToOffset        endp
_CloneCodeStart:
FixJumpAddr          proc _rawBase,_sclen,_rblen,_dclen,_clen,_dcentryoffset,_scentryoffset

                    pushad
                    
                    popad
                    ret
FixJumpAddr          endp
;...................................................................................................
                    nop
                    nop
                    nop
                    nop                    
_CloneCodeEnd:
;...................................................................................................
                    nop
_DecryptCodeEntry:                  
                    nop
                    nop
                    nop
                    nop
_DecryptCodeEnd:
                    nop
start:
                    mov eax,_DecryptCodeEnd
                    sub eax,_DecryptCodeStart
                    mov DecryptCodeLen,eax
                    mov eax,_CloneCodeEnd
                    sub eax,_CloneCodeStart
                    mov CloneCodeLen ,eax
                    mov eax,_DecryptCodeEntry
                    sub eax,_DecryptCodeStart
                    mov DCEntryoffset,eax
                    mov eax,DecryptCodeLen
                    mov ebx,CloneCodeLen
                    mov ecx,DCEntryoffset               
                    invoke FixJumpAddr,NULL,0,0,DecryptCodeLen,CloneCodeLen,DCEntryoffset,0  
                    
                    invoke ExitProcess,NULL
                    end start
2011-7-15 15:09
0
雪    币: 75
活跃值: (688)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
7
楼上,你规避这个问题实质了,
;若没有后面jmp @F 语句及@@标号,就没有问题,若有,则不一致
                    ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                    jmp @F
@@:
                    ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
你把我的代码,这部分去掉,再编译看看,这几个值就是一样的,只要里面没用@@标号,值都是对的,用了值就对不上了

我觉得,masm32编译器处理@@与其它全局标量上可能有问题
2011-7-15 15:32
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
8
我用RadASM编译 也出现一样的问题   继续关注中  希望大牛来解答。
2011-7-19 16:55
0
雪    币: 75
活跃值: (688)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
微软编译器的bug啦
2011-7-19 19:34
0
雪    币: 216
活跃值: (144)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
10
mark~~,有意思的东西~~
2011-7-29 12:29
0
游客
登录 | 注册 方可回帖
返回
//