|
作者: yongmin [yongmin] 论坛用户 | 登录 |
【文章标题】: Quickfill v2.4 注册算法分析 【文章作者】: elance 【作者邮箱】: no 【作者主页】: no 【作者QQ号】: 275199621 【软件名称】: Quickfill v2.4 【软件大小】: no 【下载地址】: 自己搜索下载 【加壳方式】: no 【保护方式】: 注册码 【使用工具】: od 【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教! -------------------------------------------------------------------------------- 【详细过程】 软件已更新到2.41了,注册算法好像也变了(我没试过2.41的,听说是变了)。好,其他废话不说了,进入正题: 点注册按钮后来到: 004EC1FE |. E8 F58AF1FF call 00404CF8 ;求字符长度 004EC203 |. 0FAFF0 imul esi, eax ;用户名和注册码有一项为空 004EC206 |. 85F6 test esi, esi ;就出错 004EC208 |. 0F84 CF010000 je 004EC3DD ;出错 004EC20E |. 8D55 E8 lea edx, [ebp-18] 004EC211 |. 8B83 0C030000 mov eax, [ebx+30C] 004EC217 |. E8 0048F7FF call 00460A1C 004EC21C |. 8B45 E8 mov eax, [ebp-18] 004EC21F |. 8D55 EC lea edx, [ebp-14] 004EC222 |. E8 A9CCF1FF call 00408ED0 ; 若用户名为小写则转为大写 004EC227 |. 8B45 EC mov eax, [ebp-14] 004EC22A |. 8D4D F0 lea ecx, [ebp-10] 004EC22D |. 66:BA 3E03 mov dx, 33E ;下边要用到的参数,设为A 004EC231 |. E8 CAD0FDFF call 004C9300 ; 此处为关键,对用户名作变换 F7进入004C9300; 004C9343 |. 8A543A FF |mov dl, [edx+edi-1] ;逐为取用户名(大写) 004C9347 |. 0FB7CE |movzx ecx, si ;参数A 004C934A |. C1E9 08 |shr ecx, 8 ;A右移8位 004C934D |. 32D1 |xor dl, cl ;用户名和A作OR 004C934F |. 885438 FF |mov [eax+edi-1], dl 004C9353 |. 8B45 00 |mov eax, [ebp] 004C9356 |. 0FB64438 FF |movzx eax, byte ptr [eax+edi-1] 004C935B |. 66:03F0 |add si, ax ;A=A+用户名 004C935E |. 66:69C6 D500 |imul ax, si, 0D5 ;运算 004C9363 |. 66:05 9805 |add ax, 598 ;运算 004C9367 |. 8BF0 |mov esi, eax ;A=运算结果 004C9369 |. 43 |inc ebx 004C936A |. FE4C24 04 |dec byte ptr [esp+4] 004C936E |.^ 75 C1 \jnz short 004C9331 做完上边的,用户名的变换也完成了; 然后就到了计算注册码的过程了: 00409459 |> /31D2 /xor edx, edx ;此时EAX里存的是用户名的变换,ECX为定值A 0040945B |. |F7F1 |div ecx ;EAX/ECX 0040945D |. |4E |dec esi 0040945E |. |80C2 30 |add dl, 30 00409461 |. |80FA 3A |cmp dl, 3A 00409464 |. |72 03 |jb short 00409469 00409466 |. |80C2 07 |add dl, 7 ;将余数加7得到注册码 00409469 |> |8816 |mov [esi], dl 0040946B |. |09C0 |or eax, eax 0040946D |.^\75 EA \jnz short 00409459 算法总结: 将用户名钻为大写,然后逐位变换:A0=0X033E,A=(n+A[i-1])*0x0d5+0x598,n=(A>>8) or n;得到变换后的 n[]后,n/(0x0a),取其余数d,d=d+7,对d只娶一个字。(如,如算出来的是163,则只取16) 提供一组可用码: 用户名:elance 注册码:F1922162025 -------------------------------------------------------------------------------- 【经验总结】 没啥好总结的,呵呵,娱乐而已!!! |
地主 发表时间: 06-11-03 10:42 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号