EasyMoney算法分析(仅作为分析记录)

来源:互联网 发布:网络星光大道张卫 编辑:程序博客网 时间:2024/05/29 02:28

关键CALL如下:

00597279  |.  8955 FC       mov     dword ptr [ebp-0x4], edx         ;  用户名
0059727C  |.  8B45 FC       mov     eax, dword ptr [ebp-0x4]
0059727F  |.  E8 1CDDE6FF   call    00404FA0
00597284  |.  33C0          xor     eax, eax
00597286  |.  55            push    ebp
00597287  |.  68 21745900   push    00597421
0059728C  |.  64:FF30       push    dword ptr fs:[eax]
0059728F  |.  64:8920       mov     dword ptr fs:[eax], esp
00597292  |.  8BC7          mov     eax, edi
00597294  |.  E8 67D8E6FF   call    00404B00
00597299  |.  8B45 FC       mov     eax, dword ptr [ebp-0x4]
0059729C  |.  E8 17DBE6FF   call    00404DB8
005972A1  |.  8BF0          mov     esi, eax                         ;  计算用户名长度
005972A3  |.  85F6          test    esi, esi
005972A5  |.  7E 26         jle     short 005972CD
005972A7  |.  BB 01000000   mov     ebx, 0x1
005972AC  |>  8D4D EC       /lea     ecx, dword ptr [ebp-0x14]
005972AF  |.  8B45 FC       |mov     eax, dword ptr [ebp-0x4]
005972B2  |.  0FB64418 FF   |movzx   eax, byte ptr [eax+ebx-0x1]     ;  用户名的字符user[i]
005972B7  |.  33D2          |xor     edx, edx
005972B9  |.  E8 1E28E7FF   |call    00409ADC                        ;  将其ASC码值转为十六进制字串
005972BE  |.  8B55 EC       |mov     edx, dword ptr [ebp-0x14]
005972C1  |.  8D45 F8       |lea     eax, dword ptr [ebp-0x8]
005972C4  |.  E8 F7DAE6FF   |call    00404DC0
005972C9  |.  43            |inc     ebx
005972CA  |.  4E            |dec     esi
005972CB  |.^ 75 DF         \jnz     short 005972AC
005972CD  |>  8B45 F8       mov     eax, dword ptr [ebp-0x8]
005972D0  |.  E8 E3DAE6FF   call    00404DB8
005972D5  |.  8BF0          mov     esi, eax
005972D7  |.  85F6          test    esi, esi
005972D9  |.  7E 2C         jle     short 00597307
005972DB  |.  BB 01000000   mov     ebx, 0x1
005972E0  |>  8B45 F8       /mov     eax, dword ptr [ebp-0x8]        ;  上面的十六进制字符串
005972E3  |.  E8 D0DAE6FF   |call    00404DB8                        ;  算字符串长度
005972E8  |.  2BC3          |sub     eax, ebx
005972EA  |.  8B55 F8       |mov     edx, dword ptr [ebp-0x8]
005972ED  |.  8A1402        |mov     dl, byte ptr [edx+eax]          ;  第i个字符
005972F0  |.  8D45 E8       |lea     eax, dword ptr [ebp-0x18]
005972F3  |.  E8 E8D9E6FF   |call    00404CE0
005972F8  |.  8B55 E8       |mov     edx, dword ptr [ebp-0x18]       ;  第len-i个字符
005972FB  |.  8D45 F4       |lea     eax, dword ptr [ebp-0xC]
005972FE  |.  E8 BDDAE6FF   |call    00404DC0
00597303  |.  43            |inc     ebx
00597304  |.  4E            |dec     esi
00597305  |.^ 75 D9         \jnz     short 005972E0                  ;  这里即实现倒着输出字符串
00597307  |>  8D45 F8       lea     eax, dword ptr [ebp-0x8]
0059730A  |.  50            push    eax
0059730B  |.  B9 04000000   mov     ecx, 0x4                         ;  长度4
00597310  |.  BA 01000000   mov     edx, 0x1                         ;  从位置1开始
00597315  |.  8B45 F4       mov     eax, dword ptr [ebp-0xC]         ;  倒着输出的字符串
00597318  |.  E8 F3DCE6FF   call    00405010
0059731D  |.  8D45 F4       lea     eax, dword ptr [ebp-0xC]
00597320  |.  50            push    eax
00597321  |.  B9 04000000   mov     ecx, 0x4                         ;  长度
00597326  |.  BA 05000000   mov     edx, 0x5                         ;  位置
0059732B  |.  8B45 F4       mov     eax, dword ptr [ebp-0xC]         ;  倒着输出的字符串
0059732E  |.  E8 DDDCE6FF   call    00405010                         ;  取第5个位置起的4个字符
00597333  |.  8B45 F8       mov     eax, dword ptr [ebp-0x8]
00597336  |.  E8 7DDAE6FF   call    00404DB8                         ;  求长度
0059733B  |.  83F8 04       cmp     eax, 0x4
0059733E  |.  7D 2F         jge     short 0059736F
00597340  |.  8B45 F8       mov     eax, dword ptr [ebp-0x8]
00597343  |.  E8 70DAE6FF   call    00404DB8
00597348  |.  8BD8          mov     ebx, eax
0059734A  |.  83FB 03       cmp     ebx, 0x3
0059734D  |.  7F 20         jg      short 0059736F
0059734F  |>  8D4D E4       /lea     ecx, dword ptr [ebp-0x1C]
00597352  |.  8BC3          |mov     eax, ebx
00597354  |.  C1E0 02       |shl     eax, 0x2
00597357  |.  33D2          |xor     edx, edx
00597359  |.  E8 7E27E7FF   |call    00409ADC
0059735E  |.  8B55 E4       |mov     edx, dword ptr [ebp-0x1C]
00597361  |.  8D45 F8       |lea     eax, dword ptr [ebp-0x8]
00597364  |.  E8 57DAE6FF   |call    00404DC0
00597369  |.  43            |inc     ebx
0059736A  |.  83FB 04       |cmp     ebx, 0x4
0059736D  |.^ 75 E0         \jnz     short 0059734F
0059736F  |>  8B45 F4       mov     eax, dword ptr [ebp-0xC]
00597372  |.  E8 41DAE6FF   call    00404DB8
00597377  |.  83F8 04       cmp     eax, 0x4
0059737A  |.  7D 2F         jge     short 005973AB
0059737C  |.  8B45 F4       mov     eax, dword ptr [ebp-0xC]
0059737F  |.  E8 34DAE6FF   call    00404DB8
00597384  |.  8BD8          mov     ebx, eax
00597386  |.  83FB 03       cmp     ebx, 0x3
00597389  |.  7F 20         jg      short 005973AB
0059738B  |>  8D4D E0       /lea     ecx, dword ptr [ebp-0x20]
0059738E  |.  8BC3          |mov     eax, ebx
00597390  |.  C1E0 02       |shl     eax, 0x2
00597393  |.  33D2          |xor     edx, edx
00597395  |.  E8 4227E7FF   |call    00409ADC
0059739A  |.  8B55 E0       |mov     edx, dword ptr [ebp-0x20]
0059739D  |.  8D45 F4       |lea     eax, dword ptr [ebp-0xC]
005973A0  |.  E8 1BDAE6FF   |call    00404DC0
005973A5  |.  43            |inc     ebx
005973A6  |.  83FB 04       |cmp     ebx, 0x4
005973A9  |.^ 75 E0         \jnz     short 0059738B
005973AB  |>  8D45 F0       lea     eax, dword ptr [ebp-0x10]
005973AE  |.  BA 38745900   mov     edx, 00597438                    ;  money2bar698
005973B3  |.  E8 E0D7E6FF   call    00404B98
005973B8  |.  8D45 DC       lea     eax, dword ptr [ebp-0x24]
005973BB  |.  50            push    eax
005973BC  |.  B9 04000000   mov     ecx, 0x4                         ;  4个字符
005973C1      BA 01000000   mov     edx, 0x1                         ;  从位置1开始
005973C6  |.  8B45 F0       mov     eax, dword ptr [ebp-0x10]        ;  Money2bar698,取前4个字符
005973C9  |.  E8 42DCE6FF   call    00405010                         ;  取字符
005973CE  |.  FF75 DC       push    dword ptr [ebp-0x24]
005973D1  |.  68 50745900   push    00597450                         ;  -
005973D6  |.  FF75 F8       push    dword ptr [ebp-0x8]              ;  用户名倒着的前4个字符
005973D9  |.  8D45 D8       lea     eax, dword ptr [ebp-0x28]
005973DC  |.  50            push    eax
005973DD  |.  B9 05000000   mov     ecx, 0x5                         ;  5个字符
005973E2  |.  BA 05000000   mov     edx, 0x5                         ;  从位置5开始
005973E7  |.  8B45 F0       mov     eax, dword ptr [ebp-0x10]        ;  Money2bar698,


总体算法是:

首先有个常量:"Money2bar698"参与了注册码运算的.

用户名的ASC码值转为16 进制字符串,然後倒着输出,接着取"Money2bar698"前4个字符即"Mone",接上"-"变成"Mone-",再加上倒序输出的字符前4个,再加上"Money2bar698"从第5位取出长度为5的字符"y2bar",再加上用户名转换後的4-8位字符,连接而成再加上"Money2bar698"从第5位取出长度为5的字符"y2bar",再加上用户名转换後的4-8位字符,连接而成


0 0
原创粉丝点击