老文章档案 · 2003 年

图像处理软件XFader的简要分析

赢政天下 [WINZHENG.COM] · 网络学院 · 2003-08-27 · 作者:人气: · 出处:赢政天下整理收藏)

破解软件:XFader

下载地址:www.21hh.net

破解难度:易

破解工具:TRW1.22

软件说明:方便的图像素材生成工具,可以从任意一个位图创建无穷多的纹理素材。只需执行XFader,打开一个

bitmap或jpeg文件然后按“渐变”按钮即可,注册用户可以及时预览效果。它本身并不具备太多图片的编修功

能,它对于制作不同风格的网页或是制作布景主题是蛮需要的。赶快试试吧,绝对让你大吃一惊。

任意输入用户名ShenGe和注册码12345678,下BPX HMEMCPY中断,点Register,程序被中断,按7下F12再按F10来到以下代码:

0167:00470BDD LEA EDX,[EBP-08]

0167:00470BE0 MOV EAX,[0049EB50]

0167:00470BE5 MOV EAX,[EAX+01F4]

0167:00470BEB CALL 0041D25C

0167:00470BF0 MOV EAX,[EBP-08] <---程序中断于此,取输入的注册码到EAX中

0167:00470BF3 PUSH EAX

0167:00470BF4 LEA EDX,[EBP-0C]

0167:00470BF7 MOV EAX,[0049EB50]

0167:00470BFC MOV EAX,[EAX+01F0]

0167:00470C02 CALL 0041D25C

0167:00470C07 MOV EDX,[EBP-0C] <---取输入的用户名到EDX中

0167:00470C0A MOV EAX,EBX

0167:00470C0C POP ECX <---ECX中为输入的注册码

0167:00470C0D CALL 00470530 <---关键的Call,跟进

0167:00470C12 TEST AL,AL

0167:00470C14 JZ NEAR 00470C9D <---关键跳转,要爆破改为JNZ即可

0167:00470C1A LEA EDX,[EBP-08]

0167:00470C1D MOV EAX,[0049EB50]

0167:00470C22 MOV EAX,[EAX+01F4]

0167:00470C28 CALL 0041D25C

0167:00470C2D MOV EAX,[EBP-08]

0167:00470C30 PUSH EAX

跟进上面的那个Call,来到如下代码处:

0167:00470530 PUSH EBP

0167:00470531 MOV EBP,ESP

0167:00470533 PUSH ECX

0167:00470534 MOV ECX,04

0167:00470539 PUSH BYTE +00

0167:0047053B PUSH BYTE +00

0167:0047053D DEC ECX

0167:0047053E JNZ 00470539

。。。。。。。

0167:004705B3 LEA ECX,[EBP-24]

0167:004705B6 MOV EDX,ESI

0167:004705B8 MOV EAX,[EBX+4C]

0167:004705BB MOV EDI,[EAX]

0167:004705BD CALL NEAR [EDI+0C]

0167:004705C0 MOV EDX,[EBP-24]

0167:004705C3 MOV ECX,08

0167:004705C8 MOV EAX,EBX

0167:004705CA CALL 00470674 <---此Call将我们输入的用户名进行转换:小写全部转换成大写;

0167:004705CF MOV ECX,[EBP-20] 若用户名不足8位,则不足部分依次从输入的用户名的第1位起

0167:004705D2 MOV EDX,ESI 取字符补齐,如我输入的为ShenGe,则转换后为SHENGESH

0167:004705D4 MOV EAX,[EBX+4C]

0167:004705D7 MOV EDI,[EAX]

0167:004705D9 CALL NEAR [EDI+20]

0167:004705DC INC ESI

0167:004705DD DEC DWORD [EBP-1C]

0167:004705E0 JNZ 004705AD

0167:004705E2 MOV EDX,[EBP-10]

0167:004705E5 MOV EAX,[EBX+4C]

0167:004705E8 MOV ECX,[EAX]

0167:004705EA CALL NEAR [ECX+50]

0167:004705ED TEST EAX,EAX

0167:004705EF JNL 0047062B

0167:004705F1 MOV EAX,[EBP-10]

0167:004705F4 CALL 00403BE4

0167:004705F9 TEST EAX,EAX

0167:004705FB JNG 0047062B

0167:004705FD MOV EAX,[EBP-14]

0167:00470600 CALL 00403BE4

0167:00470605 TEST EAX,EAX

0167:00470607 JNG 0047062B

0167:00470609 LEA EAX,[EBP-18]

0167:0047060C PUSH EAX

0167:0047060D MOV ECX,[EBP-10] <---D ECX可看到转换后的用户名

0167:00470610 MOV EDX,[EBP-14] <---D EDX可看到固定字符串“PXF12OKT”

0167:00470613 MOV EAX,EBX

0167:00470615 CALL 004707C0 <---计算注册码的Call,跟进

0167:0047061A MOV EAX,[EBP-18] <--- D EAX可看到正确的注册码

0167:0047061D MOV EDX,[EBP-08] <--- D EDX可看到我们输的假的注册码

0167:00470620 CALL 00403CF4 <--- 进行比较的Call

0167:00470625 JNZ 0047062B <---关键跳转

0167:00470627 MOV BYTE [EBP-09],01

0167:0047062B XOR EAX,EAX

0167:0047062D POP EDX

0167:0047062E POP ECX

0167:0047062F POP ECX

0167:00470630 MOV [FS:EAX],EDX

0167:00470633 PUSH DWORD 00470667

0167:00470638 LEA EAX,[EBP-24]

0167:0047063B MOV EDX,02

0167:00470640 CALL 0040398C

0167:00470645 LEA EAX,[EBP-18]

0167:00470648 MOV EDX,03

0167:0047064D CALL 0040398C

0167:00470652 LEA EAX,[EBP-08]

0167:00470655 MOV EDX,02

0167:0047065A CALL 0040398C

0167:0047065F RET

由上可看到,只要在 0167:0047061A 处下D EAX即可看到正确的注册码,但我们的目的是找出算法,跟进上面的那个Call可看到以下代码:

0167:004707C0 PUSH EBP

0167:004707C1 MOV EBP,ESP

0167:004707C3 ADD ESP,FFFFFEB4

0167:004707C9 PUSH EBX

0167:004707CA PUSH ESI

0167:004707CB PUSH EDI

0167:004707CC XOR EBX,EBX

0167:004707CE MOV [EBP+FFFFFED8],EBX

0167:004707D4 MOV [EBP+FFFFFED4],EBX

0167:004707DA MOV [EBP+FFFFFED0],EBX

。。。。。。。

0167:00470838 PUSH EAX

0167:00470839 MOV ECX,08

0167:0047083E MOV EDX,01

0167:00470843 MOV EAX,[EBP-04]

0167:00470846 CALL 00403DE8

0167:0047084B PUSH DWORD [EBP+FFFFFED4]

0167:00470851 LEA EAX,[EBP+FFFFFED0]

0167:00470857 PUSH EAX

0167:00470858 MOV ECX,08

0167:0047085D MOV EDX,01

0167:00470862 MOV EAX,[EBP-08]

0167:00470865 CALL 00403DE8

0167:0047086A PUSH DWORD [EBP+FFFFFED0] <---D *EBP+FFFFFED0可看到为转换后的用户名

0167:00470870 PUSH DWORD 004709DC <---D 004709DC可看到########

0167:00470875 LEA EAX,[EBP+FFFFFED8]

0167:0047087B MOV EDX,03

0167:00470880 CALL 00403CA4 <---这个Call将固定串“PXF12OKT”与转换后的用户名及"########"合并后存入[EBP+FFFFFED8]中

0167:00470885 MOV EDX,[EBP+FFFFFED8]

0167:0047088B LEA EAX,[EBP+FFFFFEDC]

0167:00470891 MOV ECX,FF

0167:00470896 CALL 00403BC0

0167:0047089B LEA EDX,[EBP+FFFFFEDC]

0167:004708A1 LEA EAX,[EBP-21]

0167:004708A4 MOV CL,18

0167:004708A6 CALL 004029AC

0167:004708AB PUSH BYTE +03 <---置入口参数 -----------|

0167:004708AD PUSH BYTE +05 <---置入口参数 |

0167:004708AF PUSH BYTE +07 <---置入口参数 |

0167:004708B1 LEA EDX,[EBP-21] |

0167:004708B4 MOV CL,01 |

0167:004708B6 MOV EAX,EBX |

0167:004708B8 CALL 00470784 <---此Call是对上面合并后的字符串进行处理 |

0167:004708BD MOV [EBP-10],AL <---运算后的结果存入[EBP-10]中 -----------|

0167:004708C0 PUSH BYTE +04 -----------------------|

0167:004708C2 PUSH BYTE +0A |

0167:004708C4 PUSH BYTE +0C |

0167:004708C6 LEA EDX,[EBP-21] |

0167:004708C9 MOV CL,02 |

0167:004708CB MOV EAX,EBX |

0167:004708CD CALL 00470784 |

0167:004708D2 MOV [EBP-0F],AL -----------------------|

0167:004708D5 PUSH BYTE +0B |

0167:004708D7 PUSH BYTE +0D |

0167:004708D9 PUSH BYTE +0F |

0167:004708DB LEA EDX,[EBP-21] |

0167:004708DE MOV CL,09 |

0167:004708E0 MOV EAX,EBX |

0167:004708E2 CALL 00470784 |

0167:004708E7 MOV [EBP-0E],AL ----------------------|

0167:004708EA PUSH BYTE +08 |

0167:004708EC PUSH BYTE +0E |

0167:004708EE PUSH BYTE +10 |

0167:004708F0 LEA EDX,[EBP-21] |

0167:004708F3 MOV CL,06 |

0167:004708F5 MOV EAX,EBX |

0167:004708F7 CALL 00470784 |

0167:004708FC MOV [EBP-0D],AL ----------------------|

0167:004708FF PUSH BYTE +10 |

0167:00470901 PUSH BYTE +02 |

0167:00470903 PUSH BYTE +0F |

0167:00470905 LEA EDX,[EBP-21] |

0167:00470908 MOV CL,01 |

0167:0047090A MOV EAX,EBX |

0167:0047090C CALL 00470784 |

0167:00470911 MOV [EBP-0C],AL ----------------------|

0167:00470914 PUSH BYTE +0E |

0167:00470916 PUSH BYTE +04 |

0167:00470918 PUSH BYTE +0D |

0167:0047091A LEA EDX,[EBP-21] |

0167:0047091D MOV CL,03 |

0167:0047091F MOV EAX,EBX |

0167:00470921 CALL 00470784 |

0167:00470926 MOV [EBP-0B],AL ----------------------|

0167:00470929 PUSH BYTE +0C |

0167:0047092B PUSH BYTE +06 |

0167:0047092D PUSH BYTE +0B |

0167:0047092F LEA EDX,[EBP-21] |

0167:00470932 MOV CL,05 |

0167:00470934 MOV EAX,EBX |

0167:00470936 CALL 00470784 |

0167:0047093B MOV [EBP-0A],AL ----------------------|

0167:0047093E PUSH BYTE +0A |

0167:00470940 PUSH BYTE +08 |

0167:00470942 PUSH BYTE +09 |

0167:00470944 LEA EDX,[EBP-21] |

0167:00470947 MOV CL,07 |

0167:00470949 MOV EAX,EBX |

0167:0047094B CALL 00470784 |

0167:00470950 MOV [EBP-09],AL -----------------------|

0167:00470953 MOV EBX,08

0167:00470958 LEA ECX,[EBP-10] <---取上面8次Call运算后的结果到[ECX]中

0167:0047095B XOR EAX,EAX <---EAX清零

0167:0047095D MOV AL,[ECX] <---按位取[ECX]中的值到EAX中

0167:0047095F MOV EDI,0A <---EDI中置为定值0AH

0167:00470964 CDQ <---EDX清零

0167:00470965 IDIV EDI

0167:00470967 ADD EDX,BYTE +30 <---将余数转化成十六进制数值(正确注册码)

0167:0047096A MOV [ECX],DL <---十六进制值存入[ECX]中

0167:0047096C INC ECX

0167:0047096D DEC EBX

0167:0047096E JNZ 0047095B <---循环判断,是否取完

0167:00470970 LEA EAX,[EBP+FFFFFEB4]

0167:00470976 PUSH EAX

0167:00470977 MOV ECX,08

0167:0047097C MOV EDX,11

0167:00470981 LEA EAX,[EBP-21]

0167:00470984 CALL 00402794 <---此Call将上面的计算结果(即正确注册码)存入[EBP+FFFFFEB4]中

0167:00470989 LEA EDX,[EBP+FFFFFEB4]

0167:0047098F MOV EAX,ESI

0167:00470991 CALL 00403B88

0167:00470996 XOR EAX,EAX

0167:00470998 POP EDX

0167:00470999 POP ECX

0167:0047099A POP ECX

0167:0047099B MOV [FS:EAX],EDX

0167:0047099E PUSH DWORD 004709C8

0167:004709A3 LEA EAX,[EBP+FFFFFED0]

0167:004709A9 MOV EDX,03

0167:004709AE CALL 0040398C

0167:004709B3 LEA EAX,[EBP-08]

0167:004709B6 MOV EDX,02

0167:004709BB CALL 0040398C

0167:004709C0 RET

0167:004709C1 JMP 00403388

0167:004709C6 JMP SHORT 004709A3

0167:004709C8 POP EDI

0167:004709C9 POP ESI

0167:004709CA POP EBX

0167:004709CB MOV ESP,EBP

0167:004709CD POP EBP

0167:004709CE RET 04

可看到上面调用8次CALL 00470784 ,然后根据此Call得到的结果再与0AH除得到注册码,我们不凡再跟进此Call看看它到底如何运算0167:00470784 PUSH EBP

0167:00470785 MOV EBP,ESP

0167:00470787 ADD ESP,BYTE -08

0167:0047078A MOV [EBP-05],CL <---CL的值存入[EBP-05]中

0167:0047078D MOV [EBP-04],EDX

0167:00470790 LEA EDX,[EBP-06]

0167:00470793 MOV EDI,[EBP-04] <---下D EDI可看到合并后的字符串

0167:00470796 XOR EBX,EBX <---EBX=0

0167:00470798 MOV BL,[EBP-05] <---取[EBP-05]中的值到EBX中,控制取第几位值

0167:0047079B MOV AL,[EDI+EBX] <---取合并后字符串的第BL位到AL中

0167:0047079E MOV BL,[EBP+10] <---[EBP+10]中为第1个入栈的参数值

0167:004707A1 XOR AL,[EDI+EBX]

0167:004707A4 MOV BL,[EBP+0C] <---[EBP+0C]中为第2个入栈的参数值

0167:004707A7 MOV CL,[EDI+EBX]

0167:004707AA ROL AL,CL

0167:004707AC MOV BL,[EBP+08] <---[EBP+08]中为第3个入栈的参数值

0167:004707AF XOR AL,[EDI+EBX]

0167:004707B2 MOV [EBP-06],AL <---结果存入[EBP-06]中

0167:004707B5 MOV AL,[EDX]

0167:004707B7 POP ECX

0167:004707B8 POP ECX

0167:004707B9 POP EBP

0167:004707BA RET 0C

我们可大概得出此Call的计算方法,即根据CL值及入口参数确定取合并字符串的的第几位,然后参与运算。

该程序注册成功后将注册信息保存在注册表的

“HKEY_LOCAL_MACHINE/Software/Pegtop/Xfader”中

我得到的为

用户名:ShenGe

注册码:99835539

总会有一些简单的遗憾 简单的一如从前

总会有一些一些改变 随着这岁月变迁

(出处:赢政天下整理收藏)

相关文章:

·语音界面2.0算法分析及注册机源码!

·侠客系统修改器1.21破解手记--算法分析

·中文拨号上网计时计费器 V4.12注册算法分析

·ClockWise 3.22e注册码算法分析

·CoolClock V1.02注册算法分析

·Directory Scanner v1.5 注册算法分析

·Disk Chief 1.2 简单注册算法分析

·EffeTech HTTP Sniffer 3.2注册算法分析

·eLib2.01算法分析

·EZ MP3 Recorder 1.15 注册算法分析

相关软件:

→ 特别推荐

→ 热点TOP10

关于我们 |

帮助(?)

| 广告服务 |

版权声明 |

商业合作 |

发展历程 |

加盟我们 |

联系我们

Copyright © 1999-2003

winzheng.com All Rights Reserved.

繁体版:由华琦数码技术提供

Powered

by:MeSky.Net

2003-2004 年,宽带刚刚普及,下载站的文章区是许多人学电脑的第一课堂。
🕰 → 🤖 从那时到现在

当年一篇教程能让一台电脑焕然一新;今天的效率工具换成了 AI。 想知道当下最可靠的 AI 模型怎么选?看 赢政指数——我们用了 28 年的选软件严谨,现在用来评测大模型。

档案性质声明:本页为赢政天下(1998-2011)老文章的历史档案复原, 内容反映当年发表时的原貌——包括当年的技术表述、软件版本与观点,部分方法在今天已不适用或不合规,仅作互联网历史记录与研究用途, 不提供任何形式的下载。原始数据经由公共网络存档(Internet Archive)复原。发现问题请联系我们
← 返回老文章档案 · 软件史档案馆 · 赢政天下站史