【破文标题】ESF Database Convert Professional 5.9.02算法分析
【破文作者】tianxj
【作者邮箱】[email]tianxj_2007@126.com[/email]
【作者主页】
WwW.ChiNaPYG.CoM
【破解工具】PEiD,OD
【破解平台】Windows XP
【软件名称】ESF Database Convert Professional 5.9.02
【软件大小】17986KB
【软件类别】国外软件/数据库类
【软件语言】英文
【更新时间】2008-7-30
【原版下载】华军软件园http://www.newhua.com/soft/68954.htm
【保护方式】注册码
【软件简介】ESF Database Convert在MySQL, Access, SQL Server, Oracle, Excel, Paradox, dBase和文本格式之间转换数据库。
【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------
【破解内容】
--------------------------------------------------------------
**************************************************************
一、运行程序,进行注册,输入错误的注册信息进行检测,有提示信息
"Invalid registration!"
**************************************************************
二、用PEiD对esfdbcv.exe查壳,为 什么都没找到 *
**************************************************************
三、运行OD,用F12暂停法来到算法关键
0040B5E0 $ 6A FF PUSH -1
0040B5E2 . 68 C47A4100 PUSH esfdbcv.00417AC4
0040B5E7 . 64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
0040B5ED . 50 PUSH EAX
0040B5EE . 83EC 0C SUB ESP,0C
0040B5F1 . 56 PUSH ESI
0040B5F2 . 57 PUSH EDI
0040B5F3 . A1 C0A74200 MOV EAX,DWORD PTR DS:[42A7C0]
0040B5F8 . 33C4 XOR EAX,ESP
0040B5FA . 50 PUSH EAX
0040B5FB . 8D4424 18 LEA EAX,DWORD PTR SS:[ESP+18]
0040B5FF . 64:A3 0000000>MOV DWORD PTR FS:[0],EAX
0040B605 . C74424 14 000>MOV DWORD PTR SS:[ESP+14],0
0040B60D . 8D4C24 2C LEA ECX,DWORD PTR SS:[ESP+2C]
0040B611 . C74424 20 000>MOV DWORD PTR SS:[ESP+20],0
0040B619 . FF15 F89B4100 CALL DWORD PTR DS:[<&MFC80U.#6167>] ; MFC80U.7830685A
0040B61F . 8D4C24 2C LEA ECX,DWORD PTR SS:[ESP+2C]
0040B623 . FF15 F49B4100 CALL DWORD PTR DS:[<&MFC80U.#6173>] ; MFC80U.78306810
0040B629 . 8D4C24 2C LEA ECX,DWORD PTR SS:[ESP+2C]
0040B62D . FF15 08994100 CALL DWORD PTR DS:[<&MFC80U.#2895>] ; MFC80U.78303FC0
0040B633 . 83F8 01 CMP EAX,1 ; //将E-Mail长度与1比较
0040B636 . 7D 16 JGE SHORT esfdbcv.0040B64E ; //大于等于则跳
0040B638 . 8B7424 28 MOV ESI,DWORD PTR SS:[ESP+28]
0040B63C . 68 B8A24100 PUSH esfdbcv.0041A2B8
0040B641 . 8BCE MOV ECX,ESI
0040B643 . FF15 38994100 CALL DWORD PTR DS:[<&MFC80U.#283>] ; MFC80U.78305D94
0040B649 . E9 1E010000 JMP esfdbcv.0040B76C
0040B64E > 8D4C24 2C LEA ECX,DWORD PTR SS:[ESP+2C]
0040B652 . FF15 F09B4100 CALL DWORD PTR DS:[<&MFC80U.#4078>] ; //将E-Mail转大写
0040B658 . 8D4C24 2C LEA ECX,DWORD PTR SS:[ESP+2C]
0040B65C . FF15 08994100 CALL DWORD PTR DS:[<&MFC80U.#2895>] ; MFC80U.78303FC0
0040B662 . 83F8 14 CMP EAX,14 ; //将E-Mail长度与14比较
0040B665 . 7D 1C JGE SHORT esfdbcv.0040B683 ; //大于等于则跳
0040B667 . BE 14000000 MOV ESI,14 ; //ESI=14
0040B66C . 2BF0 SUB ESI,EAX ; //ESI=ESI-EAX
0040B66E . 8BFF MOV EDI,EDI
0040B670 > 6A 50 PUSH 50
0040B672 . 8D4C24 30 LEA ECX,DWORD PTR SS:[ESP+30]
0040B676 . FF15 34994100 CALL DWORD PTR DS:[<&MFC80U.#894>] ; MFC80U.783061D7
0040B67C . 83EE 01 SUB ESI,1
0040B67F .^ 75 EF JNZ SHORT esfdbcv.0040B670 ; //将E-Mail用"P"补足14h位
0040B681 . EB 32 JMP SHORT esfdbcv.0040B6B5
0040B683 > 7E 30 JLE SHORT esfdbcv.0040B6B5
0040B685 . 6A 14 PUSH 14
0040B687 . 8D4424 18 LEA EAX,DWORD PTR SS:[ESP+18]
0040B68B . 50 PUSH EAX
0040B68C . 8D4C24 34 LEA ECX,DWORD PTR SS:[ESP+34]
0040B690 . FF15 7C9A4100 CALL DWORD PTR DS:[<&MFC80U.#3990>] ; //取E-Mail的左边14h位
0040B696 . 50 PUSH EAX
0040B697 . 8D4C24 30 LEA ECX,DWORD PTR SS:[ESP+30]
0040B69B . C64424 24 01 MOV BYTE PTR SS:[ESP+24],1
0040B6A0 . FF15 F4984100 CALL DWORD PTR DS:[<&MFC80U.#774>] ; MFC80U.7830609C
0040B6A6 . 8D4C24 14 LEA ECX,DWORD PTR SS:[ESP+14]
0040B6AA . C64424 20 00 MOV BYTE PTR SS:[ESP+20],0
0040B6AF . FF15 749C4100 CALL DWORD PTR DS:[<&MFC80U.#577>] ; MFC80U.78306092
0040B6B5 > 6A 40 PUSH 40
0040B6B7 . 6A 00 PUSH 0
0040B6B9 . 8D4C24 34 LEA ECX,DWORD PTR SS:[ESP+34]
0040B6BD . FF15 EC9B4100 CALL DWORD PTR DS:[<&MFC80U.#5705>] ; //将左边第1位换为"@"
0040B6C3 . 6A 3A PUSH 3A
0040B6C5 . 6A 40 PUSH 40
0040B6C7 . 8D4C24 34 LEA ECX,DWORD PTR SS:[ESP+34]
0040B6CB . FF15 E89B4100 CALL DWORD PTR DS:[<&MFC80U.#5484>] ; //将"@"换为":"
0040B6D1 . 68 B8A24100 PUSH esfdbcv.0041A2B8
0040B6D6 . 8D4C24 14 LEA ECX,DWORD PTR SS:[ESP+14]
0040B6DA . FF15 38994100 CALL DWORD PTR DS:[<&MFC80U.#283>] ; MFC80U.78305D94
0040B6E0 . 8D4C24 0C LEA ECX,DWORD PTR SS:[ESP+C]
0040B6E4 . FF15 F0984100 CALL DWORD PTR DS:[<&MFC80U.#293>] ; MFC80U.78305C6D
0040B6EA . 8B3D 5C9A4100 MOV EDI,DWORD PTR DS:[<&MFC80U.#2311>] ; MFC80U.7830730F
0040B6F0 . C64424 20 03 MOV BYTE PTR SS:[ESP+20],3
0040B6F5 . 33F6 XOR ESI,ESI ; //ESI=0
0040B6F7 . EB 07 JMP SHORT esfdbcv.0040B700
0040B6F9 . 8DA424 000000>LEA ESP,DWORD PTR SS:[ESP]
0040B700 > 56 PUSH ESI
0040B701 . 8D4C24 30 LEA ECX,DWORD PTR SS:[ESP+30]
0040B705 . FF15 E49B4100 CALL DWORD PTR DS:[<&MFC80U.#2444>] ; MFC80U.7830570A
0040B70B . 0FB7C0 MOVZX EAX,AX ; //依次将变形后的E_Mail送入EAX
0040B70E . 0FB7C8 MOVZX ECX,AX ; //ECX=EAX
0040B711 . 03CE ADD ECX,ESI ; //ECX=ECX+ESI
0040B713 . 81E1 0F000080 AND ECX,8000000F ; //ECX=ECX and 8000000F
0040B719 . 79 05 JNS SHORT esfdbcv.0040B720
0040B71B . 49 DEC ECX
0040B71C . 83C9 F0 OR ECX,FFFFFFF0
0040B71F . 41 INC ECX
0040B720 > 51 PUSH ECX
0040B721 . 8D5424 10 LEA EDX,DWORD PTR SS:[ESP+10]
0040B725 . 68 C4CA4100 PUSH esfdbcv.0041CAC4 ; UNICODE "%X"
0040B72A . 52 PUSH EDX
0040B72B . FFD7 CALL EDI ; //将ECX转字符形式
0040B72D . 83C4 0C ADD ESP,0C
0040B730 . 8D4424 0C LEA EAX,DWORD PTR SS:[ESP+C]
0040B734 . 50 PUSH EAX
0040B735 . 8D4C24 14 LEA ECX,DWORD PTR SS:[ESP+14]
0040B739 . FF15 689B4100 CALL DWORD PTR DS:[<&MFC80U.#896>] ; //字符相连
0040B73F . 83C6 01 ADD ESI,1 ; //ESI=ESI+1
0040B742 . 83FE 14 CMP ESI,14 ; //ESI与14比较
0040B745 .^ 7C B9 JL SHORT esfdbcv.0040B700 ; //小于等于则跳
0040B747 . 8B7424 28 MOV ESI,DWORD PTR SS:[ESP+28]
0040B74B . 8D4C24 10 LEA ECX,DWORD PTR SS:[ESP+10]
0040B74F . 51 PUSH ECX
0040B750 . 8BCE MOV ECX,ESI
0040B752 . FF15 F8984100 CALL DWORD PTR DS:[<&MFC80U.#280>] ; MFC80U.78305C90
0040B758 . 8D4C24 0C LEA ECX,DWORD PTR SS:[ESP+C]
0040B75C . FF15 749C4100 CALL DWORD PTR DS:[<&MFC80U.#577>] ; MFC80U.78306092
0040B762 . 8D4C24 10 LEA ECX,DWORD PTR SS:[ESP+10]
0040B766 . FF15 749C4100 CALL DWORD PTR DS:[<&MFC80U.#577>] ; MFC80U.78306092
0040B76C > 8D4C24 2C LEA ECX,DWORD PTR SS:[ESP+2C]
0040B770 . FF15 749C4100 CALL DWORD PTR DS:[<&MFC80U.#577>] ; MFC80U.78306092
0040B776 . 8BC6 MOV EAX,ESI
0040B778 . 8B4C24 18 MOV ECX,DWORD PTR SS:[ESP+18]
0040B77C . 64:890D 00000>MOV DWORD PTR FS:[0],ECX
0040B783 . 59 POP ECX
0040B784 . 5F POP EDI
0040B785 . 5E POP ESI
0040B786 . 83C4 18 ADD ESP,18
0040B789 . C2 0800 RETN 8
**************************************************************
【破解总结】
--------------------------------------------------------------
【算法总结】
只和E-Mail有关,将其变形后运算
--------------------------------------------------------------
【算法注册机】
易语言代码
.版本 2
.子程序 _按钮1_被单击
.局部变量 a, 文本型
.局部变量 b, 文本型
.局部变量 c, 文本型
.局部变量 d, 文本型
.局部变量 e, 整数型
.局部变量 f, 文本型
.局部变量 i, 整数型
.判断开始 (编辑框1.内容 = “”)
编辑框2.内容 = “输入有误,请重新输入。”
.默认
.如果 (取文本长度 (编辑框1.内容) < 20)
a = 到大写 (编辑框1.内容)
.计次循环首 (20 - 取文本长度 (编辑框1.内容), i)
a = a + “P”
.计次循环尾 ()
.否则
a = 取文本左边 (到大写 (编辑框1.内容), 20)
.如果结束
b = 文本替换 (a, 1, 1, “@”)
.计次循环首 (取文本长度 (b), i)
c = 取文本中间 (b, i, 1)
.如果 (c = “@”)
d = d + “:”
.否则
d = d + c
.如果结束
.计次循环尾 ()
.计次循环首 (取文本长度 (d), i)
e = 取代码 (d, i) + i - 1
f = f + 取文本右边 (取十六进制文本 (e), 1)
.计次循环尾 ()
编辑框2.内容 = f
.判断结束
--------------------------------------------------------------
感谢飘云老大、猫老大、Nisy老大以及很多前辈们的学习教程以及所有帮助过我的论坛兄弟姐妹们!谢谢
--------------------------------------------------------------
【版权声明】破文是学习的手记,兴趣是成功的源泉;本破文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课