破解软件: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
总会有一些简单的遗憾
简单的一如从前
总会有一些一些改变 随着这岁月变迁