题目:注册相片装饰大师FrameMaster
软件功能:美国人开发的这个照片装饰大师软件,可以给数码相片添加各种眼花缭乱的边框效果。从数码相机和扫描仪获取数码相片后,可以很快地毫
不费力地直接应用华丽的相框,蒙版,叠加效果,阴影及各种边框效果。除此之外,你还可以添加各种小图片(橡皮图章)到相片上,起到画龙点睛的
效果。可以对相片大小进行修改,完全自己定制各种特性。未注册版试用期30天,过后必须注册。
软件来源:电脑爱好者2002光盘
破解工具:Softice, PEID, OD
破解目的:找出注册码(因为这个软件是明码比较,没有注册算法)
引子:今天又从光盘随便安装了这个相框大师,实验了一下效果不错。可惜只有30天试用期限。现在就一起来动手把它注册了吧。完整完毕,先用PEID
查看是否加壳,结果没有。是BC++写的。运行程序,打开HELP菜单,点击里面的Register命令,弹出注册窗口,在里面输入用户名和假注册码。比如
wanggang, 7878787878,调出SOFTICE,下断点bpx hmemcpy,F5退出,点击OK,被拦下。我们按7次F12即可回到主程序空间,然后再按F10跟踪,我们来
到如下代码处:
00446277 |. 8B4D 98 MOV ECX,DWORD PTR SS:[EBP-68]
0044627A |. 8B81 E0020000 MOV EAX,DWORD PTR DS:[ECX+2E0]
00446280 |. E8 8BEC0700 CALL FRMMSTR.004C4F10
00446285 |. 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C] //用户名地址送EAX。
00446288 |. E8 7F6BFFFF CALL FRMMSTR.0043CE0C //取用户名长度。
0044628D |. 85C0 TEST EAX,EAX
0044628F |. 0F94C2 SETE DL
00446292 |. 83E2 01 AND EDX,1
00446295 |. 52 PUSH EDX
00446296 |. FF4D B8 DEC DWORD PTR SS:[EBP-48]
00446299 |. 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C]
0044629C |. BA 02000000 MOV EDX,2
004462A1 |. E8 8E1D0E00 CALL FRMMSTR.00528034 //测试用户名是否为空。
004462A6 |. 59 POP ECX
004462A7 |. 84C9 TEST CL,CL
004462A9 |. 74 74 JE SHORT FRMMSTR.0044631F //如果用户名名为空,则OK,否则走到下面提示框。
004462AB |. 6A 00 PUSH 0
004462AD |. 8D45 92 LEA EAX,DWORD PTR SS:[EBP-6E]
004462B0 |. E8 2331FFFF CALL FRMMSTR.004393D8
004462B5 |. B2 02 MOV DL,2
004462B7 |. E8 5031FFFF CALL FRMMSTR.0043940C
004462BC |. 66:8B08 MOV CX,WORD PTR DS:[EAX]
004462BF |. 51 PUSH ECX
004462C0 |. 66:C745 AC 380>MOV WORD PTR SS:[EBP-54],38
004462C6 |. BA 786D5400 MOV EDX,FRMMSTR.00546D78 ; ASCII "Please enter your name"
004462CB |. 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10]
004462CE |. E8 4D1C0E00 CALL FRMMSTR.00527F20
*省略多行
0044631F |> 66:C745 AC 440>MOV WORD PTR SS:[EBP-54],44 //用户名不为空则跳到这里来。
00446325 |. 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14]
00446328 |. E8 CF1EFFFF CALL FRMMSTR.004381FC
0044632D |. 8BD0 MOV EDX,EAX
0044632F |. FF45 B8 INC DWORD PTR SS:[EBP-48]
00446332 |. 8B4D 98 MOV ECX,DWORD PTR SS:[EBP-68]
00446335 |. 8B81 D0020000 MOV EAX,DWORD PTR DS:[ECX+2D0]
0044633B |. E8 D0EB0700 CALL FRMMSTR.004C4F10
00446340 |. 8D55 EC LEA EDX,DWORD PTR SS:[EBP-14]
00446343 |. 8B12 MOV EDX,DWORD PTR DS:[EDX]
00446345 |. A1 905D5500 MOV EAX,DWORD PTR DS:[555D90]
0044634A |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
0044634C |. E8 03A0FFFF CALL FRMMSTR.00440354 //这是关键函数,F8跟入,代码在后面分析。
00446351 |. 50 PUSH EAX
00446352 |. FF4D B8 DEC DWORD PTR SS:[EBP-48]
00446355 |. 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14]
00446358 |. BA 02000000 MOV EDX,2
0044635D |. E8 D21C0E00 CALL FRMMSTR.00528034
00446362 |. 59 POP ECX
00446363 |. 84C9 TEST CL,CL //这是注册码正确与否的标志
00446365 |. 0F84 25020000 JE FRMMSTR.00446590 // CL为0则跳走,当然是死路一条啦。
0044636B |. B2 01 MOV DL,1 //下面这一大堆都是在注册成功后向注册表写内容的过程。
0044636D |. A1 3C444800 MOV EAX,DWORD PTR DS:[48443C]
00446372 |. E8 1DE20300 CALL FRMMSTR.00484594
00446377 |. 8945 8C MOV DWORD PTR SS:[EBP-74],EAX
0044637A |. 66:C745 AC 140>MOV WORD PTR SS:[EBP-54],14
00446380 |. BA 02000080 MOV EDX,80000002
00446385 |. 8B45 8C MOV EAX,DWORD PTR SS:[EBP-74]
00446388 |. E8 8B1B0E00 CALL FRMMSTR.00527F18
0044638D |. 66:C745 AC 500>MOV WORD PTR SS:[EBP-54],50
00446393 |. BA 8F6D5400 MOV EDX,FRMMSTR.00546D8F ; ASCII "\SOFTWARE\Microsoft\CORBA Specs\Key" //这个是在HKEY_Local_Machine下
面创建的。注册成功后,你输入的注册码就那里可以看到,是明码。
00446398 |. 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18]
0044639B |. E8 801B0E00 CALL FRMMSTR.00527F20
*省去很多行
0044643F |. 66:C745 AC 680>MOV WORD PTR SS:[EBP-54],68
00446445 |. BA B76D5400 MOV EDX,FRMMSTR.00546DB7 ;ASCII "Thank you for ordering FrameMaster!
Your support is much appreciated.
Please store the registration key in case you need it later.
"
0044644A |. 8D45 DC LEA EAX,DWORD PTR SS:[EBP-24]
0044644D |. E8 CE1A0E00 CALL FRMMSTR.00527F20
00446452 |. FF45 B8 INC DWORD PTR SS:[EBP-48]
00446455 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
00446457 |. B2 02 MOV DL,2
00446459 |. 59 POP ECX
0044645A |. E8 1D8B0700 CALL FRMMSTR.004BEF7C
0044645F |. FF4D B8 DEC DWORD PTR SS:[EBP-48]
00446462 |. 8D45 DC LEA EAX,DWORD PTR SS:[EBP-24]
00446465 |. BA 02000000 MOV EDX,2
0044646A |. E8 C51B0E00 CALL FRMMSTR.00528034
0044646F |> 66:C745 AC 740>MOV WORD PTR SS:[EBP-54],74
00446475 |. BA 3B6E5400 MOV EDX,FRMMSTR.00546E3B ;ASCII "\SOFTWARE\Galleria Software\FrameMaster\Registrant" //这个是
在HKEY_LOCAL_MACHINE下面建立的。用户名在里面。
0044647A |. 8D45 D8 LEA EAX,DWORD PTR SS:[EBP-28]
*省去多行
004464C2 |. 8D55 D0 LEA EDX,DWORD PTR SS:[EBP-30] //用户名地址送EDX
004464C5 |. FF32 PUSH DWORD PTR DS:[EDX]
004464C7 |. 66:C745 AC 800>MOV WORD PTR SS:[EBP-54],80
004464CD |. BA 6E6E5400 MOV EDX,FRMMSTR.00546E6E ;ASCII "Registrant"
004464D2 |. 8D45 D4 LEA EAX,DWORD PTR SS:[EBP-2C]
004464D5 |. E8 461A0E00 CALL FRMMSTR.00527F20
004464DA |. FF45 B8 INC DWORD PTR SS:[EBP-48]
004464DD |. 8B10 MOV EDX,DWORD PTR DS:[EAX]
*省去多行
00446584 |> A1 987D5500 MOV EAX,DWORD PTR DS:[_frmRegister]
00446589 |. E8 36950600 CALL FRMMSTR.004AFAC4
0044658E |. EB 59 JMP SHORT FRMMSTR.004465E9 //如果注册成功,则走到这里,然后跳到下面。
00446590 |> 68 D0070000 PUSH 7D0 ; /Timeout = 2000. ms//如果注册码不正确,则直接来到这里,打个2000MS的盹,然
后显示一个不成功对话框。
00446595 |. E8 EA8C0F00 CALL <JMP.&KERNEL32.Sleep> ; \Sleep
0044659A |. 6A 00 PUSH 0
0044659C |. 8D45 88 LEA EAX,DWORD PTR SS:[EBP-78]
0044659F |. E8 342EFFFF CALL FRMMSTR.004393D8
004465A4 |. B2 02 MOV DL,2
004465A6 |. E8 612EFFFF CALL FRMMSTR.0043940C
004465AB |. 66:8B08 MOV CX,WORD PTR DS:[EAX]
004465AE |. 51 PUSH ECX
004465AF |. 66:C745 AC B00>MOV WORD PTR SS:[EBP-54],0B0
004465B5 |. BA 7A6E5400 MOV EDX,FRMMSTR.00546E7A ; ASCII "Failed Registration"
004465BA |. 8D45 C0 LEA EAX,DWORD PTR SS:[EBP-40]
004465BD |. E8 5E190E00 CALL FRMMSTR.00527F20
004465C2 |. FF45 B8 INC DWORD PTR SS:[EBP-48]
004465C5 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
004465C7 |. B2 01 MOV DL,1
004465C9 |. 59 POP ECX
004465CA |. E8 AD890700 CALL FRMMSTR.004BEF7C //这个CALL出现错误提示。
004465CF |. FF4D B8 DEC DWORD PTR SS:[EBP-48]
004465D2 |. 8D45 C0 LEA EAX,DWORD PTR SS:[EBP-40]
*略去多行。
================================================================================
下面我们看0044634C处的函数调用 CALL FRMMSTR.00440354 ,代码如下:
*函数前面部分代码省去,下面是黑名单比较。
004404AB |. FF85 18FFFFFF INC DWORD PTR SS:[EBP-E8]
004404B1 |. BA C5285400 MOV EDX,FRMMSTR.005428C5 ; ASCII "KD8383VMDKKAAAL-LLF4VVIII34AAAAA-LLF4VVIII34AAAAA"
004404B6 |. 8D45 84 LEA EAX,DWORD PTR SS:[EBP-7C]
004404B9 |. E8 627A0E00 CALL FRMMSTR.00527F20
004404BE |. FF85 18FFFFFF INC DWORD PTR SS:[EBP-E8]
004404C4 |. BA F7285400 MOV EDX,FRMMSTR.005428F7 ; ASCII "344DDDDAAKKAAAB-VVIII34AAAAABBF4-LLF4VVIII34AAAAA"
004404C9 |. 8D45 88 LEA EAX,DWORD PTR SS:[EBP-78]
004404CC |. E8 4F7A0E00 CALL FRMMSTR.00527F20
004404D1 |. FF85 18FFFFFF INC DWORD PTR SS:[EBP-E8]
004404D7 |. BA 29295400 MOV EDX,FRMMSTR.00542929 ; ASCII "344DDDDAAKVVIII-34AAAAAKAAABBBF4-LLF4VVIII34AAAAA"
004404DC |. 8D45 8C LEA EAX,DWORD PTR SS:[EBP-74]
004404DF |. E8 3C7A0E00 CALL FRMMSTR.00527F20
004404E4 |. FF85 18FFFFFF INC DWORD PTR SS:[EBP-E8]
004404EA |. BA 5B295400 MOV EDX,FRMMSTR.0054295B ; ASCII "344DDVVIII34AAA-AADDAAKKAAABBBF4-LLF4VVIII34AAAAA"
004404EF |. 8D45 90 LEA EAX,DWORD PTR SS:[EBP-70]
004404F2 |. E8 297A0E00 CALL FRMMSTR.00527F20
004404F7 |. FF85 18FFFFFF INC DWORD PTR SS:[EBP-E8]
004404FD |. BA 8D295400 MOV EDX,FRMMSTR.0054298D ; ASCII "344DDDDAAKVVIII-34AAAAAKAAABBBF4-LLF4VVIII34AAAAA"
00440502 |. 8D45 94 LEA EAX,DWORD PTR SS:[EBP-6C]
00440505 |. E8 167A0E00 CALL FRMMSTR.00527F20
0044050A |. FF85 18FFFFFF INC DWORD PTR SS:[EBP-E8]
00440510 |. BA BF295400 MOV EDX,FRMMSTR.005429BF ; ASCII "VVIII34AAAAA344-DDDDAAKKAAABBBF4-LLF4VVIII34AAAAA"
00440515 |. 8D45 98 LEA EAX,DWORD PTR SS:[EBP-68]
00440518 |. E8 037A0E00 CALL FRMMSTR.00527F20
0044051D |. FF85 18FFFFFF INC DWORD PTR SS:[EBP-E8]
00440523 |. BA F1295400 MOV EDX,FRMMSTR.005429F1 ; ASCII "344DDDDVVIII34A-AAAAAAKKAAABBBF4-LLF4VVIII34AAAAA"
00440528 |. 8D45 9C LEA EAX,DWORD PTR SS:[EBP-64]
0044052B |. E8 F0790E00 CALL FRMMSTR.00527F20
00440530 |. FF85 18FFFFFF INC DWORD PTR SS:[EBP-E8]
00440536 |. BA 232A5400 MOV EDX,FRMMSTR.00542A23 ; ASCII "344DDDDAAVVIII3-4AAAAAKKAAABBBF4-LLF4VVIII34AAAAA"
0044053B |. 8D45 A0 LEA EAX,DWORD PTR SS:[EBP-60]
0044053E |. E8 DD790E00 CALL FRMMSTR.00527F20
00440543 |. FF85 18FFFFFF INC DWORD PTR SS:[EBP-E8]
00440549 |. BA 552A5400 MOV EDX,FRMMSTR.00542A55 ; ASCII "344DDDDAVVIII34-AAAAAAKKAAABBBF4-LLF4VVIII34AAAAA"
0044054E |. 8D45 A4 LEA EAX,DWORD PTR SS:[EBP-5C]
00440551 |. E8 CA790E00 CALL FRMMSTR.00527F20
00440556 |. FF85 18FFFFFF INC DWORD PTR SS:[EBP-E8]
0044055C |. BA 872A5400 MOV EDX,FRMMSTR.00542A87 ; ASCII "344DDDDAAKKAVVI-II34AAAAAAABBBF4-LLF4VVIII34AAAAA"
00440561 |. 8D45 A8 LEA EAX,DWORD PTR SS:[EBP-58]
00440564 |. E8 B7790E00 CALL FRMMSTR.00527F20
00440569 |. FF85 18FFFFFF INC DWORD PTR SS:[EBP-E8]
0044056F |. BA B92A5400 MOV EDX,FRMMSTR.00542AB9 ; ASCII "344DDDDAAKKVVII-I34AAAAAAAABBBF4-LLF4VVIII34AAAAA"
00440574 |. 8D45 AC LEA EAX,DWORD PTR SS:[EBP-54]
00440577 |. E8 A4790E00 CALL FRMMSTR.00527F20
0044057C |. FF85 18FFFFFF INC DWORD PTR SS:[EBP-E8]
00440582 |. BA EB2A5400 MOV EDX,FRMMSTR.00542AEB ; ASCII "5666DDDAAKKAVVI-II34AAAAAAABBBF4-LLF4VVIII34AAAAA"
00440587 |. 8D45 B0 LEA EAX,DWORD PTR SS:[EBP-50]
0044058A |. E8 91790E00 CALL FRMMSTR.00527F20
0044058F |. FF85 18FFFFFF INC DWORD PTR SS:[EBP-E8]
00440595 |. BA 1D2B5400 MOV EDX,FRMMSTR.00542B1D ; ASCII "KJ4DDDDAAKKAAVV-III34AAAAAABBBF4-LLF4VVIII34AAAAA"
0044059A |. 8D45 B4 LEA EAX,DWORD PTR SS:[EBP-4C]
0044059D |. E8 7E790E00 CALL FRMMSTR.00527F20
004405A2 |. FF85 18FFFFFF INC DWORD PTR SS:[EBP-E8]
004405A8 |. BA 4F2B5400 MOV EDX,FRMMSTR.00542B4F ; ASCII "3447777AVVIII34-AAAAAAKKAAABBBF4-LLF4VVIII34AAAAA"
004405AD |. 8D45 B8 LEA EAX,DWORD PTR SS:[EBP-48]
004405B0 |. E8 6B790E00 CALL FRMMSTR.00527F20
004405B5 |. FF85 18FFFFFF INC DWORD PTR SS:[EBP-E8]
004405BB |. BA 812B5400 MOV EDX,FRMMSTR.00542B81 ; ASCII "344DDDDAAKKVVII-I34AAAAAAAABBBF4-LLF4VVIII34AAAAA"
*省去很多行
004408E0 |. 8D95 30FFFFFF ||LEA EDX,DWORD PTR SS:[EBP-D0]
004408E6 |. 8D45 FC ||LEA EAX,DWORD PTR SS:[EBP-4]
004408E9 |. E8 16780E00 ||CALL FRMMSTR.00528104 //这个CALL和下面构成经典结构。所以F8跟入。
004408EE |. 84C0 ||TEST AL,AL
004408F0 |. 0F84 BD000000 ||JE FRMMSTR.004409B3 //测试AL标志,如果为不为0则不跳,不跳则OK。
004408F6 |. B0 01 ||MOV AL,1
004408F8 |. 50 ||PUSH EAX
004408F9 |. FF8D 18FFFFFF ||DEC DWORD PTR SS:[EBP-E8]
004408FF |. 8D85 30FFFFFF ||LEA EAX,DWORD PTR SS:[EBP-D0]
*省去若干行
0044098A |. 83C4 14 ||ADD ESP,14
0044098D |. FF8D 18FFFFFF ||DEC DWORD PTR SS:[EBP-E8]
00440993 |. 8D45 FC ||LEA EAX,DWORD PTR SS:[EBP-4]
00440996 |. BA 02000000 ||MOV EDX,2
0044099B |. E8 94760E00 ||CALL FRMMSTR.00528034
004409A0 |. 58 ||POP EAX
004409A1 |. 8B95 FCFEFFFF ||MOV EDX,DWORD PTR SS:[EBP-104]
004409A7 |. 64:8915 00000000 ||MOV DWORD PTR FS:[0],EDX
004409AE |. E9 E7000000 ||JMP FRMMSTR.00440A9A //程序到这里就直接跳到下面(*)代码处。
*省去若干行
00440A87 |. E8 A8750E00 CALL FRMMSTR.00528034
00440A8C |. 58 POP EAX
00440A8D |. 8B95 FCFEFFFF MOV EDX,DWORD PTR SS:[EBP-104]
00440A93 |. 64:8915 00000000 MOV DWORD PTR FS:[0],EDX
00440A9A |> 8BE5 MOV ESP,EBP //跳到这里则成功。--------------(*)
00440A9C |. 5D POP EBP
00440A9D \. C3 RETN
=============================================================================
下面继续分析004408E9 CALL FRMMSTR.00528104代码:
00528104 /$ 55 PUSH EBP
00528105 |. 8BEC MOV EBP,ESP
00528107 |. 53 PUSH EBX
00528108 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
0052810A |. 8B12 MOV EDX,DWORD PTR DS:[EDX]
0052810C |. E8 1BF9FDFF CALL FRMMSTR.00507A2C //这个函数内就这一个关键函数调用,F8跟入。
00528111 |. 0F94C0 SETE AL
00528114 |. 83E0 01 AND EAX,1
00528117 |. 5B POP EBX
00528118 |. 5D POP EBP
00528119 \. C3 RETN
=============================================================================
下面是0052810C CALL FRMMSTR.00507A2C函数的代码,这里就是关键地方了 。
00507A43 |. 8B46 FC MOV EAX,DWORD PTR DS:[ESI-4] //假码长度送EAX。
00507A46 |. 8B57 FC MOV EDX,DWORD PTR DS:[EDI-4] //真码长度送EAX。
00507A49 |. 29D0 SUB EAX,EDX //假码长度减去真码长度。这里假码是10位,真码是48位。结果是-38。
00507A4B |. 77 02 JA SHORT FRMMSTR.00507A4F //假码长度大于真码则跳。
00507A4D |. 01C2 ADD EDX,EAX // 上面差值-38加到EDX上,就是EDX=48-38=10位。也就是下面只比较你这十位
是否相同了。
00507A4F |> 52 PUSH EDX
00507A50 |. C1EA 02 SHR EDX,2 //计数器初始化。
00507A53 |. 74 26 JE SHORT FRMMSTR.00507A7B
00507A55 |> 8B0E /MOV ECX,DWORD PTR DS:[ESI] //假码前4个字节送ECX。
00507A57 |. 8B1F |MOV EBX,DWORD PTR DS:[EDI] //真码前4个字节送EBX。
00507A59 |. 39D9 |CMP ECX,EBX //比较真假。
00507A5B |. 75 58 |JNZ SHORT FRMMSTR.00507AB5 //不同则OVER。
00507A5D |. 4A |DEC EDX //计数器减1。
00507A5E |. 74 15 |JE SHORT FRMMSTR.00507A75 //为0则跳走。
00507A60 |. 8B4E 04 |MOV ECX,DWORD PTR DS:[ESI+4] //假码下4个字节送ECX。
00507A63 |. 8B5F 04 |MOV EBX,DWORD PTR DS:[EDI+4] //真码下4个字节送EBX。
00507A66 |. 39D9 |CMP ECX,EBX //比较真假。
00507A68 |. 75 4B |JNZ SHORT FRMMSTR.00507AB5 //不同则OVER。
00507A6A |. 83C6 08 |ADD ESI,8 //地址增量
00507A6D |. 83C7 08 |ADD EDI,8 //地址增量
00507A70 |. 4A |DEC EDX //计数器减量
00507A71 |.^75 E2 \JNZ SHORT FRMMSTR.00507A55 //不为0则往上循环。
00507A73 |. EB 06 JMP SHORT FRMMSTR.00507A7B //如果上面循环结束,直接跳转。
00507A75 |> 83C6 04 ADD ESI,4
00507A78 |. 83C7 04 ADD EDI,4
00507A7B |> 5A POP EDX //计数器重新赋值
00507A7C |. 83E2 03 AND EDX,3
00507A7F |. 74 22 JE SHORT FRMMSTR.00507AA3
00507A81 |. 8B0E MOV ECX,DWORD PTR DS:[ESI] //剩余假码送ECX,因为可能注册码长度并非4的倍数。
00507A83 |. 8B1F MOV EBX,DWORD PTR DS:[EDI] //剩余真码送EBX。
00507A85 |. 38D9 CMP CL,BL //比较真假。
00507A87 |. 75 41 JNZ SHORT FRMMSTR.00507ACA //不同则OVER。
00507A89 |. 4A DEC EDX //计数器减量
00507A8A |. 74 17 JE SHORT FRMMSTR.00507AA3 //为0则跳走。
00507A8C |. 38FD CMP CH,BH
00507A8E |. 75 3A JNZ SHORT FRMMSTR.00507ACA
00507A90 |. 4A DEC EDX //计数器减量
00507A91 |. 74 10 JE SHORT FRMMSTR.00507AA3 //为0则跳走。
00507A93 |. 81E3 0000FF00 AND EBX,0FF0000 //如果还有第三个字节,则用与运算取出。
00507A99 |. 81E1 0000FF00 AND ECX,0FF0000 //同上。
00507A9F |. 39D9 CMP ECX,EBX //比较真假。
00507AA1 |. 75 27 JNZ SHORT FRMMSTR.00507ACA //不同则OVER。
00507AA3 |> 01C0 ADD EAX,EAX ; FRMMSTR.<ModuleEntryPoint>
00507AA5 |. EB 23 JMP SHORT FRMMSTR.00507ACA //从这里跳走才算成功的。
*省去多行
00507ACA |> 5F POP EDI
00507ACB |. 5E POP ESI
00507ACC |. 5B POP EBX
00507ACD \. C3 RETN
=============================================================================
后记:
经过1个小时的跟踪,1个小时写出破文来,虽然这个软件最后是明码比较,我还没有发现这个真码怎么计算出来的,好象不明显。进入前面那个比较真
假的函数,你立即就可以看到真码了。当然还有10几个假码在那里列出来了,不要被它所迷惑哟。只有用它自动取的那个注册码才可以成功(废话,假
码跟它也不相等啊。)
虽然没有困难找出注册码,但如何分析出注册码的算法是关键。我还需要继续分析。先把这个笔记POST出来再说吧。
浪费您时间阅读此文,十分感谢!再次向关注我的破文的各位表示感谢!!
结果:
UserName: wanggang
RegisterCode: D8383VMDKKAAAL-LLF4VVIII34AAAAA-LLF4VVIII34AA1-1
2006年1月17日晚完稿
[注意]APP应用上架合规检测服务,协助应用顺利上架!