您的位置:首页 > 其它

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

2015-06-06 10:00 211 查看
关键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位字符,连接而成


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: