【破文标题】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自带的计算器算来就花了点时间,谁叫我菜....哪里有不正的地方,望各位大侠不吝指教.
------------------------------------------------------------------------
【版权声明】本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢!