我1月21日发表在OCN上的速达破解 (7千字)
acrobatcn申请第二篇:速达3000pro-无狗解狗
软件名称:速达3000 pro
软件语言: 中文
软件类别: 共享版/财务软件
应用平台: Win9x/NT/2000/XP
限制类型:软件狗
难易程度:易
下载地质:http://www.superdata.com.cn/download1/index.asp
1.peid检查,无壳
2. w32dasm反汇编,结果不行,w32dasm死掉
3. 只能用trw了。
w32dasm在起始时就死了,不能正确的定位程序的起始,所以干脆不用了,直接bpio 378
结果转到了读狗的tdsd.vxd里,转晕了也看不明白,而且也不太容易出来,pret在0级模式用不了。所以干脆从程序的开始跟起,delphi的程序起始都一样,以如下开头:
0167:00401022 CALL `KERNEL32!GetModuleHandleA`
0167:00401027 MOV EDX,EAX
0167:00401029 CALL
009A534C
0167:0040102E POP EDX
0167:0040102F
CALL `CC3250MT!___CRTL_MEM_UseBorMM`
0167:00401034 CALL
009A5390
0167:00401039 PUSH BYTE +00
0167:0040103B
CALL 009A54C4
0167:00401040 POP ECX
0167:00401041 PUSH DWORD 009AED08
0167:00401046
PUSH BYTE +00
0167:00401048 CALL `KERNEL32!GetModuleHandleA`
0167:0040104D MOV [009AED67],EAX
0167:00401052
PUSH BYTE +00
0167:00401054 JMP CC3250MT!_Startup<----从这里跳到CC3250MT里,进入CC3250MT里后,经过一系列的初始,小心按F7,很快来到:
0167:3257DBE0 PUSH EAX
0167:3257DBE1 PUSH
EBX
0167:3257DBE2 PUSH BYTE +00
0167:3257DBE4
PUSH BYTE +00
0167:3257DBE6 CALL `KERNEL32!GetModuleHandleA`
0167:3257DBEB PUSH EAX
0167:3257DBEC CALL
NEAR [ESI+18]<---还不进入主程序的领空吗?快进吧!大家不要说我笨,按F11不就ok了吗?你试试吧!
0167:3257DBEF
ADD ESP,BYTE +10
0167:3257DBF2 PUSH
EAX
0167:3257DBF3 CALL `CC3250MT!_exit`<-----看见了吗?要exit了,所以前面的call是返回到主程序的。
..................................................................
进入了sd3000xp,如下很简单:
.....
0167:00401887 0F854D010000 JNZ
NEAR 004019DA (NO JUMP)1.<-----这里改为跳转就无nag,而且也无试用版字样,有点奇怪吧!我为什么要改它,因为它可以跳过nag窗口,而且如果你再去看看速达3000pro就知道了。
0167:0040188D C6051C3ABD0001 MOV BYTE [00BD3A1C],01
0167:00401894 E8D7305A00 CALL 009A4970<----读狗,tdsd.vxd
0167:00401899 84C0 TEST
AL,AL
0167:0040189B 740C JZ
004018A9
0167:0040189D C6051C3ABD0000 MOV
BYTE [00BD3A1C],00<-------注意,00BD3A1C标志位,在这里改,连狗都不用读了,就不会有试用版的字样,成了正式版,太简单了。
0167:004018A4 E9EA000000 JMP 00401993
0167:004018A9 66C78510FDFFFF14+MOV WORD [EBP+FFFFFD10],14
0167:004018B2 8D45F8 LEA
EAX,[EBP-08]
0167:004018B5 E882350000 CALL
00404E3C<---又读狗,烦
0167:004018BA FF851CFDFFFF INC
DWORD [EBP+FFFFFD1C]
0167:004018C0 E8D3DA3300
CALL `SD3000XP!@Dogtestpro@_ManCheckDlgDan$qqrv`<-----多简单,提示也太明显了吧!是否有狗
0167:004018C5 66C78510FDFFFF08+MOV WORD [EBP+FFFFFD10],08
0167:004018CE 66C78510FDFFFF20+MOV WORD [EBP+FFFFFD10],20
0167:004018D7 BAAFED9A00 MOV EDX,009AEDAF
0167:004018DC 8D45F4 LEA
EAX,[EBP-0C]
0167:004018DF E808405A00 CALL
009A58EC
0167:004018E4 FF851CFDFFFF INC
DWORD [EBP+FFFFFD1C]
0167:004018EA 8D55F4
LEA EDX,[EBP-0C]
0167:004018ED 8D45F8
LEA EAX,[EBP-08]
0167:004018F0 E86F435A00
CALL 009A5C64
0167:004018F5 50
PUSH EAX
0167:004018F6 FF8D1CFDFFFF
DEC DWORD [EBP+FFFFFD1C]
0167:004018FC 8D45F4
LEA EAX,[EBP-0C]
0167:004018FF
BA02000000 MOV EDX,02
0167:00401904
E877425A00 CALL 009A5B80
0167:00401909 59
POP ECX
0167:0040190A
84C9 TEST CL,CL
0167:0040190C
7412 JZ 00401920<---改为不跳,跳了就over了
0167:0040190E E875DC3300 CALL `SD3000XP!@Dogtestpro@_GoldenSoftCheckdlgDan$qqrv`<--进行狗的判断
0167:00401913 84C0 TEST
AL,AL<---返回al为判断值
0167:00401915 7460
JZ 00401977<---0就跳,改为不跳,让下面的一句自己对标志位赋值
0167:00401917
C6051C3ABD0000 MOV BYTE [00BD3A1C],00<-----呵呵,对标志位赋值0,正式版啊!
0167:0040191E EB57 JMP
SHORT 00401977<---跳
0167:00401920 66C78510FDFFFF2C+MOV
WORD [EBP+FFFFFD10],2C
0167:00401929 BAB1ED9A00
MOV EDX,009AEDB1
0167:0040192E 8D45F0
LEA EAX,[EBP-10]
0167:00401931 E8B63F5A00
CALL 009A58EC
0167:00401936 FF851CFDFFFF
INC DWORD [EBP+FFFFFD1C]
0167:0040193C 8D55F0
LEA EDX,[EBP-10]
0167:0040193F
8D45F8 LEA EAX,[EBP-08]
0167:00401942 E81D435A00 CALL 009A5C64
0167:00401947 50 PUSH
EAX
0167:00401948 FF8D1CFDFFFF DEC DWORD
[EBP+FFFFFD1C]
0167:0040194E 8D45F0 LEA
EAX,[EBP-10]
0167:00401951 BA02000000 MOV
EDX,02
0167:00401956 E825425A00 CALL
009A5B80
0167:0040195B 59
POP ECX
0167:0040195C 84C9
TEST CL,CL
0167:0040195E 7417
JZ 00401977
0167:00401960
33C0 XOR EAX,EAX
0167:00401962 E8158E0200 CALL 0042A77C
0167:00401967 84C0 TEST
AL,AL
0167:00401969 740C JZ
00401977
0167:0040196B E88CE03300 CALL
`SD3000XP!@Dogtestpro@WriteNewInfo$qqrv`
0167:00401970 C6051C3ABD0000
MOV BYTE [00BD3A1C],00
0167:00401977 FF8D1CFDFFFF
DEC DWORD [EBP+FFFFFD1C]
0167:0040197D 8D45F8
LEA EAX,[EBP-08]
0167:00401980
BA02000000 MOV EDX,02
0167:00401985
E8F6415A00 CALL 009A5B80
0167:0040198A 66C78510FDFFFF00+MOV
WORD [EBP+FFFFFD10],00
0167:00401993 803D1C3ABD0000 CMP
BYTE [00BD3A1C],00<----标志比较啊
0167:0040199A 743E
JZ 004019DA<-----根据上面的结果,呵呵,会跳的,跳过nag,好了,我们启动程序后,从帮助菜单力看看about,结果,呵呵,使用版三个字没有了吧!
0167:0040199C 66C78510FDFFFF38+MOV WORD [EBP+FFFFFD10],38
0167:004019A5 BAB3ED9A00 MOV EDX,009AEDB3
0167:004019AA 8D45EC LEA
EAX,[EBP-14]
0167:004019AD E83A3F5A00 CALL
009A58EC
0167:004019B2 FF851CFDFFFF INC
DWORD [EBP+FFFFFD1C]
0167:004019B8 8B00
MOV EAX,[EAX]
0167:004019BA 33C9
XOR ECX,ECX
0167:004019BC
8B1554329C00 MOV EDX,[009C3254]
0167:004019C2
E869B90200 CALL 0042D330<-------nag,窗口啊,kill
it!
0167:004019C7 FF8D1CFDFFFF DEC DWORD
[EBP+FFFFFD1C]
0167:004019CD 8D45EC LEA
EAX,[EBP-14]
0167:004019D0 BA02000000 MOV
EDX,02
0167:004019D5 E8A6415A00 CALL
009A5B80
0167:004019DA 66C78510FDFFFF44+MOV WORD
[EBP+FFFFFD10],44
0167:004019E3 8B0DB4C2BD00 MOV
ECX,[00BDC2B4]
0167:004019E9 8B09
MOV ECX,[ECX]
0167:004019EB B201
MOV DL,01
0167:004019ED A1CC05B200
MOV EAX,[00B205CC]
0167:004019F2 E8411A3800
CALL 00783438
0167:004019F7 8B15A838BD00
MOV EDX,[00BD38A8]
0167:004019FD 8902
MOV [EDX],EAX
0167:004019FF
A1A838BD00 MOV EAX,[00BD38A8]
0167:00401A04
8B00 MOV EAX,[EAX]
0167:00401A06 E857805A00 CALL `VCL50!@Forms@TCustomForm@Show$qqrv`
0167:00401A0B 8B15A838BD00 MOV EDX,[00BD38A8]
0167:00401A11 8B02 MOV
EAX,[EDX]
0167:00401A13 8B10
MOV EDX,[EAX]
0167:00401A15 FF9280000000
CALL NEAR [EDX+80]
0167:00401A1B 8B0DB4C2BD00 MOV
ECX,[00BDC2B4]
0167:00401A21 8B01
MOV EAX,[ECX]
0167:00401A23 E8627F5A00
CALL `VCL50!@Forms@TApplication@Initialize$qqrv`
0167:00401A28 B201 MOV
DL,01
0167:00401A2A A1F8B6BD00 MOV
EAX,[00BDB6F8]
