【破解作者】 layper
【作者邮箱】 layper2002@yahoo.com.cn
【使用工具】 peid,od
【破解平台】 Win9x/NT/2000/XP
【软件名称】 Calendar Builder 3.3a
【下载地址】 http://www.onlinedown.net/soft/3467.htm
【软件简介】 非常棒的日历制作软件,程序内建多种的日历模式样板,如每月、每年、每周等等,它支持中文字形,可加入文字及喜欢的图片,更可将每个节日放上喜欢的ICON来表示,相当不错,设计完并可将它打出来使用。
【软件大小】 1617KB
【加壳方式】 无
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】


这个是老外的软件,在破解这个软件时,由于英语不好给本人带来了很大麻烦。
用OD查壳,无,用Borland Delphi 2.0写的。破解之前,先分析一下有用的信息,注册码先前要有“RKS-”,错误会跳出一个窗口,INI文件处有用户名。
刚开始,我下断就是按照这两个地方进行的。用bp MessageBoxExA拦不下,又换GetPrivateProfileString、GetPrivateProfileInt、WritePrivateProfileString、WritePrivateProfileInt还是拦下了,但不知道是哪个,又换WriteFile、CreateFile还是找不到关键断点,没办法,还是另想招数了,换查找字符串,最初用字符串插件,吗呀,全是英文,看得我头皮发麻,TMD,一狠心,右键-搜索-字符参考,在字符参考这里每个命令设置断点,老子就不信这样我还找不到。接着就不断的F9、F2的拼命运行、取消断点(别看这个方法笨,对付老外的软件还是蛮有用的 :) )到0042F433处停住,ASCII "BUTTON",点击enter serial number继续,到0042D86F处出现注册对话框,名字输入"layper",注册码输入"RKS-1357924680",确定,(向下翻动堆栈窗口,呵呵,看见用户名和假注册码)
继续F2、F9,到达004B0B4F处时,呵呵,堆栈框跳出了
0012F188   0012F1C0  指针到下一个 SEH 记录
0012F18C   004B0B7C  SE 句柄
0012F190   0012F1B4
0012F194   00B22070
0012F198   0012F288
0012F19C   00000000
0012F1A0   00B227BC  ASCII "920611"  ;与RKS-连接起来就是注册码
0012F1A4   000007CD
0012F1A8   00B22748  ASCII "LAYPER"
0012F1AC   00AB292C  ASCII "CB"
0012F1B0   00B2275C  ASCII "layper"

如果你只是想要一个注册码就此打住不用往下看了,004B0B4F不取消断点,继续F9、F2,不久又回到这里,看堆栈
0012F188   0012F1C0  指针到下一个 SEH 记录
0012F18C   004B0B7C  SE 句柄
0012F190   0012F1B4
0012F194   00B22070
0012F198   0012F288
0012F19C   00000000
0012F1A0   00B22748  ASCII "3683845"  ;与“RKS-”连接起来又是注册码
0012F1A4   00001F37
0012F1A8   00B227BC  ASCII "LAYPER"
0012F1AC   00AB292C  ASCII "CB"
0012F1B0   00B2275C  ASCII "layper"

看来004B0B4F处有猫腻,算法部分应该就是这附近了,向上004B0AC0下断,右键-搜索-字符参考,清除所有断点,F9运行重新下断
004B0AC0  /$  55            PUSH EBP                                 ;  寄存器EAX显示layper
004B0AC1  |.  8BEC          MOV EBP,ESP
004B0AC3  |.  83C4 EC       ADD ESP,-14
004B0AC6  |.  53            PUSH EBX
004B0AC7  |.  56            PUSH ESI
004B0AC8  |.  57            PUSH EDI
004B0AC9  |.  33DB          XOR EBX,EBX                              ;  ebx清0
004B0ACB  |.  895D EC       MOV DWORD PTR SS:[EBP-14],EBX            ;  [ebp-14]清0
004B0ACE  |.  895D F4       MOV DWORD PTR SS:[EBP-C],EBX             ;  [ebp-c]清0
004B0AD1  |.  8BD9          MOV EBX,ECX                              ;  ecx清0
004B0AD3  |.  8955 F8       MOV DWORD PTR SS:[EBP-8],EDX
004B0AD6  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
004B0AD9  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004B0ADC  |.  E8 2B2EF5FF   CALL Cb.0040390C
004B0AE1  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
004B0AE4  |.  E8 232EF5FF   CALL Cb.0040390C
004B0AE9  |.  33C0          XOR EAX,EAX
004B0AEB  |.  55            PUSH EBP
004B0AEC  |.  68 7C0B4B00   PUSH Cb.004B0B7C
004B0AF1  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
004B0AF4  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
004B0AF7  |.  33F6          XOR ESI,ESI
004B0AF9  |.  8BD3          MOV EDX,EBX
004B0AFB  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
004B0AFE  |.  E8 CDF6FFFF   CALL Cb.004B01D0
004B0B03  |.  8945 F0       MOV DWORD PTR SS:[EBP-10],EAX
004B0B06  |.  8D55 F4       LEA EDX,DWORD PTR SS:[EBP-C]
004B0B09  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ;  layper
004B0B0C  |.  E8 9752F5FF   CALL Cb.00405DA8
004B0B11  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]             ;  LAYPER
004B0B14  |.  E8 3F2CF5FF   CALL Cb.00403758
004B0B19  |.  8BD0          MOV EDX,EAX                              ;  EDX=EAX=用户名长度
004B0B1B  |.  85D2          TEST EDX,EDX                             ;  用户名是否为空
004B0B1D  |.  7E 20         JLE SHORT Cb.004B0B3F                    ;  空则跳走
004B0B1F  |.  B9 01000000   MOV ECX,1                                ;  ECX=1
004B0B24  |>  8B45 F4       /MOV EAX,DWORD PTR SS:[EBP-C]            ;  EAX=LAYPER
004B0B27  |.  8A4408 FF     |MOV AL,BYTE PTR DS:[EAX+ECX-1]          ;  大写用户名逐位入AL
004B0B2B  |.  3C 20         |CMP AL,20                               ;  是否为空格
004B0B2D  |.  74 0C         |JE SHORT Cb.004B0B3B
004B0B2F  |.  25 FF000000   |AND EAX,0FF                             ;  留下AL,即大写用户名字符
004B0B34  |.  0FAF45 F0     |IMUL EAX,DWORD PTR SS:[EBP-10]          ;  EAX乘于[EBP-10],注意[EBP-10]
004B0B38  |.  48            |DEC EAX                                 ;  上一步结果减1
004B0B39  |.  03F0          |ADD ESI,EAX                             ;  上一次循环结果与EAX相加,ESI存放计算结果
004B0B3B  |>  41            |INC ECX                                 ;  ECX加1
004B0B3C  |.  4A            |DEC EDX                                 ;  EDX减1,ECX为计数器
004B0B3D  |.^ 75 E5         \JNZ SHORT Cb.004B0B24
004B0B3F  |>  8D55 EC       LEA EDX,DWORD PTR SS:[EBP-14]
004B0B42  |.  8BC6          MOV EAX,ESI                              ;  计算结果放入EAX
004B0B44  |.  E8 7B55F5FF   CALL Cb.004060C4                         ;  这个CALL把上面结果转为十进制
004B0B49  |.  8B4D EC       MOV ECX,DWORD PTR SS:[EBP-14]            ;  换算结果放入ECX
004B0B4C  |.  8B45 08       MOV EAX,DWORD PTR SS:[EBP+8]
004B0B4F  |.  BA 940B4B00   MOV EDX,Cb.004B0B94                      ;  ASCII "RKS-"
004B0B54  |.  E8 4B2CF5FF   CALL Cb.004037A4
004B0B59  |.  33C0          XOR EAX,EAX
004B0B5B  |.  5A            POP EDX
004B0B5C  |.  59            POP ECX
004B0B5D  |.  59            POP ECX
004B0B5E  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
004B0B61  |.  68 830B4B00   PUSH Cb.004B0B83
004B0B66  |>  8D45 EC       LEA EAX,DWORD PTR SS:[EBP-14]
004B0B69  |.  E8 762AF5FF   CALL Cb.004035E4
004B0B6E  |.  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]
004B0B71  |.  BA 03000000   MOV EDX,3
004B0B76  |.  E8 892AF5FF   CALL Cb.00403604
004B0B7B  \.  C3            RETN

004B0B34处的[EBP-10]分别为
07cd\1f37\6fa\5ad\aea\99f\cd1\f17\115f\11b4\1749\1530\1b1f\1771\1b54\17d9\1b54\17d9\1b1f\1771\2081\1fb9\231f\0000\0998\03fe\1c17\1eb8\18a1\0e15\0905\245d\18a0\18a0\18a2\0000\0905\245d\18a1\0e15\
其中07cd与1f37算出的结果为有效
算法总结:
把用户名转为大写后各个字母相加在乘于07CD或1F37,得之结果加上用户名长度再转化为十六进制,在与“RKS-”连接既是注册码了上面是算法部分,要把这个软件破解过程写完整(比如[EBP-10]为什么只是07CD和1F37)需要很长的篇幅,限于篇幅关系,就写这么多了

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