萧萧黄叶 发表于 2009-2-10 14:34

自动精灵2.0破解分析

这是一个以前破的软件,很简单的,高手勿笑。
【文章标题】自动精灵2.0破解
【软件名称】自动精灵2.0
【软件大小】705KB
【软件类别】国产软件/系统辅助
【软件授权】共享版
【软件语言】简体中文
【运行环境】NT/2000/XP
【更新时间】2004-12-15
【下载地址】http://www.newhua.com/soft/36951.htm
【破解作者】萧萧黄叶
【加壳方式】无
【使用工具】OllyICE,PEiD v0.94
【软件简介】
自动精灵是一款功能强大,精致美观,操作简便的计算机定时自动执行软件。她绝对是众多自动执行软件中最好的,出色的设计使您的操作更加简便,每一项功能都为您精心打造。她必将成为您的贴心助手。

主要功能:

◆定时关闭计算机

◆定时锁定计算机

◆定时重启

◆定时播放音乐 (可以设定播放列表、播放次数/播放时间)

◆定时提醒 (在指定时间提醒您该做某事了)

◆定时运行程序/打开文件/URL

定时选项可以设为指定时间执行或倒计时执行。
【详细过程】
第一步:探壳。
PEiD v0.94:Borland Delphi 6.0 - 7.0
无壳。
第二步:OD分析
OD载入后停在下面:
004EF5AC >/$55            PUSH EBP                                 ;程序载入后停在这里。
004EF5AD|.8BEC          MOV EBP,ESP
004EF5AF|.B9 05000000   MOV ECX,5

F9运行程序,进行注册,我的序列号是:789203629,先用假码123456789注册看看,提示注册失败:"注册码不正确!请核对一遍后重新输入!"
回到OD,查找超级字串,找到了提示内容,跟随到这里:
004ED620|. /EB 32         JMP SHORT AutoStar.004ED654
004ED622|> |6A 40         PUSH 40                                  ; /(initial cpu selection)
004ED624|. |68 98D64E00   PUSH AutoStar.004ED698                   ; |自动精灵
004ED629|. |68 28D74E00   PUSH AutoStar.004ED728                   ; |注册码不正确!请核对一遍后重新输入!

向上看看:
004ED4F9|.8B00          MOV EAX,DWORD PTR DS:
004ED4FB|.E8 B4E1FFFF   CALL AutoStar.004EB6B4                   ;关键CALL
004ED500|.84C0          TEST AL,AL
004ED502      0F84 1A010000 JE AutoStar.004ED622                     ;关键跳
004ED508|.6A 40         PUSH 40                                  ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
004ED50A|.68 98D64E00   PUSH AutoStar.004ED698                   ; |自动精灵
004ED50F|.68 C4D64E00   PUSH AutoStar.004ED6C4                   ; |注册成功!\r\r谢谢您的支持!


再向上,在004ED488处下断点,运行注册过程,程序被断在下面了:
004ED488/.55            PUSH EBP
004ED489|.8BEC          MOV EBP,ESP

向下F8单步:
004ED4A5|.8D55 FC       LEA EDX,DWORD PTR SS:
004ED4A8|.8B83 04030000 MOV EAX,DWORD PTR DS:
004ED4AE|.E8 15A1F7FF   CALL AutoStar.004675C8                   ;这里判断注册码是否为空!
004ED4B3|.837D FC 00    CMP DWORD PTR SS:,0
004ED4B7|.75 2A         JNZ SHORT AutoStar.004ED4E3
004ED4B9|.6A 40         PUSH 40                                  ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
004ED4BB|.68 98D64E00   PUSH AutoStar.004ED698                   ; |自动精灵
004ED4C0|.68 A4D64E00   PUSH AutoStar.004ED6A4                   ; |注册码不能为空!请重新输入!
004ED4C5|.E8 9A9AF1FF   CALL <JMP.&user32.GetActiveWindow>       ; |[GetActiveWindow

接着就到达关键CALL了,跟进:
004EB6B4/$55            PUSH EBP                                 ;从关键CALL跟进到这里。
004EB6B4/$55            PUSH EBP                                 ;从关键CALL跟进到这里。此时寄存器EDX已经出现注册假码。
004EB6B5|.8BEC          MOV EBP,ESP

继续F8单步:
004EB6D2|.8BC3          MOV EAX,EBX
004EB6D4|.E8 A3010000   CALL AutoStar.004EB87C                   ;这个CALL取得了程序的序列号。我的序列号为:789203629
004EB6D9|.8D4D F8       LEA ECX,DWORD PTR SS:
004EB6DC|.8B55 FC       MOV EDX,DWORD PTR SS:
004EB6DF|.8BC3          MOV EAX,EBX
004EB6E1|.E8 3E030000   CALL AutoStar.004EBA24                   ;这里对序列号进行了计算。跟进才行。
004EB6E6|.8B45 F8       MOV EAX,DWORD PTR SS:             ;经过上面的计算后寄存器中已经出现的正确的注册码,可以在下面的CALL处制作内存注册机。
004EB6E9|.E8 8E8FF1FF   CALL AutoStar.0040467C

跟进004EB6E1 CALL:
004EBA24/$55            PUSH EBP                                 ;跟进到此!
004EBA25|.8BEC          MOV EBP,ESP
004EBA27|.6A 00         PUSH 0

F8:
004EBA44|.8BC2          MOV EAX,EDX
004EBA46|.E8 C9D2F1FF   CALL AutoStar.00408D14
004EBA4B|.8BD8          MOV EBX,EAX                              ;上面的call将序列号转为十六进制,并放到EAX上,我的为2F0A4AAD。
004EBA4D|.8BC3          MOV EAX,EBX
004EBA4F|.B9 85000000   MOV ECX,85
004EBA54|.99            CDQ
004EBA55|.F7F9          IDIV ECX                                 ;2F0A4AAD整除H85等于005A8B25
004EBA57|.69C0 AB000000 IMUL EAX,EAX,0AB                         ;005A8B25乘HAB等于3C7AF1B7
004EBA5D|.35 FDC85C02   XOR EAX,25CC8FD                        ;3C7AF1B7与25CC8FD作异或运算等于3E26394A
004EBA62|.99            CDQ
004EBA63|.33C2          XOR EAX,EDX                              ;edx=0
004EBA65|.2BC2          SUB EAX,EDX
004EBA67|.05 68C4AC07   ADD EAX,7ACC468                        ;3E26394A加7ACC468等于45D2FDB2
004EBA6C|.8BD8          MOV EBX,EAX
004EBA6E|.8D55 F8       LEA EDX,DWORD PTR SS:
004EBA71|.8BC3          MOV EAX,EBX
004EBA73|.E8 60D1F1FF   CALL AutoStar.00408BD8                   ;将45D2FDB2转为十进制1171455410
004EBA78|.8D45 F4       LEA EAX,DWORD PTR SS:             ;下面取固定值。
004EBA7B|.BA 10BB4E00   MOV EDX,AutoStar.004EBB10                ;ASCII "734618529841"
004EBA80|.E8 CF87F1FF   CALL AutoStar.00404254
004EBA85|.8D45 FC       LEA EAX,DWORD PTR SS:
004EBA88|.E8 2F87F1FF   CALL AutoStar.004041BC
004EBA8D|.8B45 F4       MOV EAX,DWORD PTR SS:
004EBA90|.E8 E789F1FF   CALL AutoStar.0040447C                   ;计算固定值的位数,C
004EBA95|.8BD8          MOV EBX,EAX
004EBA97|.85DB          TEST EBX,EBX
004EBA99|.7E 3A         JLE SHORT AutoStar.004EBAD5
004EBA9B|.BE 01000000   MOV ESI,1
004EBAA0|>8D45 EC       /LEA EAX,DWORD PTR SS:
004EBAA3|.8B55 F4       |MOV EDX,DWORD PTR SS:
004EBAA6|.8A5432 FF   |MOV DL,BYTE PTR DS:
004EBAAA|.E8 F588F1FF   |CALL AutoStar.004043A4                  ;按序取固定值的每一位。
004EBAAF|.8B45 EC       |MOV EAX,DWORD PTR SS:
004EBAB2|.E8 5DD2F1FF   |CALL AutoStar.00408D14
004EBAB7|.8B55 F8       |MOV EDX,DWORD PTR SS:
004EBABA|.8A5402 FF   |MOV DL,BYTE PTR DS:
004EBABE|.8D45 F0       |LEA EAX,DWORD PTR SS:
004EBAC1|.E8 DE88F1FF   |CALL AutoStar.004043A4                  ;用上面提取出来的数对应刚才计算好的序列号的十进制值,我的固定值第一位为7,所以就取1171455410的第7位:5
004EBAC6|.8B55 F0       |MOV EDX,DWORD PTR SS:
004EBAC9|.8D45 FC       |LEA EAX,DWORD PTR SS:
004EBACC|.E8 B389F1FF   |CALL AutoStar.00404484
004EBAD1|.46            |INC ESI
004EBAD2|.4B            |DEC EBX
004EBAD3|.^ 75 CB         \JNZ SHORT AutoStar.004EBAA0             ;一共12位,进行12次的循环。
004EBAD5|>8BC7          MOV EAX,EDI
004EBAD7|.8B55 FC       MOV EDX,DWORD PTR SS:             ;堆栈中出现正确的注册码了。我的为571514411411
004EBADA|.E8 3187F1FF   CALL AutoStar.00404210

我们不是要爆破,所以怎么对比就不要看了。

总结一下:
算法过程就是先将序列号转换为十六进制
设序列号为TXT1
txt1=txt1 \ 133(h85)
txt1=txt1 *171(hab)
txt1=txt1 xor 39635197(h25CC8FD)
txt1=txt1 + 128762984(h7ACC468)
txt2="734618529841"
从txt2上按序取值再对照txt1取数字就组成正确的注册码了。
【总结】从软件安全的角度看,此软件一没有加壳,二为明码比较,三是算法简单。




【破解声明】本文只是出于教学目的,请勿用于商业用途,否则后果自负。软件版权归作者所有。

[ 本帖最后由 萧萧黄叶 于 2009-2-10 14:35 编辑 ]

xie83544109 发表于 2009-2-11 14:12

学习中
谢谢:lol

小马甲 发表于 2009-2-12 10:16

恩不错不错,有前途:handshake

a2213572 发表于 2009-2-12 11:05

自動關閉電腦的軟體.蠻有用的
感謝分享!

WAPJ8833341 发表于 2009-2-12 17:49

很不错呢,还有破文可以学习。
楼主辛苦咯

675550115 发表于 2009-2-19 21:45

我汗!!老是老必

lbmx8 发表于 2009-2-27 23:56

越简单越是宝。谢谢楼主!

hsuguowei 发表于 2009-3-1 11:24

学习了,新手,看不太懂!不过还是长见实了

kissmebbs 发表于 2009-3-2 19:41

感谢分享,谢谢。。。。

yncxhcd 发表于 2009-3-22 12:47

我支持你下 下载收藏
页: [1]
查看完整版本: 自动精灵2.0破解分析