好友
阅读权限40
听众
最后登录1970-1-1
|
萧萧黄叶
发表于 2009-2-10 14:34
这是一个以前破的软件,很简单的,高手勿笑。
【文章标题】自动精灵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:[EAX]
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:[EBP-4]
004ED4A8 |. 8B83 04030000 MOV EAX,DWORD PTR DS:[EBX+304]
004ED4AE |. E8 15A1F7FF CALL AutoStar.004675C8 ; 这里判断注册码是否为空!
004ED4B3 |. 837D FC 00 CMP DWORD PTR SS:[EBP-4],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:[EBP-8]
004EB6DC |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
004EB6DF |. 8BC3 MOV EAX,EBX
004EB6E1 |. E8 3E030000 CALL AutoStar.004EBA24 ; 这里对序列号进行了计算。跟进才行。
004EB6E6 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ; 经过上面的计算后寄存器中已经出现的正确的注册码,可以在下面的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:[EBP-8]
004EBA71 |. 8BC3 MOV EAX,EBX
004EBA73 |. E8 60D1F1FF CALL AutoStar.00408BD8 ; 将45D2FDB2转为十进制1171455410
004EBA78 |. 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C] ; 下面取固定值。
004EBA7B |. BA 10BB4E00 MOV EDX,AutoStar.004EBB10 ; ASCII "734618529841"
004EBA80 |. E8 CF87F1FF CALL AutoStar.00404254
004EBA85 |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
004EBA88 |. E8 2F87F1FF CALL AutoStar.004041BC
004EBA8D |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
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:[EBP-14]
004EBAA3 |. 8B55 F4 |MOV EDX,DWORD PTR SS:[EBP-C]
004EBAA6 |. 8A5432 FF |MOV DL,BYTE PTR DS:[EDX+ESI-1]
004EBAAA |. E8 F588F1FF |CALL AutoStar.004043A4 ; 按序取固定值的每一位。
004EBAAF |. 8B45 EC |MOV EAX,DWORD PTR SS:[EBP-14]
004EBAB2 |. E8 5DD2F1FF |CALL AutoStar.00408D14
004EBAB7 |. 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8]
004EBABA |. 8A5402 FF |MOV DL,BYTE PTR DS:[EDX+EAX-1]
004EBABE |. 8D45 F0 |LEA EAX,DWORD PTR SS:[EBP-10]
004EBAC1 |. E8 DE88F1FF |CALL AutoStar.004043A4 ; 用上面提取出来的数对应刚才计算好的序列号的十进制值,我的固定值第一位为7,所以就取1171455410的第7位:5
004EBAC6 |. 8B55 F0 |MOV EDX,DWORD PTR SS:[EBP-10]
004EBAC9 |. 8D45 FC |LEA EAX,DWORD PTR SS:[EBP-4]
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:[EBP-4] ; 堆栈中出现正确的注册码了。我的为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 编辑 ] |
免费评分
-
查看全部评分
|