Periodic Table SE v3.55 (元素周期表3.55)破解手记
Cracked by WksWlj999@sohu.com
软件说明:
目前市场上最好的电子元素周期表(是作者主页上讲的@_#),功能多多,你想知道的有关某个元素的信息都可以在上面找到。更多说明参见其主页http://www.smisoftware.com/。
本人刚刚涉足加密与解密,水平有限,文中有不足之处还望各位大虾不吝指教!此文仅供初学者参考。
**************************************************
目 的:去除NAG和使用次数限制
下载地址:http://www.smisoftware.com/ftplib/ptab32.zip
破解工具:TRW2000 v1.23 For Win9X;RegMon
日 期:2002年7月6日
***************************************************
该程序有30天或60次试用限制,用RegMon检测注册表发现此软件在HKEY_CLASS_ROOT\PT350KeyInfo\下设有以下几个主键:
SmiBuildLevel ==>默认值为已使用的次数
SmiGoData ==>默认值为程序安装时的日期数据
当试用日期及次数全部过了时,你如果在NAG上点"Agree",程序会弹出"Order
Form"窗口请你订购,点"Cancel"后程序出现个对话框告诉你"你获得了额外的15天或15次的试用期";并建立3个主键:
SmiRunData
==>默认值为0 (表示在额外试用期)
SmiRunLevel
==>默认值为1 (表示在第一次额外试用期)
SmiRunType
==>默认值为可试用的总天数
当这个期限也过了时,次序又会弹出"Order Form"窗口请你订购,点"Cancel"后程序再次告诉你"你获得了额外的15天或15次的试用期",此时:
SmiRunData ==>默认值为0 (表示在额外试用期)
SmiRunLevel ==>默认值为2 (表示在第二次额外试用期)
SmiRunType ==>默认值为可试用的总天数
又过期后程序提醒你"我们已经给了你2次额外的试用期"然后,弹出"Order
Form"窗口请你汇款订购,然后退出。此时:
SmiRunData ==>默认值为1
(表示两次额外试用期均过了)
SmiRunLevel ==>默认值为2
SmiRunType ==>默认值为可试用的总天数
破解思路:跳过NAG窗口,并阻止程序改动注册表的SmiBuildLevel主键默认键值。
好了,用TRW2000加载主程序ptoe.exe,停在入口处,用F10大块跟踪......
017F:0044BD36 50 PUSH
EAX
017F:0044BD37 FF759C PUSH
DWORD [EBP-64]
017F:0044BD3A 56
PUSH ESI
017F:0044BD3B 56
PUSH ESI
017F:0044BD3C FF15C4834800
CALL `KERNEL32!GetModuleHandleA`
017F:0044BD42 50
PUSH EAX
017F:0044BD43
E8BFF10000 CALL 0045AF07 <==跳过就出现NAG窗口,F8跟进
017F:0044BD48 8945A0 MOV
[EBP-60],EAX
017F:0044BD4B 50
PUSH EAX
017F:0044BD4C E81A150000 CALL
0044D26B
017F:0044BD51 8B45EC MOV
EAX,[EBP-14]
017F:0044BD54 8B08
MOV ECX,[EAX]
来到这里...
017F:0045AF07
FF742410 PUSH DWORD [ESP+10]
017F:0045AF0B
FF742410 PUSH DWORD [ESP+10]
017F:0045AF0F
FF742410 PUSH DWORD [ESP+10]
017F:0045AF13
FF742410 PUSH DWORD [ESP+10]
017F:0045AF17
E8A2A60000 CALL 004655BE <==跳过就出现NAG窗口,F8跟进
017F:0045AF07 FF742410 PUSH DWORD
[ESP+10]
017F:0045AF0B FF742410 PUSH
DWORD [ESP+10]
017F:0045AF0F FF742410 PUSH
DWORD [ESP+10]
017F:0045AF13 FF742410 PUSH
DWORD [ESP+10]
017F:0045AF17 E8A2A60000 CALL
004655BE
017F:0045AF1C C21000 RET
10
来到这里,用F10继续跟...
017F:004655BE 53
PUSH EBX
017F:004655BF 56
PUSH ESI
017F:004655C0
57 PUSH EDI
017F:004655C1 83CBFF OR
EBX,BYTE -01
017F:004655C4 E818ECFFFF CALL
004641E1
......
017F:00435D79 8B17
MOV EDX,[EDI]
017F:00435D7B 8BCF
MOV ECX,EDI
017F:00435D7D
889C24E0040000 MOV [ESP+04E0],BL
017F:00435D84
FF92B8000000 CALL NEAR [EDX+B8] <==跟到这里,跳过就出现NAG窗口
017F:00435D8A 85FF TEST
EDI,EDI
017F:00435D8C 8BE8 MOV
EBP,EAX
017F:00435D8E 7409
JZ 00435D99
017F:00435D90 8B07
MOV EAX,[EDI]
017F:00435D92 6A01
PUSH BYTE +01
017F:00435D94
8BCF MOV ECX,EDI
017F:00435D96 FF5004 CALL
NEAR [EAX+04]
017F:00435D99 83FD02 CMP
EBP,BYTE +02 <==比较是否按了"Quit"按钮
017F:00435D9C
754E JNZ 00435DEC
<==不是"Quit",跳到运行主程序处;否则不跳,就over了
017F:00435D9E 8D4C241C
LEA ECX,[ESP+1C]
017F:00435DA2 C68424E004000008
MOV BYTE [ESP+04E0],08
017F:00435DAA E8ADC30200
CALL 0046215C
因此,把00435D84的Call去掉,直接跳到00435DEC运行主程序处即可跳过NAG窗口。
分析发现,NAG出现后按"Agree"后程序才会改动SmiBuildLevel主键,使其值加1,于是按"Agree"之前下断点BPX RegSetValuea,按下"Agree"后TRW2000中断,往上看会发现00413846处是关键:
017F:0041381B 51 PUSH
ECX
017F:0041381C 52
PUSH EDX
017F:0041381D 6814384A00 PUSH
DWORD 004A3814 <==[4A3814]="SmiBuildLevel"
017F:00413822
50 PUSH EAX
017F:00413823 C744241480000000 MOV DWORD [ESP+14],80
017F:0041382B FF150C804800 CALL `ADVAPI32!RegQueryValueA`
<==取SmiBuildLevel的值
017F:00413831 85C0
TEST EAX,EAX
017F:00413833 754B
JNZ 00413880
017F:00413835
8D4C2408 LEA ECX,[ESP+08]
017F:00413839 57 PUSH
EDI
017F:0041383A 51 PUSH
ECX
017F:0041383B E839630300 CALL
00449B79
017F:00413840 8D542410 LEA
EDX,[ESP+10]
017F:00413844 6A0A
PUSH BYTE +0A
017F:00413846 40
INC EAX <==就是这里把使用次数加1
017F:00413847 52 PUSH
EDX
017F:00413848 50
PUSH EAX
017F:00413849 C744241880000000 MOV
DWORD [ESP+18],80
017F:00413851 E877A20300 CALL
0044DACD
017F:00413856 8D7C241C LEA
EDI,[ESP+1C]
017F:0041385A 83C9FF
OR ECX,BYTE -01
017F:0041385D 33C0
XOR EAX,EAX
017F:0041385F
83C410 ADD ESP,BYTE +10
017F:00413862 F2AE REPNE SCASB
017F:00413864 F7D1 NOT
ECX
017F:00413866 49 DEC
ECX
017F:00413867 8D44240C LEA
EAX,[ESP+0C]
017F:0041386B 51
PUSH ECX
017F:0041386C 8B4C2408
MOV ECX,[ESP+08]
017F:00413870 50
PUSH EAX
017F:00413871 6A01
PUSH BYTE +01
017F:00413873
6814384A00 PUSH DWORD 004A3814
017F:00413878
51 PUSH ECX
017F:00413879 FF1508804800 CALL `ADVAPI32!RegSetValueA`
<==断在这里,把加过1的次数写回注册表
017F:0041387F 5F
POP EDI
017F:00413880 8B542400
MOV EDX,[ESP+00]
017F:00413884 52
PUSH EDX
017F:00413885
FF1504804800 CALL `ADVAPI32!RegCloseKey`
017F:0041388B
81C488000000 ADD ESP,88
017F:00413891 C3
RET
继续F12加F10若干次后发现回到了00435D8A处,可见NAG的产生和把加过1的次数写回注册表的程序代码都在
017F:00435D84 FF92B8000000 CALL NEAR [EDX+B8]这个Call里,因此只要把这里改为jmp
00435DEC直接跳到主程序运行处,即可一举两得,破除NAG和次数限制。下命令bpx 435D84,重新运行程序,中断在017F:00435D84处,下命令A
EIP,输入下列代码
jmp 00435DEC
nop
记下更改前后机器码变化,F5运行,不再有NAG出现,查看SmiBuildLevel键值,亦保持不变。
用16进制编辑器打开ptoe.exe查找"FF92B800000085EF"改为"E9630000009085EF"就OK了。
- 标 题:Periodic Table SE v3.55 (6千字)
- 作 者: WksWlj
- 时 间:2002-7-7 9:34:06
- 链 接:http://bbs.pediy.com