野猫III 发表于 2006-7-7 10:50:13

【转帖】忠诚卫士V1.0简单浮点算法分析 by pentalce

【破文标题】忠诚卫士V1.0简单浮点算法分析

【破文标题】忠诚卫士V1.0简单浮点算法分析
【破文作者】pentalce
【作者邮箱】
【作者主页】www.chinapyg.com
【破解工具】OD,ECE,Peid
【破解平台】Win9x/NT/2000/XP
【软件名称】忠诚卫士V1.0
【软件大小】1.8M
【原版下载】http://www.dywt.com.cn/vbs/viewFile.asp?BoardID=124&ID=37531
【保护方式】
【软件简介】历经半月.精尽打造.忠诚卫士1.0,欢迎试用.如果注册,感激不尽...
写得不好不要骂人哦...
软件写的很烂的~还收费。。。。。。
------------------------------------------------------------------------
【破解过程】1、用Peid查壳
显示无壳。那好说OD载入吧~
2、算法分析
说实话,偶编程不行。特别是看到VB就头痛。一般看见VB的程序我不会去破解的。
运行试一下。
机器码:-2161713656
注册名:pentacle
注册码:789789
弹出失败窗口
好。OD载入
下断bp MessageBoxA,按上述再来一次
77D5050B >8BFF            MOV EDI,EDI   //我们断在这儿。看右下角的堆栈友好提示
0012EC98   10061EA6返回到 krnln.10061EA6 来自 USER32.MessageBoxA
接下来我们Alt+F9执行到返回。这个时候就到主程序的领空了
0054831D    83C4 28         ADD ESP,28      //返回主程序的领空了
我们往上看
00548283   /74 09         JE SHORT 忠诚卫士.0054828E
00548285   |53            PUSH EBX
00548286   |E8 E9490000   CALL 忠诚卫士.0054CC74
0054828B   |83C4 04         ADD ESP,4
0054828E   \68 04000080   PUSH 80000004
00548293    6A 00         PUSH 0
00548295    68 A5324000   PUSH 忠诚卫士.004032A5                     ; 恭喜...
0054829A    68 01030080   PUSH 80000301
0054829F    6A 00         PUSH 0
005482A1    68 40000000   PUSH 40
005482A6    68 04000080   PUSH 80000004
005482AB    6A 00         PUSH 0
005482AD    68 940D4800   PUSH 忠诚卫士.00480D94                     ; 你的软件注册成功...\n\n再次感谢你注册<忠诚卫士>
005482B2    68 03000000   PUSH 3
005482B7    BB 00030000   MOV EBX,300
005482BC    E8 BF490000   CALL 忠诚卫士.0054CC80
005482C1    83C4 28         ADD ESP,28
005482C4    68 01000100   PUSH 10001
005482C9    68 B3030106   PUSH 60103B3
005482CE    68 B4030152   PUSH 520103B4
005482D3    68 01000000   PUSH 1
005482D8    BB 60030000   MOV EBX,360
005482DD    E8 9E490000   CALL 忠诚卫士.0054CC80
005482E2    83C4 10         ADD ESP,10
005482E5    E9 74000000   JMP 忠诚卫士.0054835E
005482EA    68 04000080   PUSH 80000004
005482EF    6A 00         PUSH 0
005482F1    68 E8324000   PUSH 忠诚卫士.004032E8                     ; 不好意思...
005482F6    68 01030080   PUSH 80000301
005482FB    6A 00         PUSH 0
005482FD    68 30000000   PUSH 30
00548302    68 04000080   PUSH 80000004
00548307    6A 00         PUSH 0
00548309    68 C20D4800   PUSH 忠诚卫士.00480DC2                     ; 注册码错误.请检查后再注册...
0054830E    68 03000000   PUSH 3
00548313    BB 00030000   MOV EBX,300
00548318    E8 63490000   CALL 忠诚卫士.0054CC80
0054831D    83C4 28         ADD ESP,28

再向上走。
00548096    68 01000000   PUSH 1                                 ; 下面都是浮点运算了
0054809B    BB 64010000   MOV EBX,164
005480A0    E8 DB4B0000   CALL 忠诚卫士.0054CC80
005480A5    83C4 10         ADD ESP,10
005480A8    8945 E8         MOV DWORD PTR SS:[EBP-18],EAX
005480AB    8955 EC         MOV DWORD PTR SS:[EBP-14],EDX
005480AE    DD45 E8         FLD QWORD PTR SS:[EBP-18]                ; 真正的机器码
005480B1    DC25 A5374000   FSUB QWORD PTR DS:               ; 真正的机器码-39542454
005480B7    DD5D E0         FSTP QWORD PTR SS:[EBP-20]               ; 真正的注册码
005480BA    DD45 F4         FLD QWORD PTR SS:[EBP-C]               ; 假的注册码
005480BD    DC65 E0         FSUB QWORD PTR SS:[EBP-20]               ; 假注册码-真注册码
005480C0    D9E4            FTST                                     ; 0检测,即检测上面的减法结果是否为0
005480C2    DFE0            FSTSW AX                                 ; 保存标志位
005480C4    F6C4 01         TEST AH,1
005480C7    74 02         JE SHORT 忠诚卫士.005480CB
005480C9    D9E0            FCHS
005480CB    DC1D 8C0D4800   FCOMP QWORD PTR DS:            ; 消除误差再次比较
005480D1    DFE0            FSTSW AX
005480D3    F6C4 41         TEST AH,41
005480D6    0F84 0E020000   JE 忠诚卫士.005482EA                         ; 关键跳转,跳就OVER


通过跟踪发现。真正的机器码和注册窗口中显示的机器码不一样~
于是我用ECE来分析一下吧。
晕~这么多窗口。全是默认名称。怎么找呢?
于是我想。这个注册窗口中有五个按钮和三个编辑框,嘿,还没有。
不过找到有三个编辑框的窗口。OK,就是你了~
于是我们来到
00541C2E    55            PUSH EBP                                 ; 机器码得到的地方
00541C2F    8BEC            MOV EBP,ESP
00541C31    81EC 18000000   SUB ESP,18
00541C37    68 00000000   PUSH 0
00541C3C    BB C4060000   MOV EBX,6C4
00541C41    E8 3AB00000   CALL 忠诚卫士.0054CC80                     ; 取硬盘特征字(),易语言的一个命令
00541C46    83C4 04         ADD ESP,4
00541C49    68 01030080   PUSH 80000301
00541C4E    6A 00         PUSH 0
00541C50    50            PUSH EAX
00541C51    68 01000000   PUSH 1
00541C56    BB 64010000   MOV EBX,164
00541C5B    E8 20B00000   CALL 忠诚卫士.0054CC80
00541C60    83C4 10         ADD ESP,10
00541C63    8945 F4         MOV DWORD PTR SS:[EBP-C],EAX
00541C66    8955 F8         MOV DWORD PTR SS:[EBP-8],EDX
00541C69    DD45 F4         FLD QWORD PTR SS:[EBP-C]               ; 取回的特征字,即真正的机器码
00541C6C    DC25 97484600   FSUB QWORD PTR DS:               ; 真正的机器码-19771227
00541C72    DD5D EC         FSTP QWORD PTR SS:[EBP-14]               ; 保存结果
00541C75    68 01060080   PUSH 80000601
00541C7A    FF75 F0         PUSH DWORD PTR SS:[EBP-10]
00541C7D    FF75 EC         PUSH DWORD PTR SS:[EBP-14]
00541C80    68 01000000   PUSH 1
00541C85    BB 68010000   MOV EBX,168
00541C8A    E8 F1AF0000   CALL 忠诚卫士.0054CC80                     ; 这个就是我们看到的机器码

OK。就此程序已经分析的差不多了~
经分析:注册成功后注册信息保存在
C:\windows\system.ini文件中(要是程序一个出错怎么哪?)
在文件尾写如下数据

yhm=pentacle
zcm=-2181484883

易语言注册机源码:
注册码框.内容=到文本(取硬盘特征字()-39542454)




------------------------------------------------------------------------
【破解总结】算法总结:
注册码=机器码+19771227-39542454
附上我的注册信息
机器码:-2161713656
注册名:pentacle
注册码:-2181484883

------------------------------------------------------------------------
【版权声明】本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢!

[ 本帖最后由 野猫III 于 2006-7-7 10:56 编辑 ]

eszwaq123 发表于 2006-7-7 10:52:53

哇喜欢这样的 文章 说明清楚啊

野猫III 发表于 2006-7-7 11:00:36

原帖由 eszwaq123 于 2006-7-7 10:52 发表
哇喜欢这样的 文章 说明清楚啊

没找到这个软件,如果那位朋友找到的话,记得带上来噢~

本来是想做小鱼这个软件的算法分析演示的~

如果最终没找到这个软件的话,就算了~ ;P
页: [1]
查看完整版本: 【转帖】忠诚卫士V1.0简单浮点算法分析 by pentalce