【破文标题】FlashPT 2.2 Build算法分析
【破文作者】逍遥风
【作者邮箱】
【作者主页】
【破解工具】OD ASPACKDIE
【破解平台】WINXP
【软件名称】FlashPT
【软件大小】
【原版下载】
【保护方式】ASpack
【软件简介】随着网络的快速发展,Flash渐渐受到更多人的关注。无论是网页制作还是动画影片的制作,Flash-成为了大家必不可少的工具。
因此,网络上出现了众多的Flash动画影片,因为其体积小、影片种类多、风格各异,所以越来越受到人们的喜爱,而使其如MP3歌曲一样为大家所收藏。但是,当大家收集的Flash影片渐渐增多时,您在管理和欣赏Flash影片便会感到很不方便。为此,我开发了FlashPT(全称:Flash Player and Tools),它由Flash播放器、Flash文件转换解密、Flash文件分析器三个独立的应用程序组成,不仅可以使您方便的观看和管理Flash动画影片,还可以帮助您搜索驱动器或IE缓存下的影片文件,exe文件和swf文件之间的互相转换,影片文件属性的查看,swf文件的解密,以及从影片文件中解析出图片和声音资源,可以满足大部分用户的需求。
此软件为绿色软件,适用与 Win9x/ME/2000/XP 系统。您可以随时通过任意途径传播
----------------------------------------------------------------------
软件用ASPACK加了壳,很容易脱掉后用OD载入程序。
来到关键代码处,开始分析算法
注册流程:
004F5AD7  |.  55            push    ebp                              ;  在这里下断点
004F5AD8  |.  68 9C5C4F00   push    004F5C9C
004F5ADD  |.  64:FF30       push    dword ptr fs:[eax]
004F5AE0  |.  64:8920       mov     fs:[eax], esp
004F5AE3  |.  8D55 EC       lea     edx, [ebp-14]
004F5AE6  |.  8B87 EC020000 mov     eax, [edi+2EC]
004F5AEC  |.  E8 775FFAFF   call    0049BA68                         ;  取ID号码
004F5AF1  |.  837D EC 00    cmp     dword ptr [ebp-14], 0            ;  有ID号码吗?
004F5AF5  |.  75 1D         jnz     short 004F5B14                   ;  没有ID号码就出现错误提示
004F5AF7  |.  6A 00         push    0
004F5AF9  |.  B9 AC5C4F00   mov     ecx, 004F5CAC                    ;  提示
004F5AFE  |.  BA B45C4F00   mov     edx, 004F5CB4                    ;  请先获取id号码!
004F5B03  |.  A1 5CFD4F00   mov     eax, [4FFD5C]
004F5B08  |.  8B00          mov     eax, [eax]
004F5B0A  |.  E8 C982F5FF   call    0044DDD8
004F5B0F  |.  E9 65010000   jmp     004F5C79
004F5B14  |>  8D55 FC       lea     edx, [ebp-4]
004F5B17  |.  8B87 EC020000 mov     eax, [edi+2EC]
004F5B1D  |.  E8 465FFAFF   call    0049BA68                         ;  再一次取ID号码
004F5B22  |.  C745 F0 00000>mov     dword ptr [ebp-10], 0
004F5B29  |.  C745 F4 00000>mov     dword ptr [ebp-C], 0
004F5B30  |.  8B45 FC       mov     eax, [ebp-4]                     ;  使EAX等于ID号码
004F5B33  |.  E8 A8E3F0FF   call    00403EE0                         ;  取ID号码的位数
004F5B38  |.  8BF0          mov     esi, eax                         ;  使ESI=EAX等于ID号的位数
004F5B3A  |.  85F6          test    esi, esi
004F5B3C  |.  7E 2D         jle     short 004F5B6B
004F5B3E  |.  BB 01000000   mov     ebx, 1                           ;  使EBX等于1,开始循环计算
004F5B43  |>  8B45 FC       /mov     eax, [ebp-4]                    ;  使EAX等于ID号
004F5B46  |.  807C18 FF 00  |cmp     byte ptr [eax+ebx-1], 0
004F5B4B  |.  74 1A         |je      short 004F5B67
004F5B4D  |.  8B45 FC       |mov     eax, [ebp-4]                    ;  使EAX等于ID号
004F5B50  |.  8A4418 FF     |mov     al, [eax+ebx-1]                 ;  取ID号每一位的HEX值,放进AL中
004F5B54  |.  25 FF000000   |and     eax, 0FF                        ;  去掉高位
004F5B59  |.  33D2          |xor     edx, edx                        ;  EDX清零
004F5B5B  |.  0345 F0       |add     eax, [ebp-10]                   ;  ID号的每一位的HEX值累加
004F5B5E  |.  1355 F4       |adc     edx, [ebp-C]
004F5B61  |.  8945 F0       |mov     [ebp-10], eax                   ;  ID号的累加值保存在[EBP-10]中
004F5B64  |.  8955 F4       |mov     [ebp-C], edx
004F5B67  |>  43            |inc     ebx                             ;  每计算一次EBX+1
004F5B68  |.  4E            |dec     esi                             ;  每计算一次ESI-1
004F5B69  |.^ 75 D8         \jnz     short 004F5B43                  ;  循环计算
循环计算的作用就是将ID号每一位的HEX值,进行累加,结果设为A
004F5B6B  |>  6A 00         push    0
004F5B6D  |.  68 F1E05D00   push    5DE0F1                           ;  定值0x5DE0F1
004F5B72  |.  8B45 F0       mov     eax, [ebp-10]                    ;  使EAX等于ID号每一位的累加和
004F5B75  |.  8B55 F4       mov     edx, [ebp-C]
004F5B78  |.  E8 A70AF1FF   call    00406624                         ;  关键的算法CALL
----------------------------------------------------------------------跟进关键CALL......
00406624  /$  52            push    edx
00406625  |.  50            push    eax                              ;  EAX等于累加计算的和
00406626  |.  8B4424 10     mov     eax, [esp+10]                    ;  使EAX=0
0040662A  |.  F72424        mul     dword ptr [esp]
0040662D  |.  8BC8          mov     ecx, eax
0040662F  |.  8B4424 04     mov     eax, [esp+4]
00406633  |.  F76424 0C     mul     dword ptr [esp+C]
00406637  |.  03C8          add     ecx, eax
00406639  |.  8B0424        mov     eax, [esp]                       ;  使EAX再次等于累加计算的和
0040663C  |.  F76424 0C     mul     dword ptr [esp+C]                ;  累加计算的和乘以定值0x5DE0F1
00406640  |.  03D1          add     edx, ecx
00406642  |.  59            pop     ecx
00406643  |.  59            pop     ecx
00406644  \.  C2 0800       retn    8                                ;  将计算的结果输出
算法CALL的作用就是将累加计算所得的结果A与定值0x5DE0F1相乘,结果设为B
----------------------------------------------------------------------
004F5B7D  |.  8945 F0       mov     [ebp-10], eax                    ;  将计算结果保存在[EBP-10]中
004F5B80  |.  8955 F4       mov     [ebp-C], edx
004F5B83  |.  8D55 E8       lea     edx, [ebp-18]
004F5B86  |.  8B87 F4020000 mov     eax, [edi+2F4]
004F5B8C  |.  E8 D75EFAFF   call    0049BA68                         ;  取输入的注册码
004F5B91  |.  8B45 E8       mov     eax, [ebp-18]                    ;  使EAX等于输入的注册码
004F5B94  |.  50            push    eax
004F5B95  |.  FF75 F4       push    dword ptr [ebp-C]                ; /Arg2
004F5B98  |.  FF75 F0       push    dword ptr [ebp-10]               ; |Arg1
004F5B9B  |.  8D45 E4       lea     eax, [ebp-1C]                    ; |
004F5B9E  |.  E8 2D30F1FF   call    00408BD0                         ; \将算法计算的结果转换成对应的十进制数,即为注册码
004F5BA3  |.  8B55 E4       mov     edx, [ebp-1C]                    ;  使EDX等于真正的注册码
004F5BA6  |.  58            pop     eax
004F5BA7  |.  E8 44E4F0FF   call    00403FF0                         ;  真假注册码比较。
004F5BAC  |.  0F85 93000000 jnz     004F5C45                         ;  不相等就跳向失败
最后将B转换成对应的10进制数就是正确的注册码。
----------------------------------------------------------------------
算法总结
1)累加ID号的每一位,结果设为A
2)A*0x5DE0F1=B
3)将B转换成对应的10进制数就是注册码。

----------------------------------------------------------------------
【版权声明】本文只为交流,转载请保留作者及文章完整性