取用户名的位数给EAX 00427A5E |. 8BF0 mov esi, eax ; // 用户名位数保存到ESI 中 00427A60 |. 85F6 test esi, esi 00427A62 |. 7E 3C jle short 00427AA0 00427A64 |. B8 01000000 mov eax, 1 00427A69 |> 8BD0 /mov edx, eax 00427A6B |. 8B4D FC |mov ecx, dword ptr [ebp-4] 00427A6E |. 0FB64C11 FF |movzx ecx, byte ptr [ecx+edx-1] ; // 逐位取用户名的ASCII 码给 ECX 00427A73 |. 03D9 |add ebx, ecx ; //ebx初始为0,ebx=ebx+ecx 00427A75 |. 71 05 |jno short 00427A7C 00427A77 |. E8 B4AFFDFF |call 00402A30 ; // 溢出容错处理 00427A7C |> C1E3 08 |shl ebx, 8 ; // 逻辑左移 8位 00427A7F |. 8B0D 80884200 |mov ecx, dword ptr [428880] ; echap515.004279FC 00427A85 |. 0FB65411 FF |movzx edx, byte ptr [ecx+edx-1] ; // 逐位将字符列表中的字符给edx 00427A8A |. 0BDA |or ebx, edx ; ebx与edx 进行或操作 00427A8C |. 85DB |test ebx, ebx ; //LANNYDIBANDINGINANAKEKHYANGNGENTOT 00427A8E |. 7D 0C |jge short 00427A9C 00427A90 |. 6BD3 FF |imul edx, ebx, -1 00427A93 |. 71 05 |jno short 00427A9A 00427A95 |. E8 96AFFDFF |call 00402A30 ; // 溢出容错处理 00427A9A |> 8BDA |mov ebx, edx 00427A9C |> 40 |inc eax ; eax++ 00427A9D |. 4E |dec esi ; esi--, esi作为循环控制,其值由输入UserName与LANNYDIBANDINGINANAKEKHYANGNGENTOT 长度确定,取其小者。 00427A9E |.^ 75 C9 \jnz short 00427A69 00427AA0 |> 81F3 78563412 xor ebx, 12345678 ; 经过 上面循环体得到的ebx与0x12345678进行异或处理。 注:上面的循环体是关键,得出的 ebx 是需要继续处理的值。同时得到一个序列 |