飘云 发表于 2005-4-10 16:48:00

[PYG]算法分析入门第六课

【破文标题】算法分析入门第六课
【破文作者】飘云
【作者主页】https://www.chinapyg.com
【破解平台】winxp
【破解工具】PEiD0.93、AspackDie、w32dasm、OD二哥修改版
【作者邮箱】[email protected]
【软件名称】Office小管家 1.0
【软件大小】1500 KB
【原版下载】http://www.uu007.com/Soft_Show.asp?SoftID=5
【软件简介】收集整 理 Word 和 Excel ,文档交流方便快捷,直接进行可视编辑。

这就是Office小管家,它帮助您收藏Word 和 Excel 。通过下面几个部分的介绍,相信您一定会喜欢上它。:)

Office小管家将帮助您:
 
1.将你感兴趣的Word 和 Excel收藏到Office小管家中。
2.将您众多杂乱的Word 和 Excel 信息,一起收藏到Office小管家中,按树3状进行分类管理,同时可进行浏览,编辑。形成了自己的信息库之后,再4也不用担心找不到旧有的资料,再也不会有重复的劳动。
3.在Office小管家中可建立一个个的文档,对文档可进行编辑,你的Word 和 Excel文档 都可以存放到里面了。
Office小管家的功能特点: 
1.导入方式非常灵活:
仅需在信息库管理中点击批量导入文档,就可以原汁原味的导入进一个或多个文档。 
2.文档交流管理非常方便:
你可以使用Office小管家建立一个个xxk 的文件,导入的众多文档的所有属性内容就一起储存在这个文件中,你的同事朋友们也可以使用Office小管家打开这个文件,就可以浏览它里面的所有信息。当然,如果你收集的信息不想让别人看到,可以加上密码保护。
3.树状的分类目录整理:
那么多的文档导入到一个xxk 文件中,肯定需要分类整理。在Office小管家中,你可以建立一层层的目录,可以随意拖动目录或文档,随意进行排序。
Office小管家的特长:
相比其它同类软件,Office小管家有它独有的特性,这些可能正在您最需要的:

1.自定义建立信息库。
2.对文档、目录随意拖动排序。
3. 可以将文档A的某些页面或目录复制到文档B中。
4.简单易用,一看即了。

【分析过程】先用PEiD探测一下:ASPack 2.12 -> Alexey Solodovnikov 用AspackDie解决,当然用手动也很

快的 再查为Borland Delphi 6.0 - 7.0编写,用W32DASM找到以下关键(为了方便,我用OD看的代码):
004CD440      /.55               push ebp
004CD441      |.8BEC               mov ebp,esp
004CD443      |.B9 09000000      mov ecx,9
004CD448      |>6A 00            /push 0
004CD44A      |.6A 00            |push 0
004CD44C      |.49               |dec ecx
004CD44D      |.^ 75 F9            \jnz short Unpacked.004CD448
004CD44F      |.53               push ebx
004CD450      |.56               push esi
004CD451      |.8BD8               mov ebx,eax
004CD453      |.33C0               xor eax,eax
004CD455      |.55               push ebp
004CD456      |.68 35D74C00      push Unpacked.004CD735
004CD45B      |.64:FF30            push dword ptr fs:
004CD45E      |.64:8920            mov dword ptr fs:,esp
004CD461      |.8D55 FC            lea edx,dword ptr ss:
004CD464      |.8B83 14030000      mov eax,dword ptr ds:
004CD46A      |.E8 0D14F8FF      call Unpacked.0044E87C
004CD46F      |.837D FC 00         cmp dword ptr ss:,0         ;是否输入了注册码?
004CD473      |.75 2C            jnz short Unpacked.004CD4A1          ;没有就没得玩了~~
004CD475      |.6A 00            push 0
004CD477      |.68 48D74C00      push Unpacked.004CD748
004CD47C      |.68 54D74C00      push Unpacked.004CD754
004CD481      |.8BC3               mov eax,ebx
004CD483      |.E8 E47BF8FF      call Unpacked.0045506C
004CD488      |.50               push eax                           ; |hOwner
004CD489      |.E8 BEA8F3FF      call <jmp.&user32.MessageBoxA>       ; \MessageBoxA
004CD48E      |.8B83 14030000      mov eax,dword ptr ds:
004CD494      |.8B10               mov edx,dword ptr ds:
004CD496      |.FF92 C0000000      call dword ptr ds:
004CD49C      |.E9 F6010000      jmp Unpacked.004CD697
004CD4A1      |>8D55 F4            lea edx,dword ptr ss:
004CD4A4      |.8B83 14030000      mov eax,dword ptr ds:
004CD4AA      |.E8 CD13F8FF      call Unpacked.0044E87C
004CD4AF      |.8B45 F4            mov eax,dword ptr ss:
004CD4B2      |.8D55 F8            lea edx,dword ptr ss:
004CD4B5      |.E8 7EBFF3FF      call Unpacked.00409438
004CD4BA      |.8B45 F8            mov eax,dword ptr ss:
004CD4BD      |.50               push eax
004CD4BE      |.8D55 EC            lea edx,dword ptr ss:
004CD4C1      |.8B83 0C030000      mov eax,dword ptr ds:
004CD4C7      |.E8 B013F8FF      call Unpacked.0044E87C               ;位数
004CD4CC      |.8B45 EC            mov eax,dword ptr ss:
004CD4CF      |.8D55 F0            lea edx,dword ptr ss:
004CD4D2      |.E8 61BFF3FF      call Unpacked.00409438
004CD4D7      |.8B45 F0            mov eax,dword ptr ss:
004CD4DA      |.50               push eax
004CD4DB      |.8D55 E4            lea edx,dword ptr ss:
004CD4DE      |.8B83 08030000      mov eax,dword ptr ds:
004CD4E4      |.E8 9313F8FF      call Unpacked.0044E87C
004CD4E9      |.8B45 E4            mov eax,dword ptr ss:      ;机器码
004CD4EC      |.8D55 E8            lea edx,dword ptr ss:
004CD4EF      |.E8 44BFF3FF      call Unpacked.00409438
004CD4F4      |.8B45 E8            mov eax,dword ptr ss:      ;机器码送到eax
004CD4F7      |.5A               pop edx                              ;
004CD4F8      |.59               pop ecx                              ;
004CD4F9      |.E8 F2060000      call Unpacked.004CDBF0               ;算法call,跟进
004CD4FE      |.3C 01            cmp al,1                           ;返回值是否为1
004CD500      |.0F85 6A010000      jnz Unpacked.004CD670
004CD506      |.8D55 DC            lea edx,dword ptr ss:
004CD509      |.8B83 0C030000      mov eax,dword ptr ds:

★★以下是进入算法call:
004CDBF0      /$55               push ebp
004CDBF1      |.8BEC               mov ebp,esp
004CDBF3      |.81C4 1CFFFFFF      add esp,-0E4
004CDBF9      |.53               push ebx
004CDBFA      |.56               push esi                           ;Unpacked.00474090
004CDBFB      |.33DB               xor ebx,ebx
004CDBFD      |.899D 1CFFFFFF      mov dword ptr ss:,ebx
004CDC03      |.899D 20FFFFFF      mov dword ptr ss:,ebx
004CDC09      |.894D F4            mov dword ptr ss:,ecx
004CDC0C      |.8955 F8            mov dword ptr ss:,edx
004CDC0F      |.8945 FC            mov dword ptr ss:,eax
004CDC12      |.8B45 FC            mov eax,dword ptr ss:
004CDC15      |.E8 4673F3FF      call Unpacked.00404F60
004CDC1A      |.8B45 F8            mov eax,dword ptr ss:
004CDC1D      |.E8 3E73F3FF      call Unpacked.00404F60
004CDC22      |.8B45 F4            mov eax,dword ptr ss:
004CDC25      |.E8 3673F3FF      call Unpacked.00404F60
004CDC2A      |.33C0               xor eax,eax
004CDC2C      |.55               push ebp
004CDC2D      |.68 21DD4C00      push Unpacked.004CDD21
004CDC32      |.64:FF30            push dword ptr fs:
004CDC35      |.64:8920            mov dword ptr fs:,esp
004CDC38      |.C645 F3 00         mov byte ptr ss:,0
004CDC3C      |.33F6               xor esi,esi
004CDC3E      |.8B45 FC            mov eax,dword ptr ss:
004CDC41      |.E8 3271F3FF      call Unpacked.00404D78               ;机器码位数
004CDC46      |.8BD0               mov edx,eax                        ;edx中存放机器码位数
004CDC48      |.85D2               test edx,edx
004CDC4A      |.7E 2A            jle short Unpacked.004CDC76
004CDC4C      |.B9 01000000      mov ecx,1
004CDC51      |.8D85 24FFFFFF      lea eax,dword ptr ss:
004CDC57      |>8B5D FC            /mov ebx,dword ptr ss:
004CDC5A      |.0FB65C0B FF      |movzx ebx,byte ptr ds:   ;逐位取机器码ascii
004CDC5F      |.8918               |mov dword ptr ds:,ebx          ;送到
004CDC61      |.6918 39590500      |imul ebx,dword ptr ds:,55939   ;*55939
004CDC67      |.03F3               |add esi,ebx                         ;esi=esi+ebx
004CDC69      |.81C6 46743305      |add esi,5337446                     ;esi=esi+5337446(esi做为累加器)
004CDC6F      |.41               |inc ecx                           ;ecx=ecx+1
004CDC70      |.83C0 04            |add eax,4                     
004CDC73      |.4A               |dec edx                           ;edx=edx-1
004CDC74      |.^ 75 E1            \jnz short Unpacked.004CDC57         ;循环   
004CDC76      |>33C0               xor eax,eax
004CDC78      |.8945 EC            mov dword ptr ss:,eax
004CDC7B      |.8B45 FC            mov eax,dword ptr ss:         ;机器码送到eax
004CDC7E      |.E8 F570F3FF      call Unpacked.00404D78               ;计算机器码位数
004CDC83      |.8BD0               mov edx,eax                        ;edx中保存位数
004CDC85      |.85D2               test edx,edx
004CDC87      |.7E 2E            jle short Unpacked.004CDCB7
004CDC89      |.B9 01000000      mov ecx,1
004CDC8E      |.8D85 24FFFFFF      lea eax,dword ptr ss:
004CDC94      |>8B5D FC            /mov ebx,dword ptr ss:
004CDC97      |.0FB65C0B FF      |movzx ebx,byte ptr ds:   ;逐位取机器码ascii
004CDC9C      |.8918               |mov dword ptr ds:,ebx          ;送到
004CDC9E      |.6918 49860C00      |imul ebx,dword ptr ds:,0C8649;*0C8649
004CDCA4      |.035D EC            |add ebx,dword ptr ss:       ;初始值为0
004CDCA7      |.81C3 46743305      |add ebx,5337446                     ;ebx=ebx+5337446
004CDCAD      |.895D EC            |mov dword ptr ss:,ebx       ;结果放到(累加)
004CDCB0      |.41               |inc ecx                           ;ecx=ecx+1
004CDCB1      |.83C0 04            |add eax,4
004CDCB4      |.4A               |dec edx                           ;edx=edx-1
004CDCB5      |.^ 75 DD            \jnz short Unpacked.004CDC94         ;循环
004CDCB7      |>8D95 20FFFFFF      lea edx,dword ptr ss:
004CDCBD      |.8BC6               mov eax,esi                        ;esi中累加的值送到eax
004CDCBF      |.E8 B4BBF3FF      call Unpacked.00409878               ;转换成10进制
004CDCC4      |.8B95 20FFFFFF      mov edx,dword ptr ss:      ;真码第一组
004CDCCA      |.8B45 F8            mov eax,dword ptr ss:         ;假码第一组
004CDCCD      |.E8 EA71F3FF      call Unpacked.00404EBC               ;比较
004CDCD2            75 22            jnz short Unpacked.004CDCF6          ;不等则跳(爆破点1)
004CDCD4      |.8D95 1CFFFFFF      lea edx,dword ptr ss:
004CDCDA      |.8B45 EC            mov eax,dword ptr ss:      ;累加的值送到eax
004CDCDD      |>E8 96BBF3FF      call Unpacked.00409878               ;转换成10进制
004CDCE2      |.8B95 1CFFFFFF      mov edx,dword ptr ss:      ;真码第二组
004CDCE8      |.8B45 F4            mov eax,dword ptr ss:         ;假码第二组   
004CDCEB      |.E8 CC71F3FF      call Unpacked.00404EBC
004CDCF0      |.75 04            jnz short Unpacked.004CDCF6          ;跳了就OVER(爆破点2)
004CDCF2      |.C645 F3 01         mov byte ptr ss:,1            ;1送到
004CDCF6      |>33C0               xor eax,eax
004CDCF8      |.5A               pop edx
004CDCF9      |.59               pop ecx
004CDCFA      |.59               pop ecx
004CDCFB      |.64:8910            mov dword ptr fs:,edx
004CDCFE      |.68 28DD4C00      push Unpacked.004CDD28
004CDD03      |>8D85 1CFFFFFF      lea eax,dword ptr ss:
004CDD09      |.BA 02000000      mov edx,2
004CDD0E      |.E8 D16DF3FF      call Unpacked.00404AE4
004CDD13      |.8D45 F4            lea eax,dword ptr ss:
004CDD16      |.BA 03000000      mov edx,3
004CDD1B      |.E8 C46DF3FF      call Unpacked.00404AE4
004CDD20      \.C3               retn
004CDD21         .^ E9 0267F3FF      jmp Unpacked.00404428
004CDD26         .^ EB DB            jmp short Unpacked.004CDD03
004CDD28         .8A45 F3            mov al,byte ptr ss:         ;al=1
004CDD2B         .5E               pop esi
004CDD2C         .5B               pop ebx
004CDD2D         .8BE5               mov esp,ebp
004CDD2F         .5D               pop ebp
004CDD30         .C3               retn

【算法总结】

把机器码通过一番循环运算,得出两个字符串,即为注册码

计算过程,就让程序来完成吧!

注册机VB代码如下:

Private Sub Command1_Click()
Dim code As String
Dim reg1 As Long
Dim reg2 As Long
code = Text1.Text
X1 = &H55939
Y1 = &H5337446
X2 = &HC8649
Y2 = &H5337446
a = "-"
reg1 = 0
reg2 = 0
If Text1.Text <> "" Then
For i = 1 To Len(code)
reg1 = reg1 + Asc(Mid(code, i, 1)) * X1
reg1 = reg1 + Y1
Next i

For i = 1 To Len(code)
reg2 = reg2 + Asc(Mid(code, i, 1)) * X2
reg2 = reg2 + Y2
Next i

Text2.Text = reg1 & a & reg2
End If

End Sub

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

铁雪龙 发表于 2005-4-10 19:29:50

hao hao

好啊,不错啊

noTme 发表于 2005-4-10 21:06:20

连注册机都贴了,全!

yijun 发表于 2005-4-12 11:40:07

支持下~~~~~~~

shmily 发表于 2005-7-22 10:07:59

那么多好东西使劲学习吧

Iceman 发表于 2005-11-4 11:48:33

好好学习。

weiruan198 发表于 2006-8-5 22:40:11

正研究算法分析

微风拂面 发表于 2007-2-22 22:41:23

辛苦了!好好学习下

kunkun1987 发表于 2007-12-23 04:10:29

不大懂VB语言 有点困难

xiaoqiang527 发表于 2007-12-28 12:14:34

谢谢前辈了。

貌似我一个一个全收集了。呵呵
页: [1] 2 3
查看完整版本: [PYG]算法分析入门第六课