【破文标题】LeapFTP v2.7.6.613 汉化修正版II注册算法分析
【破文作者】紫色缘[TFW][PCG][DFCG]
【作者邮箱】Cn_Fish@126.com
【作者主页】www.cniso.org
【破解工具】Peid\OD
【破解平台】Win2000 pro
【软件大小】1MB
【原版下载】不提供
【保护方式】注册号及试用天数
【软件简介】FTP上传下载软件.............
------------------------------------------------------------------------
【破解过程】
第一先启动主程序,在输入假码后出现错误提示框。

再使用Peid查壳后,发现是Borland Delphi 6.0 - 7.0语言编写,于是用OD载入查找到字符:

OllyDbg 字符串参考搜索,项目 582
 地址=00484503
 反汇编=MOV EAX,LeapFTP.0048456C
 字符串=您输入的许可密钥无效。

双击该行后来到地址484503处,因为要找出软件的算法流程,于是向上翻去,然后来到以下的代码处:

00484434  |.  55         PUSH EBP                            ;  来到此处后下断,F8继续单步跟
00484435  |.  68 3045480>PUSH LeapFTP.00484530
0048443A  |.  64:FF30    PUSH DWORD PTR FS:[EAX]
0048443D  |.  64:8920    MOV DWORD PTR FS:[EAX],ESP
00484440  |.  8D55 F8    LEA EDX,DWORD PTR SS:[EBP-8]
00484443  |.  8B83 E4020>MOV EAX,DWORD PTR DS:[EBX+2E4]
00484449  |.  E8 6EF1FAF>CALL LeapFTP.004335BC               ;  读取假码
0048444E  |.  8B45 F8    MOV EAX,DWORD PTR SS:[EBP-8]        ;  假码入EAX
00484451  |.  8D55 FC    LEA EDX,DWORD PTR SS:[EBP-4]
00484454  |.  E8 6745F8F>CALL LeapFTP.004089C0               ;  读取假码位数
00484459  |.  80BB F4020>CMP BYTE PTR DS:[EBX+2F4],0         ;  与0做比较
00484460  |.  74 0E      JE SHORT LeapFTP.00484470           ;  相等则跳
00484462  |.  8B55 FC    MOV EDX,DWORD PTR SS:[EBP-4]        ;  假码数入EDX
00484465  |.  8BC3       MOV EAX,EBX                         ;  EBX送入EAX
00484467  |.  E8 8803000>CALL LeapFTP.004847F4
0048446C  |.  84C0       TEST AL,AL                          ;  测试AL=0
0048446E  |.  75 26      JNZ SHORT LeapFTP.00484496
00484470  |>  8B83 F0020>MOV EAX,DWORD PTR DS:[EBX+2F0]      ;  出现固定数"214065", 设为A
00484476  |.  50         PUSH EAX                            ;  EAX入栈
00484477  |.  8D55 F4    LEA EDX,DWORD PTR SS:[EBP-C]
0048447A  |.  8B83 D0020>MOV EAX,DWORD PTR DS:[EBX+2D0]      ;  A入EAX
00484480  |.  E8 37F1FAF>CALL LeapFTP.004335BC               ;  读取用户名
00484485  |.  8B55 F4    MOV EDX,DWORD PTR SS:[EBP-C]        ;  用户名入EDX
00484488  |.  8B4D FC    MOV ECX,DWORD PTR SS:[EBP-4]        ;  假码入ECX
0048448B  |.  8BC3       MOV EAX,EBX
0048448D  |.  E8 BA01000>CALL LeapFTP.0048464C               ;  关键call,F7跟进
00484492  |.  84C0       TEST AL,AL
00484494  |.  74 62      JE SHORT LeapFTP.004844F8           ;  爆破点 NOP~~~
00484496  |>  8D55 F0    LEA EDX,DWORD PTR SS:[EBP-10]
00484499  |.  8B83 E4020>MOV EAX,DWORD PTR DS:[EBX+2E4]
0048449F  |.  E8 18F1FAF>CALL LeapFTP.004335BC
004844A4  |.  8B45 F0    MOV EAX,DWORD PTR SS:[EBP-10]
004844A7  |.  50         PUSH EAX
004844A8  |.  8D55 EC    LEA EDX,DWORD PTR SS:[EBP-14]
004844AB  |.  8B83 D0020>MOV EAX,DWORD PTR DS:[EBX+2D0]
004844B1  |.  E8 06F1FAF>CALL LeapFTP.004335BC
004844B6  |.  8B4D EC    MOV ECX,DWORD PTR SS:[EBP-14]
004844B9  |.  8B93 EC020>MOV EDX,DWORD PTR DS:[EBX+2EC]
004844BF  |.  8BC3       MOV EAX,EBX
004844C1  |.  E8 AE04000>CALL LeapFTP.00484974
004844C6  |.  B8 4445480>MOV EAX,LeapFTP.00484544
004844CB  |.  E8 6460FDF>CALL LeapFTP.0045A534
004844D0  |.  C783 34020>MOV DWORD PTR DS:[EBX+234],1
004844DA  |.  8D55 E8    LEA EDX,DWORD PTR SS:[EBP-18]
004844DD  |.  8B83 D0020>MOV EAX,DWORD PTR DS:[EBX+2D0]
004844E3  |.  E8 D4F0FAF>CALL LeapFTP.004335BC
004844E8  |.  8B55 E8    MOV EDX,DWORD PTR SS:[EBP-18]
004844EB  |.  8D83 E8020>LEA EAX,DWORD PTR DS:[EBX+2E8]
004844F1  |.  E8 2EF7F7F>CALL LeapFTP.00403C24
004844F6  |.  EB 15      JMP SHORT LeapFTP.0048450D
004844F8  |>  6A 00      PUSH 0                              ; /Arg1 = 00000000
004844FA  |.  66:8B0D 60>MOV CX,WORD PTR DS:[484560]         ; |
00484501  |.  B2 01      MOV DL,1                            ; |
00484503  |.  B8 6C45480>MOV EAX,LeapFTP.0048456C            ; |
00484508  |.  E8 2F5FFDF>CALL LeapFTP.0045A43C               ; \LeapFTP.0045A43C
0048450D  |>  33C0       XOR EAX,EAX
0048450F  |.  5A         POP EDX
00484510  |.  59         POP ECX
00484511  |.  59         POP ECX
00484512  |.  64:8910    MOV DWORD PTR FS:[EAX],EDX
00484515  |.  68 3745480>PUSH LeapFTP.00484537
0048451A  |>  8D45 E8    LEA EAX,DWORD PTR SS:[EBP-18]
0048451D  |.  BA 0500000>MOV EDX,5
00484522  |.  E8 CDF6F7F>CALL LeapFTP.00403BF4
00484527  |.  8D45 FC    LEA EAX,DWORD PTR SS:[EBP-4]
0048452A  |.  E8 A1F6F7F>CALL LeapFTP.00403BD0
0048452F  \.  C3         RETN



--------------------跟进来到48448D处后,代码如下----------------------------------------

0048464C  /$  55         PUSH EBP
0048464D  |.  8BEC       MOV EBP,ESP
0048464F  |.  83C4 DC    ADD ESP,-24
00484652  |.  53         PUSH EBX
00484653  |.  33DB       XOR EBX,EBX
00484655  |.  895D DC    MOV DWORD PTR SS:[EBP-24],EBX
00484658  |.  895D E0    MOV DWORD PTR SS:[EBP-20],EBX
0048465B  |.  895D EC    MOV DWORD PTR SS:[EBP-14],EBX
0048465E  |.  894D F8    MOV DWORD PTR SS:[EBP-8],ECX
00484661  |.  8955 FC    MOV DWORD PTR SS:[EBP-4],EDX
00484664  |.  8B45 FC    MOV EAX,DWORD PTR SS:[EBP-4]        ;  用户名入EAX
00484667  |.  E8 98F9F7F>CALL LeapFTP.00404004
0048466C  |.  8B45 F8    MOV EAX,DWORD PTR SS:[EBP-8]        ;  假码入EAX
0048466F  |.  E8 90F9F7F>CALL LeapFTP.00404004
00484674  |.  8B45 08    MOV EAX,DWORD PTR SS:[EBP+8]        ;  固定数A入EAX
00484677  |.  E8 88F9F7F>CALL LeapFTP.00404004
0048467C  |.  33C0       XOR EAX,EAX                         ;  EAX清0
0048467E  |.  55         PUSH EBP
0048467F  |.  68 AF47480>PUSH LeapFTP.004847AF
00484684  |.  64:FF30    PUSH DWORD PTR FS:[EAX]
00484687  |.  64:8920    MOV DWORD PTR FS:[EAX],ESP
0048468A  |.  33C0       XOR EAX,EAX
0048468C  |.  8945 F0    MOV DWORD PTR SS:[EBP-10],EAX       ;  用户名入[EBP-10]
0048468F  |.  8945 F4    MOV DWORD PTR SS:[EBP-C],EAX
00484692  |.  8B45 FC    MOV EAX,DWORD PTR SS:[EBP-4]
00484695  |.  E8 B6F7F7F>CALL LeapFTP.00403E50
0048469A  |.  8BD0       MOV EDX,EAX                         ;  EAX送入EDX
0048469C  |.  85D2       TEST EDX,EDX
0048469E  |.  7E 33      JLE SHORT LeapFTP.004846D3
004846A0  |.  B8 0100000>MOV EAX,1                           ;  EAX=1初始化
004846A5  |>  8B4D FC    /MOV ECX,DWORD PTR SS:[EBP-4]       ;  [EBP-4]=用户名入ECX
004846A8  |.  0FB64C01 F>|MOVZX ECX,BYTE PTR DS:[ECX+EAX-1]  ;  开始取用户名每一位的ASCII值
004846AD  |.  0FAFC8     |IMUL ECX,EAX                       ;  ECX=ECX*1
004846B0  |.  8BD9       |MOV EBX,ECX                        ;  ECX结果入EBX
004846B2  |.  C1E1 04    |SHL ECX,4                          ;  逻辑左移4位,即2的4次方ECX=ECX *16
004846B5  |.  2BCB       |SUB ECX,EBX                        ;  ECX=ECX-EBX
004846B7  |.  894D E8    |MOV DWORD PTR SS:[EBP-18],ECX      ;  最后ECX的值送入[EBP-18]
004846BA  |.  DB45 E8    |FILD DWORD PTR SS:[EBP-18]         ;  ECX的值10进制装入整数.设为B
004846BD  |.  DC45 F0    |FADD QWORD PTR SS:[EBP-10]
004846C0  |.  8D0C80     |LEA ECX,DWORD PTR DS:[EAX+EAX*4]
004846C3  |.  894D E4    |MOV DWORD PTR SS:[EBP-1C],ECX
004846C6  |.  DB45 E4    |FILD DWORD PTR SS:[EBP-1C]         ;  10进制"5" 设为C
004846C9  |.  DEC1       |FADDP ST(1),ST                     ;  B再加上实数C
004846CB  |.  DD5D F0    |FSTP QWORD PTR SS:[EBP-10]         ;  最后的数出栈 ,设为D
004846CE  |.  9B         |WAIT
004846CF  |.  40         |INC EAX                            ;  +1
004846D0  |.  4A         |DEC EDX                            ;  减位数
004846D1  |.^ 75 D2      \JNZ SHORT LeapFTP.004846A5         ;  循环计算
004846D3  |>  8B45 08    MOV EAX,DWORD PTR SS:[EBP+8]        ;  A入EAX
004846D6  |.  E8 3945F8F>CALL LeapFTP.00408C14
004846DB  |.  8945 E8    MOV DWORD PTR SS:[EBP-18],EAX       ;  A转为16进制数
004846DE  |.  DB45 E8    FILD DWORD PTR SS:[EBP-18]          ;  10进制数的A装入
004846E1  |.  DD45 F0    FLD QWORD PTR SS:[EBP-10]           ;  最后的循环结果数D
004846E4  |.  DC4D F0    FMUL QWORD PTR SS:[EBP-10]          ;  *D
004846E7  |.  DEC1       FADDP ST(1),ST                      ;  再加上A
004846E9  |.  DD5D F0    FSTP QWORD PTR SS:[EBP-10]          ;  最后得整数E
004846EC  |.  9B         WAIT
004846ED  |.  DD45 F0    FLD QWORD PTR SS:[EBP-10]
004846F0  |.  83C4 F4    ADD ESP,-0C
004846F3  |.  DB3C24     FSTP TBYTE PTR SS:[ESP]             ; |
004846F6  |.  9B         WAIT                                ; |
004846F7  |.  8D45 EC    LEA EAX,DWORD PTR SS:[EBP-14]       ; |
004846FA  |.  E8 B954F8F>CALL LeapFTP.00409BB8               ; \LeapFTP.00409BB8
004846FF  |.  8D45 E0    LEA EAX,DWORD PTR SS:[EBP-20]
00484702  |.  50         PUSH EAX
00484703  |.  8B55 F8    MOV EDX,DWORD PTR SS:[EBP-8]
00484706  |.  B8 C847480>MOV EAX,LeapFTP.004847C8
0048470B  |.  E8 2CFAF7F>CALL LeapFTP.0040413C
00484710  |.  8BC8       MOV ECX,EAX
00484712  |.  49         DEC ECX
00484713  |.  BA 0100000>MOV EDX,1
00484718  |.  8B45 F8    MOV EAX,DWORD PTR SS:[EBP-8]
0048471B  |.  E8 38F9F7F>CALL LeapFTP.00404058
00484720  |.  8B45 E0    MOV EAX,DWORD PTR SS:[EBP-20]
00484723  |.  8B55 08    MOV EDX,DWORD PTR SS:[EBP+8]
00484726  |.  E8 35F8F7F>CALL LeapFTP.00403F60
0048472B  |.  75 48      JNZ SHORT LeapFTP.00484775
0048472D  |.  8D45 DC    LEA EAX,DWORD PTR SS:[EBP-24]
00484730  |.  50         PUSH EAX
00484731  |.  8B55 F8    MOV EDX,DWORD PTR SS:[EBP-8]
00484734  |.  B8 C847480>MOV EAX,LeapFTP.004847C8
00484739  |.  E8 FEF9F7F>CALL LeapFTP.0040413C
0048473E  |.  50         PUSH EAX
0048473F  |.  8B45 F8    MOV EAX,DWORD PTR SS:[EBP-8]
00484742  |.  E8 09F7F7F>CALL LeapFTP.00403E50
00484747  |.  5A         POP EDX
00484748  |.  2BC2       SUB EAX,EDX
0048474A  |.  50         PUSH EAX
0048474B  |.  8B55 F8    MOV EDX,DWORD PTR SS:[EBP-8]
0048474E  |.  B8 C847480>MOV EAX,LeapFTP.004847C8
00484753  |.  E8 E4F9F7F>CALL LeapFTP.0040413C
00484758  |.  8BD0       MOV EDX,EAX
0048475A  |.  42         INC EDX
0048475B  |.  8B45 F8    MOV EAX,DWORD PTR SS:[EBP-8]
0048475E  |.  59         POP ECX
0048475F  |.  E8 F4F8F7F>CALL LeapFTP.00404058
00484764  |.  8B45 DC    MOV EAX,DWORD PTR SS:[EBP-24]
00484767  |.  8B55 EC    MOV EDX,DWORD PTR SS:[EBP-14]
0048476A  |.  E8 F1F7F7F>CALL LeapFTP.00403F60
0048476F  |.  75 04      JNZ SHORT LeapFTP.00484775
00484771  |.  B3 01      MOV BL,1
00484773  |.  EB 02      JMP SHORT LeapFTP.00484777
00484775  |>  33DB       XOR EBX,EBX
00484777  |>  33C0       XOR EAX,EAX
00484779  |.  5A         POP EDX
0048477A  |.  59         POP ECX
0048477B  |.  59         POP ECX
0048477C  |.  64:8910    MOV DWORD PTR FS:[EAX],EDX
0048477F  |.  68 B647480>PUSH LeapFTP.004847B6
00484784  |>  8D45 DC    LEA EAX,DWORD PTR SS:[EBP-24]
00484787  |.  BA 0200000>MOV EDX,2
0048478C  |.  E8 63F4F7F>CALL LeapFTP.00403BF4
00484791  |.  8D45 EC    LEA EAX,DWORD PTR SS:[EBP-14]
00484794  |.  E8 37F4F7F>CALL LeapFTP.00403BD0
00484799  |.  8D45 F8    LEA EAX,DWORD PTR SS:[EBP-8]
0048479C  |.  BA 0200000>MOV EDX,2
004847A1  |.  E8 4EF4F7F>CALL LeapFTP.00403BF4
004847A6  |.  8D45 08    LEA EAX,DWORD PTR SS:[EBP+8]
004847A9  |.  E8 22F4F7F>CALL LeapFTP.00403BD0
004847AE  \.  C3         RETN


------------------------------------------------------------------------
【破解总结】

1、注册码不能填空否则出错.
2、出现固定数组"214065",记为A.
3、取用户名的每一位ASCII码值设为name , 再*1的值 设为x.
4、name的值*16 后设为y,然后y-x=最后的值设为B.
5、出现整数C,与B相加后得出的数设为D.
6、A转换为10进制数后与D相乘 得出的数 再与A相加 设为E
7、最后A-E连接后得出的值即是注册码。


此文写得很乱,用Windows自带的计算器算来就花了点时间,谁叫我菜....哪里有不正的地方,望各位大侠不吝指教.
------------------------------------------------------------------------
【版权声明】本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢!