2010年5月7日 星期五

速達3000PRO加密狗軟體學習

我寫這篇文章是以技術交流為主,希望論壇的前輩多多指點。
看過XIAQIN[CCG]的文章後,想找個速達3000PRO加密狗軟體學習一下。恰好我有個朋友是其地區級的代理商,我去找到他給我了一張試用光碟,一看上面什麼軟體都有,於是決定試試。 下面談談我的學習程序。
這是小弟第六次學習加密狗的軟體,水準有限。不足之處,請各位大俠指點。
軟體簡介:《速達3000 PRO》軟體是非常著名的進銷存財務軟體。
破解工具:
Trw2000
SuperBPM
WINHEX
OFFCAL
在沒有安裝加密狗之前,在啟動軟體時會彈出「未檢測到本軟體使用的軟體狗,本軟體將工作試驗版狀態」對話視窗。在軟體的啟動畫面中醒目的有紅色「試用版」三個字。就進入了「選項公司帳套」。在進入軟體後。在 「關於速達3000 PRO」中同樣有紅色「試用版」三個字。
該軟體靜態分析時列機(用的W32Dasm),IDA又太慢,所以只好直接動態分析了。經過仔細跟蹤來到CC3250.EXE的領空,繼續單步跟蹤,一路上有很多的花指令,但用點技巧也是很容易走出來的。直到:
0167:3257DBEB PUSH EAX
0167:3257DBEC CALL NEAR [ESI+18] //F10走過時彈出對話視窗,F8進入
0167:3257DBEF ADD ESP,BYTE +10
0167:3257DBF2 PUSH EAX
0167:3257DBF3 CALL `CC3250MT!_exit`
0167:3257DBF8 POP ECX
0167:3257DBF9 JMP SHORT 3257DC1C
0167:3257DBFB MOV EDX,[325AD400]
0167:3257DC01 PUSH EDX
0167:3257DC02 MOV ECX,[325AD3FC]
從3257DBEC進入後來到:
.
.
.
0167:00401859 XOR EAX,EAX
0167:0040185B MOV EDX,[EBP-38]
0167:0040185E MOV [FS:00],EDX
0167:00401865 JMP 00401C52
0167:0040186A MOV BYTE [00B25934],00
0167:00401871 CMP BYTE [00B25934],00
0167:00401878 JNZ NEAR 004019A1
0167:0040187E MOV BYTE [00B25934],01
0167:00401885 CALL 00939944
0167:0040188A TEST AL,AL
0167:0040188C JZ 0040189A
0167:0040188E MOV BYTE [00B25934],00
0167:00401895 JMP 00401963
0167:0040189A MOV WORD [EBP-28],14
0167:004018A0 LEA EAX,[EBP-08]
0167:004018A3 CALL 00401C5C
0167:004018A8 INC DWORD [EBP-1C]
0167:004018AB CALL `SD3000PRO!@Dogtestpro@_ManCheckDlgDan$qqrv` //DOG
0167:004018B0 MOV WORD [EBP-28],08
0167:004018B6 MOV WORD [EBP-28],20
0167:004018BC MOV EDX,00942C1F
0167:004018C1 LEA EAX,[EBP-0C]
0167:004018C4 CALL 00939C34
0167:004018C9 INC DWORD [EBP-1C]
0167:004018CC LEA EDX,[EBP-0C]
0167:004018CF LEA EAX,[EBP-08]
0167:004018D2 CALL 00939FAC
0167:004018D7 PUSH EAX
0167:004018D8 DEC DWORD [EBP-1C]
0167:004018DB LEA EAX,[EBP-0C]
0167:004018DE MOV EDX,02
0167:004018E3 CALL 00939EC8
0167:004018E8 POP ECX
0167:004018E9 TEST CL,CL
0167:004018EB JZ 004018FF
0167:004018ED CALL `SD3000PRO!@Dogtestpro@_GoldenSoftCheckdlgDan$qqrv`
0167:004018F2 TEST AL,AL
0167:004018F4 JZ 0040194D
0167:004018F6 MOV BYTE [00B25934],00
.
.
.
0167:00401932 TEST CL,CL
0167:00401934 JZ 0040194D
0167:00401936 XOR EAX,EAX
0167:00401938 CALL 00427814
0167:0040193D TEST AL,AL
0167:0040193F JZ 0040194D
0167:00401941 CALL `SD3000PRO!@Dogtestpro@WriteNewInfo$qqrv` //DOG
0167:00401946 MOV BYTE [00B25934],00
0167:0040194D DEC DWORD [EBP-1C]
0167:00401950 LEA EAX,[EBP-08]
0167:00401953 MOV EDX,02
0167:00401958 CALL 00939EC8
0167:0040195D MOV WORD [EBP-28],00
0167:00401963 CMP BYTE [00B25934],00
0167:0040196A JZ 004019A1
0167:0040196C MOV WORD [EBP-28],38
0167:00401972 MOV EDX,00942C23
.
.
.
從上面我們很容易發現[00b25934]的多次出現,且鞭後都跟有
比較指令,實際上[00b25934]值是0時表示有狗。我們看看是哪
個地方改變了[00b25934]的值。我們下斷點監看到的寫操作。
等攔斷後來到:
0167:00401871 CMP BYTE [00B25934],00
0167:00401878 JNZ NEAR 004019A1 //此處如果讓它直接跳走,即成為正式版了
0167:0040187E MOV BYTE [00B25934],01 //如果上面沒有跳走,這裡把01改成00也能成為正式版
0167:00401885 CALL 00939944
0167:0040188A TEST AL,AL
0167:0040188C JZ 0040189A
0167:0040188E MOV BYTE [00B25934],00
0167:00401895 JMP 00401963
0167:0040189A MOV WORD [EBP-28],14
0167:004018A0 LEA EAX,[EBP-08]
0167:004018A3 CALL 00401C5C
0167:004018A8 INC DWORD [EBP-1C]
0167:004018AB CALL `SD3000PRO!@Dogtestpro@_ManCheckDlgDan$qqrv`
0167:004018B0 MOV WORD [EBP-28],08
0167:004018B6 MOV WORD [EBP-28],20
0167:004018BC MOV EDX,00942C1F
0167:004018C1 LEA EAX,[EBP-0C]
0167:004018C4 CALL 00939C34
0167:004018C9 INC DWORD [EBP-1C]
0167:004018CC LEA EDX,[EBP-0C]
0167:004018CF LEA EAX,[EBP-08]
0167:004018D2 CALL 00939FAC
0167:004018D7 PUSH EAX
0167:004018D8 DEC DWORD [EBP-1C]
0167:004018DB LEA EAX,[EBP-0C]
0167:004018DE MOV EDX,02
0167:004018E3 CALL 00939EC8
0167:004018E8 POP ECX
0167:004018E9 TEST CL,CL
0167:004018EB JZ 004018FF
0167:004018ED CALL `SD3000PRO!@Dogtestpro@_GoldenSoftCheckdlgDan$qqrv`
0167:004018F2 TEST AL,AL
0167:004018F4 JZ 0040194D
0167:004018F6 MOV BYTE [00B25934],00
0167:004018FD JMP SHORT 0040194D
0167:004018FF MOV WORD [EBP-28],2C
0167:00401905 MOV EDX,00942C21
可見,改這個軟體只需一個字元,而且測試三次的結算限制也沒了。下一篇我想寫寫SD-ERP網路版丟狗方法
和某著名工程預算軟體的丟狗方法。在下水準有限,想和各位打狗高手及
PJ界的前輩學習一下,不知有人願意否,如有請留言,我會及時和你聯繫!
-------青石
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]

沒有留言:

張貼留言