首页
社区
课程
招聘
[原创]EditPlus V4.1 注册算法分析
发表于: 2016-11-2 04:39 12751

[原创]EditPlus V4.1 注册算法分析

2016-11-2 04:39
12751
.text:004D8D80 ; int __thiscall Fun1(CDialog *this)
.text:004D8D80 Fun1        proc near         ; DATA XREF: 
.rdata:00598BA4o
.text:004D8D80
.text:004D8D80 var_8   = dword ptr -8
.text:004D8D80 var_4   = dword ptr -4
.text:004D8D80
.text:004D8D80      sub      esp, 8
.text:004D8D83      push    esi
.text:004D8D84      lea       eax, [esp+0Ch+var_8]
.text:004D8D88      push    eax
.text:004D8D89      mov     esi, ecx
.text:004D8D8B      mov     [esp+10h+var_8], 0
.text:004D8D93      call       Fun_KeyFun      ; 按照 Unicode 格式的数据做校验
.text:004D8D98      test      eax, eax
.text:004D8D9A      jnz       short loc_4D8DD9
.text:004D8D9C      lea      ecx, [esp+0Ch+var_4]
.text:004D8DA0      push    ecx
.text:004D8DA1      mov     ecx, esi
.text:004D8DA3      mov     [esp+10h+var_4], eax
.text:004D8DA7      call       Fun_KeyFun1     ; 按照 ASCII 格式的数据做校验
.text:004D8DAC      mov     ecx, [esp+0Ch+var_4]
.text:004D8DB0      mov     edx, [esp+0Ch+var_8]
.text:004D8DB4      test     ecx, ecx
.text:004D8DB6      jbe      short loc_4D8DC2
.text:004D8DB8      cmp    edx, 4E7Fh
.text:004D8DBE      jz        short loc_4D8DC2
.text:004D8DC0      mov    edx, ecx
.text:004D8DC2
.text:004D8DC2 loc_4D8DC2:      ; CODE XREF: Fun1+36j
.text:004D8DC2                        ; Fun1+3Ej
.text:004D8DC2      test    eax, eax
.text:004D8DC4      jnz     short loc_4D8DD9
.text:004D8DC6      test    edx, edx
.text:004D8DC8      jz        short loc_4D8DD4
.text:004D8DCA      push   0FFFFFFFFh      ; unsigned int
.text:004D8DCC      push   10h             ; uType
.text:004D8DCE      push   edx             ; unsigned int
.text:004D8DCF      call      ?AfxMessageBox@@YGHIII@Z ; AfxMessageBox(uint,uint,uint)
.text:004D8DD4 loc_4D8DD4:                   ; CODE XREF: Fun1+48j
.text:004D8DD4      pop     esi
.text:004D8DD5      add     esp, 8
.text:004D8DD8      retn
.text:004D8DD9 ; 
---------------------------------------------------------------------------
.text:004D8DD9
.text:004D8DD9 loc_4D8DD9:      ; CODE XREF: Fun1+1Aj
.text:004D8DD9                        ; Fun1+44j
.text:004D8DD9      mov     edx, [esi+134h]
.text:004D8DDF      mov     ecx, esi        ; this
.text:004D8DE1      mov     dword ptr [edx], 0
.text:004D8DE7      pop     esi
.text:004D8DE8      add     esp, 8
.text:004D8DEB      jmp     ?OnOK@CDialog@@MAEXXZ ; CDialog::OnOK(void)
.text:004D8DEB Fun1   endp[/COLOR]
.text:004D8AF0 Fun_KeyFun      proc near               ; CODE XREF: 
Fun1+13p
.text:004D8AF0
.text:004D8AF0 var_45C = dword ptr -45Ch
.text:004D8AF0 var_458 = dword ptr -458h
.text:004D8AF0 var_454 = dword ptr -454h
.text:004D8AF0 var_450 = word ptr -450h
.text:004D8AF0 Dst       = word ptr -3ECh
.text:004D8AF0 var_4    = dword ptr -4
.text:004D8AF0 arg_0    = dword ptr  4
.text:004D8AF0
.text:004D8AF0         sub     esp, 45Ch
.text:004D8AF6         mov    eax, dword_5CCE34
.text:004D8AFB         xor     eax, esp
.text:004D8AFD         mov    [esp+45Ch+var_4], eax
.text:004D8B04         mov    eax, [esp+45Ch+arg_0]
.text:004D8B0B         push    ebx
.text:004D8B0C         push    ebp
.text:004D8B0D         mov    ebp, ecx
.text:004D8B0F         lea      ecx, [esp+464h+var_45C]
.text:004D8B13         push    ecx                ; int
.text:004D8B14         push    1F4h               ; SizeInWords
.text:004D8B19         lea     edx, [esp+46Ch+Dst]
.text:004D8B20         mov     [esp+46Ch+var_458], eax
.text:004D8B24         push    edx                ; Dst
.text:004D8B25         lea     eax, [ebp+0C8h]
.text:004D8B2B         push    eax                ; int
.text:004D8B2C         call    Fun_GetInputString ; eax = UserName(Unicode)
.text:004D8B31         add     esp, 10h
.text:004D8B34         cmp     [esp+464h+var_45C], 0
.text:004D8B39         mov     ebx, eax
.text:004D8B3B         mov     [esp+464h+var_454], ebx
.text:004D8B3F         jnz     short loc_4D8B48
.text:004D8B41         xor     eax, eax
.text:004D8B43         jmp     loc_4D8C17
.text:004D8B48 ; 
---------------------------------------------------------------------------
.text:004D8B48
.text:004D8B48 loc_4D8B48:     ; CODE XREF: Fun_KeyFun+4Fj
.text:004D8B48         push    edi
.text:004D8B49         lea     ecx, [esp+468h+var_45C]
.text:004D8B4D         push    ecx             ; int
.text:004D8B4E         push    32h             ; SizeInWords
.text:004D8B50         lea     edx, [esp+470h+var_450]
.text:004D8B54         push    edx             ; Dst
.text:004D8B55         lea     eax, [ebp+74h]
.text:004D8B58         push    eax             ; int
.text:004D8B59         call    Fun_GetInputString ; eax = RegCode(Unicode)
.text:004D8B5E         mov     edi, eax
.text:004D8B60         mov     eax, [esp+478h+var_45C]
.text:004D8B64         add     esp, 10h
.text:004D8B67         test     eax, eax
.text:004D8B69         jz       short loc_4D8BE9
.text:004D8B6B         push    esi
.text:004D8B6C         xor     esi, esi
.text:004D8B6E         test     eax, eax
.text:004D8B70         jle      short loc_4D8BB6 ; 密钥字符串(Unicode)
.text:004D8B72
.text:004D8B72 loc_4D8B72:     ; CODE XREF: Fun_KeyFun+C0j
.text:004D8B72         movzx   ebx, word ptr [edi+esi*2]
.text:004D8B76         mov     ecx, 100h
.text:004D8B7B         cmp     bx, cx
.text:004D8B7E         jnb      short loc_4D8B8D
.text:004D8B80         movzx   edx, bl
.text:004D8B83         movzx   eax, word_5F2890[edx*2]
.text:004D8B8B         jmp     short loc_4D8BA7
.text:004D8B8D ; 
---------------------------------------------------------------------------
.text:004D8B8D
.text:004D8B8D loc_4D8B8D:     ; CODE XREF: Fun_KeyFun+8Ej
.text:004D8B8D         movzx   eax, bx
.text:004D8B90         push    eax             ; lpsz
.text:004D8B91         call     ds:CharUpperW
.text:004D8B97         movzx   eax, ax
.text:004D8B9A         test     ax, ax
.text:004D8B9D         jnz     short loc_4D8BA4
.text:004D8B9F         movzx   eax, bx
.text:004D8BA2         jmp     short loc_4D8BA7
.text:004D8BA4 ; 
---------------------------------------------------------------------------
.text:004D8BA4
.text:004D8BA4 loc_4D8BA4:     ; CODE XREF: Fun_KeyFun+ADj
.text:004D8BA4         movzx   eax, ax
.text:004D8BA7
.text:004D8BA7 loc_4D8BA7:     ; CODE XREF: Fun_KeyFun+9Bj
.text:004D8BA7                ; Fun_KeyFun+B2j
.text:004D8BA7         mov    [edi+esi*2], ax
.text:004D8BAB         inc     esi
.text:004D8BAC         cmp    esi, [esp+46Ch+var_45C]
.text:004D8BB0         jl      short loc_4D8B72 ; 将密钥中的小写字母转换为大写
.text:004D8BB2         mov    ebx, [esp+46Ch+var_454]
.text:004D8BB6
.text:004D8BB6 loc_4D8BB6:     ; CODE XREF: Fun_KeyFun+80j
.text:004D8BB6         push    edi             ; 密钥字符串(Unicode)
.text:004D8BB7         push    ebx             ; 用户名字符串(Unicode)
.text:004D8BB8         call    Fun2_UserName_RegCode ; 参数(UserName, RegCode),对UserName 和 RegCode 进行校验
.text:004D8BBD         add     esp, 8
.text:004D8BC0         pop     esi
.text:004D8BC1         test     eax, eax        ;  校验成功时这里返回1
.text:004D8BC3         jnz      short loc_4D8BD1
.text:004D8BC5         mov     ecx, [esp+468h+var_458] ; 校验成功时这里不执行
.text:004D8BC9         mov     dword ptr [ecx], 5F81h
.text:004D8BCF         jmp     short loc_4D8C16 ; 校验失败时跳转
.text:004D8BD1 ; 
---------------------------------------------------------------------------
.text:004D8BD1
.text:004D8BD1 loc_4D8BD1:     ; CODE XREF: Fun_KeyFun+D3j
.text:004D8BD1         push    edi
.text:004D8BD2         push    ebx
.text:004D8BD3         call    Fun_WriteInfo2RegAndIniFile ; 校验成功之后执行这里,参数仍然为(UserName, RegCode), 向注册表和ini文件中写入一些信息
.text:004D8BD8         add     esp, 8
.text:004D8BDB         test    eax, eax
.text:004D8BDD         jnz     short loc_4D8BED
.text:004D8BDF         mov     edx, [esp+468h+var_458]
.text:004D8BE3         mov     dword ptr [edx], 4E7Fh
.text:004D8BE9
.text:004D8BE9 loc_4D8BE9:     ; CODE XREF: Fun_KeyFun+79j
.text:004D8BE9        xor     eax, eax
.text:004D8BEB        jmp     short loc_4D8C16
.text:004D8BED ; 
---------------------------------------------------------------------------
.text:004D8BED
.text:004D8BED loc_4D8BED:    ; CODE XREF: Fun_KeyFun+EDj
.text:004D8BED        mov     eax, [ebp+120h]
.text:004D8BF3        push    ebx             ; Src
.text:004D8BF4        push    1F4h            ; SizeInWords
.text:004D8BF9        push    eax             ; Dst
.text:004D8BFA        call       _wcscpy_s
.text:004D8BFF        mov      ecx, [ebp+124h]
.text:004D8C05        push    edi             ; Src
.text:004D8C06        push    32h             ; SizeInWords
.text:004D8C08        push    ecx             ; Dst
.text:004D8C09        call      _wcscpy_s
.text:004D8C0E        add     esp, 18h
.text:004D8C11        mov     eax, 1
.text:004D8C16
.text:004D8C16 loc_4D8C16:     ; CODE XREF: Fun_KeyFun+DFj
.text:004D8C16                ; Fun_KeyFun+FBj
.text:004D8C16        pop     edi
.text:004D8C17
.text:004D8C17 loc_4D8C17:     ; CODE XREF: Fun_KeyFun+53j
.text:004D8C17        mov     ecx, [esp+464h+var_4]
.text:004D8C1E        pop     ebp
.text:004D8C1F        pop     ebx
.text:004D8C20        xor      ecx, esp
.text:004D8C22        call      Fun_UnKnow  ;未总结功能
.text:004D8C27        add     esp, 45Ch
.text:004D8C2D        retn    4
.text:004D8C2D Fun_KeyFun      endp
.text:004D8250 Fun2_UserName_RegCode proc near    ; CODE XREF: 
sub_460B80+17Ep
.text:004D8250                                    ; Fun_KeyFun+C8p
.text:004D8250
.text:004D8250 Dst     = word ptr -0BD0h
.text:004D8250 var_BCE = word ptr -0BCEh
.text:004D8250 var_BBC = byte ptr -0BBCh
.text:004D8250 var_4   = dword ptr -4
.text:004D8250 arg_0   = dword ptr  4
.text:004D8250 arg_4   = dword ptr  8
.text:004D8250
.text:004D8250         sub     esp, 0BD0h
.text:004D8256         mov     eax, dword_5CCE34
.text:004D825B         xor     eax, esp
.text:004D825D         mov    [esp+0BD0h+var_4], eax
.text:004D8264         push    ebx
.text:004D8265         push    ebp
.text:004D8266         mov    ebp, [esp+0BD8h+arg_0] ; ebp = UserName
.text:004D826D         push   esi
.text:004D826E         mov    esi, [esp+0BDCh+arg_4] ; esi = RegCode
.text:004D8275         mov    eax, ebp
.text:004D8277         push    edi
.text:004D8278         lea     edx, [eax+2]
.text:004D827B         jmp    short loc_4D8280
.text:004D827B ; 
---------------------------------------------------------------------------
.text:004D827D                 align 10h
.text:004D8280
.text:004D8280 loc_4D8280:     ; CODE XREF: Fun2_UserName_RegCode+2Bj
.text:004D8280                       ; Fun2_UserName_RegCode+39j
.text:004D8280         mov    cx, [eax]
.text:004D8283         add    eax, 2
.text:004D8286         test    cx, cx
.text:004D8289         jnz     short loc_4D8280
.text:004D828B         sub    eax, edx
.text:004D828D         sar    eax, 1        ; eax = UserName 长度
.text:004D828F         mov   ebx, eax
.text:004D8291         mov   eax, esi
.text:004D8293         lea    edx, [eax+2]
.text:004D8296
.text:004D8296 loc_4D8296:     ; CODE XREF: Fun2_UserName_RegCode+4Fj
.text:004D8296        mov     cx, [eax]
.text:004D8299        add     eax, 2
.text:004D829C        test    cx, cx
.text:004D829F        jnz      short loc_4D8296
.text:004D82A1        sub     eax, edx
.text:004D82A3        sar      eax, 1          ; eax = RegCode 长度
.text:004D82A5        mov     edi, eax
.text:004D82A7        call      Fun_CreateGlobalTable_005F38A0_ ; 在地址0X005F38A0处生成一个0X200大小的数组
.text:004D82AC        push    0BB8h           ; Arg4 常量0x0BB8
.text:004D82B1        lea       eax, [esp+0BE4h+var_BBC]
.text:004D82B5        push    eax   ; Arg3 栈地址,用于保存格式化后数据的地址
.text:004D82B6        push    ebx   ; Arg2 Unicode 字符串长度(此处为UserName长度)
.text:004D82B7        push    ebp   ; Arg1 Unicode 字符串(此处为 UserName)
.text:004D82B8        call       Fun_FroamtString ; 对Unicode字符串进行格式化,对每个Unicode字符按照 %04X进行格式化
.text:004D82BD        push    eax             ; Arg3 格式化后字符串的长度
.text:004D82BE        lea       ecx, [esp+0BF4h+var_BBC]
.text:004D82C2        push    ecx             ; Arg2 格式化后的字符串
.text:004D82C3        push    0               ; Arg1 常量 0
.text:004D82C5        call        Fun_CalcStringyValue ; 对Unicode字符串(这里是 UserName) 进行计算,得出一个值,在计算的过程中使用了之前的全局表数据
.text:004D82CA        movzx   edx, ax         ; 计算的结果为 WORD 类型
.text:004D82CD        push    edx             ; ArgList
.text:004D82CE        lea       eax, [esp+0C00h+Dst]
.text:004D82D2        push    offset a04x     ; "%04X"
.text:004D82D7        push    eax             ; Dst
.text:004D82D8        call      Fun_FormatCalcRes ; 将计算的结果格式化为字符串
.text:004D82DD        mov     cx, [esi+4]
.text:004D82E1        lea       eax, [esi+4]
.text:004D82E4        add     esp, 28h
.text:004D82E7        cmp     cx, [esp+0BE0h+Dst] ; 格式化后的字符串的第一个字符和 RegCode的第三个字符比较
.text:004D82EC        jz      short loc_4D82F2
.text:004D82EE
.text:004D82EE loc_4D82EE:   ; CODE XREF: Fun2_UserName_RegCode+ABj
.text:004D82EE        xor     eax, eax
.text:004D82F0        jmp     short loc_4D834C
.text:004D82F2 ; 
---------------------------------------------------------------------------
.text:004D82F2
.text:004D82F2
 loc_4D82F2:; CODE XREF: Fun2_UserName_RegCode+9Cj
.text:004D82F2        mov     dx, [esi+6]
.text:004D82F6        cmp     dx, [esp+0BE0h+var_BCE] ; 格式化后的字符串的第二个字符和RegCode的四个字符比较
.text:004D82FB        jnz     short loc_4D82EE
.text:004D82FD        push    0BB8h
.text:004D8302        lea     ecx, [esp+0BE4h+var_BBC]
.text:004D8306        push    ecx
.text:004D8307        add     edi, -2         ; RegCode 长度减2
.text:004D830A        push    edi
.text:004D830B        push    eax
.text:004D830C        call    Fun_FroamtString ; 将RegCode从第三个字符开始,按照 %4X 的格式对每个字符进行格式化
.text:004D8311        push    eax
.text:004D8312        lea     edx, [esp+0BF4h+var_BBC]
.text:004D8316        push    edx
.text:004D8317        push    0
.text:004D8319        call    Fun_CalcStringyValue ; 对Unicode字符串(这里是从RegCode 的第三个字符开始)进行计算,得出一个值,在计算的过程中使用了之前的全局表的数据
.text:004D831E        movzx   eax, ax         ; 计算结果为 DWORD 类型
.text:004D8321        push    eax             ; ArgList
.text:004D8322        lea     ecx, [esp+0C00h+Dst]
.text:004D8326        push   offset a04x     ; "%04X"
.text:004D832B        push   ecx             ; Dst
.text:004D832C        call    Fun_FormatCalcRes ; 格式化计算的结果
.text:004D8331        mov     dx, [esi]       ; 取出 RegCode 第一位字符串
.text:004D8334        add     esp, 28h
.text:004D8337        xor     eax, eax
.text:004D8339       cmp     dx, [esp+0BE0h+Dst] ; 格式化字符串的第一个和 RegCode 的第一个字符比较
.text:004D833E        jnz     short loc_4D834C
.text:004D8340        mov     cx, [esi+2]     ; 取出 RegCode 第二位字符串
.text:004D8344        cmp     cx, [esp+0BE0h+var_BCE] ; 格式化字符串的第二个和 RegCode 的第二个字符比较
.text:004D8349        setz    al
.text:004D834C
.text:004D834C loc_4D834C:     ; CODE XREF: Fun2_UserName_RegCode+A0j
.text:004D834C                 ; Fun2_UserName_RegCode+EEj
.text:004D834C        mov     ecx, [esp+0BE0h+var_4]
.text:004D8353        pop     edi
.text:004D8354        pop     esi
.text:004D8355        pop     ebp
.text:004D8356        pop     ebx
.text:004D8357        xor     ecx, esp
.text:004D8359        call    Fun_UnKnow      ; 暂时没看出来该函数的功能
.text:004D835E        add     esp, 0BD0h
.text:004D8364        retn
.text:004D8364 Fun2_UserName_RegCode endp
.text:004D7560 Fun_CreateGlobalTable_005F38A0_ proc near
.text:004D7560        ; CODE XREF: Fun_GetVolumeSerialAndCalc+D6p
.text:004D7560        ; Fun2_UserName_RegCode+57p ...
.text:004D7560        push    200h            ; size_t
.text:004D7565        push    0               ; int
.text:004D7567        push    offset word_5F38A0 ; void *
.text:004D756C        call    _memset
.text:004D7571        add     esp, 0Ch
.text:004D7574        xor     edx, edx
.text:004D7576        jmp     short loc_4D7580
.text:004D7576 ; 
---------------------------------------------------------------------------
.text:004D7578                 align 10h
.text:004D7580
.text:004D7580 loc_4D7580:    ; CODE XREF: Fun_CreateGlobalTable_005F38A0_+16j
.text:004D7580                ; Fun_CreateGlobalTable_005F38A0_+57j
.text:004D7580        mov     eax, 0C0C1h
.text:004D7585        mov     ecx, 1
.text:004D758A        lea     ebx, [ebx+0]
.text:004D7590
.text:004D7590 loc_4D7590:    ; CODE XREF: Fun_CreateGlobalTable_005F38A0_+4Ej
.text:004D7590        test    edx, ecx
.text:004D7592        jz      short loc_4D759C
.text:004D7594        xor     word_5F38A0[edx*2], ax
.text:004D759C
.text:004D759C loc_4D759C:    ; CODE XREF: Fun_CreateGlobalTable_005F38A0_+32j
.text:004D759C        add     eax, eax
.text:004D759E        xor     eax, 4003h
.text:004D75A3        add     ecx, ecx
.text:004D75A5        cmp     ecx, 100h
.text:004D75AB        movzx   eax, ax
.text:004D75AE        jl      short loc_4D7590
.text:004D75B0        inc     edx
.text:004D75B1        cmp     edx, 100h
.text:004D75B7        jl      short loc_4D7580
.text:004D75B9        retn
.text:004D75B9 Fun_CreateGlobalTable_005F38A0_ endp
/********************************************
函数功能:
         在固定地址处 g_dwAddr(0x005F38A0) 处
         依据函数内的算法生成数据, 生成的数据
         是固定的, 大小为 g_dwSize(0X200)
**********************************************/
void Fun_CreateGlobalTable_005F38A0()
{
    //空间置0
    memset((void*)g_dwAddr, 0, g_dwSize);
    
    DWORD dwEDX = 0;
    DWORD dwEAX;
    DWORD dwECX;
    DWORD dwEBX;
    
    do
    {
        dwEAX = 0xC0C1;
        dwECX = 0x01;
        dwEBX = 0x0A;
        
        do
        {
            if(0 != (dwEDX&dwECX))
            {
                *(WORD*)((char*)g_dwAddr + dwEDX*2) ^= (WORD)(dwEAX&0x0000FFFF);
            }
            
            dwEAX *= 2;
            dwEAX ^= 0x4003;
            dwECX *= 2;
            dwEAX &= 0x0000FFFF;
        }while(dwECX < 0x100);
        
        dwEDX++;
    }while(dwEDX < 0x100);    
}
.text:004D7600 Fun_FroamtString proc near ; CODE XREF: 
Fun2_UserName_RegCode+68p
.text:004D7600                            ; Fun2_UserName_RegCode+BCp
.text:004D7600
.text:004D7600 arg_0 = dword ptr  4
.text:004D7600 arg_4 = dword ptr  8
.text:004D7600 arg_8 = dword ptr  0Ch
.text:004D7600 arg_C = dword ptr  10h
.text:004D7600
.text:004D7600       push    ebp
.text:004D7601       mov     ebp, [esp+4+arg_4]
.text:004D7605       push    esi
.text:004D7606       push    edi
.text:004D7607       xor     esi, esi
.text:004D7609       xor     edi, edi
.text:004D760B       test    ebp, ebp
.text:004D760D       jle     short loc_4D7648
.text:004D760F       push    ebx
.text:004D7610       mov     ebx, [esp+10h+arg_8]
.text:004D7614
.text:004D7614 loc_4D7614: ; CODE XREF: Fun_FroamtString+3Bj
.text:004D7614       mov     eax, [esp+10h+arg_0]
.text:004D7618       movzx   ecx, word ptr [eax+edi*2]
.text:004D761C       mov     edx, [esp+10h+arg_C]
.text:004D7620       push    ecx
.text:004D7621       push    offset a04x_0   ; "%04X"
.text:004D7626       sub     edx, esi
.text:004D7628       push    edx             ; SizeInBytes
.text:004D7629       lea     eax, [esi+ebx]
.text:004D762C       push    eax             ; DstBuf
.text:004D762D       call    _sprintf_s
.text:004D7632       inc     edi
.text:004D7633       add     esp, 10h
.text:004D7636       add     esi, 4
.text:004D7639       cmp     edi, ebp
.text:004D763B       jl      short loc_4D7614
.text:004D763D       mov     byte ptr [esi+ebx], 0
.text:004D7641       pop     ebx
.text:004D7642       pop     edi
.text:004D7643       mov     eax, esi
.text:004D7645       pop     esi
.text:004D7646       pop     ebp
.text:004D7647       retn
.text:004D7648 ; 
---------------------------------------------------------------------------
.text:004D7648
.text:004D7648
 loc_4D7648:     ; CODE XREF: Fun_FroamtString+Dj
.text:004D7648       mov     ecx, [esp+0Ch+arg_8]
.text:004D764C       pop     edi
.text:004D764D       mov     byte ptr [esi+ecx], 0
.text:004D7651       mov     eax, esi
.text:004D7653       pop     esi
.text:004D7654       pop     ebp
.text:004D7655       retn
.text:004D7655 Fun_FroamtString endp
/****************************************************************************

参数意义:
            Arg1: IN  g_wChar Unicode 字符串首地址            
            Arg2: IN  g_dwAddrFormatDataBuff 接收格式化数据的地址
            Arg3: IN  dwLength 接收格式化数据的缓冲区长度
            Arg4: IN  dwConstValue 常量 0xBB8

函数功能:   格式化 Unicode字符串,格式化后的数据存放到 g_dwAddrFormatDataBuff

函数返回值: 返回格式化后缓冲区的字节数
****************************************************************************/
DWORD Fun_FroamtString(IN WCHAR *g_wChar, IN DWORD g_dwAddrFormatDataBuff, IN DWORD dwLength, IN DWORD dwConstValue)
{
  DWORD dwRet = 0;
  WORD  wValue;
  for(int iIndex = 0; iIndex < dwLength; iIndex++)
  {
    wValue = *(WORD*)((DWORD)g_wChar + iIndex*2);  //取出每个Unicode字符的值
    ::sprintf((char*)(g_dwAddrFormatDataBuff + dwRet), "%04X", wValue);
    dwRet += 4;
  }

  *(char*)(g_dwAddrFormatDataBuff + dwRet) = 0;

  return dwRet;
}

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 2
支持
分享
最新回复 (20)
雪    币: 99
活跃值: (110)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
mark.!!!!
2016-11-2 06:59
0
雪    币: 114
活跃值: (180)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
厉害,谢谢分享
2016-11-2 09:13
0
雪    币: 21
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
mark,分析过程很详细,如果把注册机附上就更完美了!
2016-11-2 09:16
0
雪    币: 5573
活跃值: (2153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
很久没看到这么详细的教程了,谢谢分享!
2016-11-2 12:28
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不错,这么详实细致的内容,值得好好学习一下。
不知道楼主能不能看下我发的求助帖,帮我分析一下呢?
2016-11-4 06:27
0
雪    币: 131
活跃值: (98)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
算法好文越来越少了………………
支持楼主!~~~~
2016-11-4 13:18
0
雪    币: 144
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
2016-11-5 09:40
0
雪    币: 267
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
楼主好耐心,是一篇不错的学习案例。崇拜楼主
2016-11-5 11:23
0
雪    币: 675
活跃值: (822)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谢谢震得不错
2016-11-5 18:13
0
雪    币: 26
活跃值: (79)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
Mark一下,好帖子越来越少,不得不顶
2016-11-6 13:45
0
雪    币: 8826
活跃值: (3063)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
在学习中进步
2016-11-6 16:41
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
学习学习一下咯
2016-11-6 17:38
0
雪    币: 367
活跃值: (178)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
哈哈, 咱们一起,好好学习。
2016-11-8 16:44
0
雪    币: 367
活跃值: (178)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
谢谢,相互交流,共同进步。
2016-11-8 16:46
0
雪    币: 92
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
过来支持一下虎哥!新版本验证算法基本没什么修改。
2016-11-12 11:24
0
雪    币: 289
活跃值: (77)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
好帖,顶,学习学习。
2016-11-12 16:31
0
雪    币: 367
活跃值: (178)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
看来你以前也分析过,哈哈。
2016-11-14 13:29
0
雪    币: 94
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
学习学习,带个注册机就完美了
2016-11-14 13:36
0
雪    币: 23
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
楼主写的不错。make下
2016-11-15 14:59
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
进来学习一下。
2016-12-6 20:47
0
游客
登录 | 注册 方可回帖
返回
//