Aye Shutdown 5.40
软件大小:596KB
软件语言:英文
软件类别:国外软件/共享版/开关定时
运行环境:Win9x/Me/NT/2000/XP
加入时间:2003-10-17 8:38:56
下载次数:246
软件介绍:
一个功能强大简单易用的自动关机工具,程序可以进行诸如自动注销,关机,重启,锁定等操作,最新版本去除了一些没有多大用处的功能,使其工作的更稳定,并增加了当软件启动时自动隐藏窗口的功能!
破解作者:acacia
破解目的:初学crack,本文仅为学习之用,无其他目的
软件保护:未注册的共享版限制试用日期为 30 天,注册后自动解除
破解环境:Windows 2000 professional + sp3
破解工具:FI, ASprStripper 2.03, W32Dasm10, Ollydbg 1.09c
破解感觉:软件的注册号需要通过网络注册获得。输入注册号之后,需要通过
网络验证(?这段代码没有仔细分析),干脆直接爆破,跳过验证即可。
破解过程:
1. 首先使用FI侦测主程序 ayetimer.exe ,发现是 ASPack v2.12 加壳;
ASPack v2.12 A.Solodovnikov .data ayetimer.exe ....131584 2003-10-13
2. 使用 ASprStripper 2.03 脱壳成功;
3. 再次使用FI侦测脱壳后的主程序 _ayetimer.exe ,发现是 VB 程序,无壳;
4. 使用 W32Dasm10 静态反汇编,保存反汇编的代码;
5. 运行原程序,随意填写注册名/注册号,程序提示为"Please check your register code...",
在反汇编代码中找到字符串引用的地方:
* Reference To: MSVBVM50.__vbaFreeObj, Ord:0000h
|
:00458265 E8FAB5FAFF Call 00403864
:0045826A E9C5000000 jmp 00458334
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00457C73(C)
|
:0045826F C745FC2E000000 mov [ebp-04], 0000002E
:00458276 66838D1CFFFFFFFF or word ptr [ebp+FFFFFF1C], FFFF
:0045827E 83A518FFFFFF00 and dword ptr [ebp+FFFFFF18], 00000000
* Possible StringData Ref from Code Obj ->"Fail to register!"
|
:00458285 C78548FFFFFF04BC4100 mov dword ptr [ebp+FFFFFF48], 0041BC04
:0045828F C78540FFFFFF08000000 mov dword ptr [ebp+FFFFFF40], 00000008
:00458299 6A0A push 0000000A
:0045829B 8D45A0 lea eax, dword ptr [ebp-60]
:0045829E 50 push eax
* Reference To: MSVBVM50.rtcVarBstrFromAnsi, Ord:0260h
|
:0045829F E822B7FAFF Call 004039C6
:004582A4 6A0D push 0000000D
:004582A6 8D4580 lea eax, dword ptr [ebp-80]
:004582A9 50 push eax
* Reference To: MSVBVM50.rtcVarBstrFromAnsi, Ord:0260h
|
:004582AA E817B7FAFF Call 004039C6
* Possible StringData Ref from Code Obj ->"Please check your register code "
->"and make sure your computer is "
->"connected to internet."
|
:004582AF C78538FFFFFF2CBC4100 mov dword ptr [ebp+FFFFFF38], 0041BC2C
:004582B9 C78530FFFFFF08000000 mov dword ptr [ebp+FFFFFF30], 00000008
:004582C3 8D851CFFFFFF lea eax, dword ptr [ebp+FFFFFF1C]
:004582C9 50 push eax
6. 可以看到错误分支是从 00457C73 跳转过来的,到相应代码处分析。
可以直接在错误跳转处00457C73进行爆破;也可以选择前面设置标志位
的地方爆破。但是,这两处爆破都是在网络访问之后进行的,不爽!我们
不要访问网络这么复杂吧!继续往前找...
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00457C2E(U)
|
:00457C37 FF75C0 push [ebp-40] //输入的注册码
:00457C3A FF75C4 push [ebp-3C] //网络获得的正确注册码?
* Reference To: MSVBVM50.__vbaStrCmp, Ord:0000h
|
:00457C3D E80ABCFAFF Call 0040384C
:00457C42 F7D8 neg eax //下面运算得到 ax (0-->FF; 非0-->0)
:00457C44 1BC0 sbb eax, eax
:00457C46 40 inc eax
:00457C47 F7D8 neg eax //mov ax, 0FFFF (66B8FFFF)
:00457C49 66898504FFFFFF mov word ptr [ebp+FFFFFF04], ax //设置标志;可选爆破点1: 上面直接赋值 ax = FFFF
:00457C50 8D4DC0 lea ecx, dword ptr [ebp-40]
* Reference To: MSVBVM50.__vbaFreeStr, Ord:0000h
|
:00457C53 E860BCFAFF Call 004038B8
:00457C58 8D45B0 lea eax, dword ptr [ebp-50]
:00457C5B 50 push eax
:00457C5C 8D45B4 lea eax, dword ptr [ebp-4C]
:00457C5F 50 push eax
:00457C60 6A02 push 00000002
* Reference To: MSVBVM50.__vbaFreeObjList, Ord:0000h
|
:00457C62 E827BCFAFF Call 0040388E
:00457C67 83C40C add esp, 0000000C
:00457C6A 0FBF8504FFFFFF movsx eax, word ptr [ebp+FFFFFF04]
:00457C71 85C0 test eax, eax
:00457C73 0F84F6050000 je 0045826F //跳转到错误;可选爆破点2: NOP
:00457C79 C745FC1D000000 mov [ebp-04], 0000001D //注册成功后执行的代码
:00457C80 FF75C8 push [ebp-38]
* Reference To: MSVBVM50.__vbaLenBstr, Ord:0000h
|
:00457C83 E810BBFAFF Call 00403798
:00457C88 50 push eax
:00457C89 FF75C8 push [ebp-38]
:00457C8C 8D45C0 lea eax, dword ptr [ebp-40]
:00457C8F 50 push eax
7. 前面有关输入注册名和注册码的提示。当注册名和注册码都输入时,程序转入
注册码判定。嘿嘿,就这里吧! 00457460 处的跳转,直接跳到注册成功吧,
改成 je 00457C79 ,ok!
* Reference To: MSVBVM50.__vbaFreeObjList, Ord:0000h
|
:0045744F E83AC4FAFF Call 0040388E
:00457454 83C40C add esp, 0000000C
:00457457 0FBF8504FFFFFF movsx eax, word ptr [ebp+FFFFFF04]
:0045745E 85C0 test eax, eax
:00457460 0F8436010000 je 0045759C //可选爆破点0: 直接跳转到注册成功的代码 je 00457C79 (1308)
:00457466 C745FC0B000000 mov [ebp-04], 0000000B
:0045746D 66838D1CFFFFFFFF or word ptr [ebp+FFFFFF1C], FFFF
:00457475 83A518FFFFFF00 and dword ptr [ebp+FFFFFF18], 00000000
* Possible StringData Ref from Code Obj ->"Please Enter Register Code!"
|
:0045747C C78548FFFFFFCCB94100 mov dword ptr [ebp+FFFFFF48], 0041B9CC
:00457486 C78540FFFFFF08000000 mov dword ptr [ebp+FFFFFF40], 00000008
:00457490 8D9540FFFFFF lea edx, dword ptr [ebp+FFFFFF40]
:00457496 8D4DA0 lea ecx, dword ptr [ebp-60]
整理总结:
1. 直接爆破 00457460 处的跳转,程序即可注册成功(任意输入);
2. 在注册成功的代码(00457C79之后)中,可以跟踪到三个文件建立(代码较简单,
但比较长,不再列出了):
A. 操作系统目录(WINNT)
winsysb.dll --- 注册成功之后建立此文件,内容无意义
B. 操作系统目录(WINNT/SYSTEM32)
winsysa.dll --- 注册成功之后建立此文件,内容无意义
C. 本地目录
uvt.dll -- 注册成功之后建立此文件,保存注册名
这三个文件的存在与否(内容都无意义),直接用于判定是否成功注册。
所以,在未爆破的版本下,可以直接创建这三个文件,程序重起即认为已注册!
另外,程序还在初运行时创建两个文件:
A. 操作系统目录(WINNT)
aycea.dll --- 纪录第一次使用的时间,用于判断是否超过试用期
B. 操作系统目录(WINNT/SYSTEM32)
atcra.dll --- 纪录第一次使用的时间,用于判断是否超过试用期
嘿嘿,有了前面的三个文件,这两个没人关心了吧~~
by acacia
2003-10-21