首页
社区
课程
招聘
我用win32asm编写的程序,在2000、xp下得到的结果不同[求助]
发表于: 2005-12-16 14:10 4333

我用win32asm编写的程序,在2000、xp下得到的结果不同[求助]

2005-12-16 14:10
4333
在2000下的结果正确,xp下的结果错误
过程如下

;********************************************************************
;   解密函数
;   参数:源字符串地址,目的字符串地址
;   返回:无
;********************************************************************
_Decode         proc   _lpSString,_lpDString
                local        @Len:word,@Source_Len:word
                local        @c1:word,@c2:word
                local        @Code[8]:byte
                local        @a1:byte,@a2:byte
                local        @ind:dword
               
                pushad
                xor         eax,eax
                mov         @Len,ax
                mov         @c1,2
                mov         @c2,ax
                mov         @a1,al
                mov         @a2,al
                mov         @ind,eax
                lea        edx,@Code
                mov        byte ptr [edx+2],252
                mov        byte ptr [edx+4],240
                mov        byte ptr [edx+6],192
                mov         esi,_lpSString
                mov        edi,_lpDString
                invoke        lstrlen,_lpSString
                mov        @Source_Len,ax
                xor        ebx,ebx       
                .while  bx < @Source_Len
                        mov        al,byte ptr [esi]               
                        sub        al,3ch
                        .if        al < 0
                                mov        cl,byte ptr [esi]
                                mov        byte ptr [edi],cl
                                inc        esi
                                inc        edi
                                inc        @Len
                                inc        bx
                                mov        @a1,0
                                mov        @a2,0
                                mov        @c1,2
                                mov        @c2,0
                                mov        @ind,0
                                .continue
                        .endif       
                        mov        @a1,al
                        inc        esi
                        mov        cx,@Len
                        .break         .if        cx >= @Source_Len
                        mov        cx,@c2
                        add        cx,6
                        .if        cx < 8
                                jmp        Label2
                        .endif
                        and        al,3fh
                        movzx        ecx,al
                        mov        @ind,ecx
                        mov        cx,6
                        sub        cx,@c1
                        mov        eax,@ind
                        shr        eax,cl       
                        mov        @ind,eax
                        or        al,@a2
                        mov        byte ptr [edi],al
                        inc        edi
                        inc        @Len
                        mov        @c2,0
                        .if        @c1 >= 6
                                mov        @c1,2
                                jmp        Label1
                        .endif
                        add        @c1,2
                Label2:        xor        ecx,ecx
                        mov        cx,@c1
                        movzx        eax,@a1
                        shl        eax,cl
                        push        edx
                        add        edx,ecx
                        and        al,byte ptr [edx]
                        pop        edx
                        mov        @a2,al
                        mov        cx,8
                        sub        cx,@c1
                        add        @c2,cx
                Label1:        inc bx
                .endw
                popad
                ret                               
_Decode   endp

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 164
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sas
2
问题已经解决。
用od调试发现问题出现在这儿
Label2:  xor  ecx,ecx
      mov  cx,@c1
      movzx  eax,@a1
      shl  eax,cl
      push  edx
      add  edx,ecx
      and  al,byte ptr [edx]        ;这儿
      pop  edx
      mov  @a2,al
      mov  cx,8
      sub  cx,@c1
      add  @c2,cx

改成:
Label2:        xor        ecx,ecx
                        mov        cx,@c1
                        movzx        eax,@a1
                        shl        eax,cl
                        lea        edx,@Code
                        and        al,byte ptr [edx+ecx]
                        mov        @a2,al
                        mov        cx,8
                        sub        cx,@c1
                        add        @c2,cx
2005-12-16 16:35
0
游客
登录 | 注册 方可回帖
返回
//