?? cracker_h5.txt
字號:
提高篇(5)
大家好!我是Ru Feng,今天我又找到了一個(gè)很好的VB數(shù)據(jù)控件,一用之下,
沒得說的,極品之中的極品,它就是APEX True DBGrid Pro 6.0b,安裝完成后,一看
它竟然要注冊,開始以為只是一般的軟件,但細(xì)心一看,才發(fā)現(xiàn)這個(gè)軟件的加密又
是一絕,剛好最近寫提高篇沒有題材,所以就認(rèn)真地對它的程式進(jìn)行分析,發(fā)現(xiàn)這個(gè)
軟件有個(gè)特別的地方,就是它是由機(jī)器產(chǎn)生一個(gè)number(隨機(jī)的),每次運(yùn)行都不同,
然后你輸入你的注冊碼去,經(jīng)過運(yùn)算后,再與它比較,正確就注冊,所以就是說,
只要你沒有把程式分析得很清楚,寫出注冊機(jī),那么你就別想注冊這個(gè)軟件了,我
試過強(qiáng)行注冊,沒有成功,所以最后決定為它寫注冊機(jī)。
好了,既然要寫注冊機(jī)了,就要把程式分析得很清楚,所以以下的程式各位可不要
覺得太麻了,這個(gè)軟件就是這么麻的了,好的東西很多時(shí)都是要付出代價(jià)才能得到的。
首先隨便輸入注冊碼后,程序中斷后向上跳回主程式:
0137:004020E1 XOR EBX,EBX
0137:004020E3 POP ECX
0137:004020E4 XOR EAX,EAX
0137:004020E6 LEA EDI,[EBP-7B]
0137:004020E9 MOV [EBP-7C],BL
0137:004020EC PUSH DWORD PTR [ESI+000000F8]
0137:004020F2 MOV [EBP-1A],BL
0137:004020F5 REPZ STOSD
0137:004020F7 STOSB
0137:004020F8 LEA EAX,[EBP-7C]
0137:004020FB MOV [EBP-1C],BL
0137:004020FE PUSH EAX
0137:004020FF MOV [EBP-19],BL
0137:00402102 MOV [EBP-1B],BL
0137:00402105 MOV [EBP-1D],BL
0137:00402108 MOV [EBP-11],BL
0137:0040210B CALL 004035D0
0137:00402110 LEA EAX,[EBP-7C]
0137:00402113 PUSH EAX
0137:00402114 CALL 004036F0
0137:00402119 ADD ESP,0C
0137:0040211C CMP EAX,16 注冊碼長度
0137:0040211F JNZ 004026AF
0137:00402125 MOVSX EAX,BYTE PTR [EBP-6F]
0137:00402129 PUSH EAX
0137:0040212A CALL 0040417A
0137:0040212F CMP EAX,45
0137:00402132 POP ECX
0137:00402133 JZ 0040213F
0137:00402135 CMP BYTE PTR [EBP-6F],2D 注冊碼的格式
0137:00402139 JNZ 004026AF
0137:0040213F XOR EAX,EAX
0137:00402141 LEA EDI,[EBP-43]
0137:00402144 MOV [EBP-44],BL
0137:00402147 PUSH 05
0137:00402149 STOSD
0137:0040214A STOSD
0137:0040214B STOSB
0137:0040214C LEA EAX,[EBP-7C]
0137:0040214F PUSH EAX
0137:00402150 LEA EAX,[EBP-44]
0137:00402153 PUSH EAX
0137:00402154 CALL 00403770
0137:00402159 ADD ESP,0C
0137:0040215C LEA EAX,[EBP-18]
0137:0040215F MOV ECX,ESI
0137:00402161 PUSH EAX
0137:00402162 CALL 004028A2
0137:00402167 LEA EAX,[EBP-44]
0137:0040216A PUSH 00420E5C
0137:0040216F PUSH EAX
0137:00402170 MOV DWORD PTR [EBP-04],00000001
0137:00402177 CALL 00404770 注冊碼版本檢查
0137:0040217C POP ECX
0137:0040217D TEST EAX,EAX
0137:0040217F POP ECX
0137:00402180 JNZ 00402199
0137:00402182 PUSH 00420E48
0137:00402187 PUSH DWORD PTR [EBP-18]
0137:0040218A CALL 00404770 注冊碼版本檢查
0137:0040218F POP ECX
0137:00402190 TEST EAX,EAX
0137:00402192 POP ECX
0137:00402193 JNZ 00402199
0137:00402195 MOV BYTE PTR [EBP-1A],01
0137:00402199 LEA EAX,[EBP-44]
0137:0040219C PUSH 00420E40
0137:004021A1 PUSH EAX
0137:004021A2 CALL 00404770 注冊碼版本檢查
0137:004021A7 POP ECX
0137:004021A8 TEST EAX,EAX
0137:004021AA POP ECX
0137:004021AB JNZ 004021C4
0137:004021AD PUSH 00420E2C
0137:004021B2 PUSH DWORD PTR [EBP-18]
0137:004021B5 CALL 00404770 注冊碼版本檢查
0137:004021BA POP ECX
0137:004021BB TEST EAX,EAX
0137:004021BD POP ECX
0137:004021BE JNZ 004021C4
0137:004021C0 MOV BYTE PTR [EBP-1C],01
0137:004021C4 LEA EAX,[EBP-44]
0137:004021C7 PUSH 00420E24
0137:004021CC PUSH EAX
0137:004021CD CALL 00404770 注冊碼版本檢查
0137:004021D2 POP ECX
0137:004021D3 TEST EAX,EAX
0137:004021D5 POP ECX
0137:004021D6 JNZ 004021EF
0137:004021D8 PUSH 00420E10
0137:004021DD PUSH DWORD PTR [EBP-18]
0137:004021E0 CALL 00404770 注冊碼版本檢查
0137:004021E5 POP ECX
0137:004021E6 TEST EAX,EAX
0137:004021E8 POP ECX
0137:004021E9 JNZ 004021EF
0137:004021EB MOV BYTE PTR [EBP-19],01
0137:004021EF LEA EAX,[EBP-44]
0137:004021F2 PUSH 00420E08
0137:004021F7 PUSH EAX
0137:004021F8 CALL 00404770 注冊碼版本檢查
0137:004021FD POP ECX
0137:004021FE TEST EAX,EAX
0137:00402200 POP ECX
0137:00402201 JNZ 0040221A
0137:00402203 PUSH 00420DF4
0137:00402208 PUSH DWORD PTR [EBP-18]
0137:0040220B CALL 00404770 注冊碼版本檢查
0137:00402210 POP ECX
0137:00402211 TEST EAX,EAX
0137:00402213 POP ECX
0137:00402214 JNZ 0040221A
0137:00402216 MOV BYTE PTR [EBP-1B],01
0137:0040221A LEA EAX,[EBP-44]
0137:0040221D PUSH 00420DEC
0137:00402222 PUSH EAX
0137:00402223 CALL 00404770 注冊碼版本檢查
0137:00402228 POP ECX
0137:00402229 TEST EAX,EAX
0137:0040222B POP ECX
0137:0040222C JNZ 00402245
0137:0040222E PUSH 00420DC8
0137:00402233 PUSH DWORD PTR [EBP-18]
0137:00402236 CALL 00404770 注冊碼版本檢查
0137:0040223B POP ECX
0137:0040223C TEST EAX,EAX
0137:0040223E POP ECX
0137:0040223F JNZ 00402245
0137:00402241 MOV BYTE PTR [EBP-1D],01
0137:00402245 LEA EAX,[EBP-44]
0137:00402248 PUSH 00420DC0
0137:0040224D PUSH EAX
0137:0040224E CALL 00404770 注冊碼版本檢查
0137:00402253 POP ECX
0137:00402254 TEST EAX,EAX
0137:00402256 POP ECX
0137:00402257 JNZ 00402270
0137:00402259 PUSH 00420DAC
0137:0040225E PUSH DWORD PTR [EBP-18]
0137:00402261 CALL 00404770 注冊碼版本檢查
0137:00402266 POP ECX
0137:00402267 TEST EAX,EAX
0137:00402269 POP ECX
0137:0040226A JNZ 00402270
0137:0040226C MOV BYTE PTR [EBP-11],01
0137:00402270 CMP [EBP-1A],BL
0137:00402273 JNZ 004022A0
0137:00402275 CMP [EBP-1C],BL
0137:00402278 JNZ 004022A0
0137:0040227A CMP [EBP-19],BL
0137:0040227D JNZ 004022A0
0137:0040227F CMP [EBP-1B],BL
0137:00402282 JNZ 004022A0
0137:00402284 CMP [EBP-1D],BL
0137:00402287 JNZ 004022A0
0137:00402289 CMP [EBP-11],BL
0137:0040228C JNZ 004022A0
0137:0040228E PUSH EBX
0137:0040228F PUSH 10
0137:00402291 PUSH 00420D70
0137:00402296 CALL 00415C1F 出錯(cuò)窗口
0137:0040229B JMP 004026A1
0137:004022A0 MOVSX EAX,BYTE PTR [EBP-6F]
好了大家見到了出錯(cuò)窗口的call了,向上一望,從0137:00402270到0137:0040228C這
段程式中有6個(gè)jnz都可以跳過去的,那么只要讓它們跳,就可以了,所以這時(shí)第一時(shí)間
就是找出它們?yōu)槭裁床惶脑颍鼈兲臈l件是它們其中一個(gè)與BL不等。
再次執(zhí)行,又可以發(fā)現(xiàn)程式在下面跳了:
0137:00402114 CALL 004036F0
0137:00402119 ADD ESP,0C
0137:0040211C CMP EAX,16
0137:0040211F JNZ 004026AF 跳了
一分析call 004036f0的功能,原來是計(jì)算注冊碼的個(gè)數(shù),正確應(yīng)為22個(gè),于是輸入了22個(gè)
注冊碼再次執(zhí)行,程式又在下面跳了:
0137:00402135 CMP BYTE PTR [EBP-6F],2D
0137:00402139 JNZ 004026AF
下d ss:ebp-6f可知注冊碼的形式為?????????????-????????
再次輸入注冊碼后,慢慢分析下去,我們先來到
0137:00402177 CALL 00404770
0137:0040217C POP ECX
0137:0040217D TEST EAX,EAX
0137:0040217F POP ECX
0137:00402180 JNZ 00402199
0137:00402182 PUSH 00420E48
0137:00402187 PUSH DWORD PTR [EBP-18]
0137:0040218A CALL 00404770
0137:0040218F POP ECX
0137:00402190 TEST EAX,EAX
0137:00402192 POP ECX
0137:00402193 JNZ 00402199
0137:00402195 MOV BYTE PTR [EBP-1A],01
見到了嗎!0137:00402195語句可以令[ebp-1a]為01,那么后面不就可以令0137:00402273
語句跳了嗎!但好快發(fā)現(xiàn)在0137:00402180就跳過去了,所以CALL00404770一定有問題,
進(jìn)去看一看,有什么古怪。
:CALL 00404770
0137:00404770 PUSH EBP
0137:00404771 MOV EBP,ESP
0137:00404773 PUSH EDI
0137:00404774 PUSH ESI
0137:00404775 PUSH EBX
0137:00404776 MOV ESI,[EBP+0C] 下d ds:esi
0137:00404779 MOV EDI,[EBP+08] 下d ds:edi
0137:0040477C LEA EAX,[00426A28]
0137:00404782 CMP DWORD PTR [EAX+08],00
0137:00404786 JNZ 004047C3
0137:00404788 MOV AL,FF
0137:0040478A MOV EDI,EDI
0137:0040478C OR AL,AL
0137:0040478E JZ 004047BE
0137:00404790 MOV AL,[ESI]
0137:00404792 INC ESI
0137:00404793 MOV AH,[EDI]
0137:00404795 INC EDI
0137:00404796 CMP AH,AL
0137:00404798 JZ 0040478C
0137:0040479A SUB AL,41
0137:0040479C CMP AL,1A
0137:0040479E SBB CL,CL
0137:004047A0 AND CL,20
0137:004047A3 ADD AL,CL
0137:004047A5 ADD AL,41
0137:004047A7 XCHG AH,AL
0137:004047A9 SUB AL,41
0137:004047AB CMP AL,1A
0137:004047AD SBB CL,CL
0137:004047AF AND CL,20
0137:004047B2 ADD AL,CL
0137:004047B4 ADD AL,41
0137:004047B6 CMP AL,AH
0137:004047B8 JZ 0040478C
0137:004047BA SBB AL,AL
0137:004047BC SBB AL,FF
0137:004047BE MOVSX EAX,AL
0137:004047C1 JMP 0040483B
0137:004047C3 LOCK INC DWORD PTR [00427D8C]
0137:004047CA CMP DWORD PTR [00427D88],00
0137:004047D1 JG 004047D7
0137:004047D3 PUSH 00
0137:004047D5 JMP 004047EC
0137:004047D7 LOCK DEC DWORD PTR [00427D8C]
0137:004047DE PUSH 13
0137:004047E0 CALL 00406A0C
0137:004047E5 MOV DWORD PTR [ESP],00000001
0137:004047EC MOV EAX,000000FF
0137:004047F1 XOR EBX,EBX
0137:004047F3 NOP
0137:004047F4 OR AL,AL
0137:004047F6 JZ 0040481F
0137:004047F8 MOV AL,[ESI]
0137:004047FA INC ESI
0137:004047FB MOV BL,[EDI]
0137:004047FD INC EDI
0137:004047FE CMP AL,BL
0137:00404800 JZ 004047F4
0137:00404802 PUSH EAX
0137:00404803 PUSH EBX
0137:00404804 CALL 00406A82
0137:00404809 MOV EBX,EAX
0137:0040480B ADD ESP,04
0137:0040480E CALL 00406A82
0137:00404813 ADD ESP,04
0137:00404816 CMP BL,AL
0137:00404818 JZ 004047F4
0137:0040481A SBB EAX,EAX
0137:0040481C SBB EAX,-01
0137:0040481F MOV EBX,EAX
0137:00404821 POP EAX
0137:00404822 OR EAX,EAX
0137:00404824 JNZ 0040482F
0137:00404826 LOCK DEC DWORD PTR [00427D8C]
0137:0040482D JMP 00404839
0137:0040482F PUSH 13
0137:00404831 CALL 00406A6D
0137:00404836 ADD ESP,04
0137:00404839 MOV EAX,EBX
0137:0040483B POP EBX
0137:0040483C POP ESI
0137:0040483D POP EDI
0137:0040483E LEAVE
0137:0040483F RET
從0137:00404776和0137:00404779兩句我們可以見到它是用我們的注冊碼的前五位和
TDBG5進(jìn)行比較,如果不等,就令eax不為0,一出去就跳了,所以我猜測注冊碼的
前五位是TDBG5。
所以我把注冊碼改為TDBG5????????-????????,再調(diào)試下去,終于可以過了
0137:00402180 JNZ 00402199
但一到了
0137:00402193 JNZ 00402199
程式又跳了,所以又進(jìn)入了0137:0040218A CALL 00404770分析,見到程式用
TrueDBGrid Pro 6.0和TrueDBGrid Pro 5.0進(jìn)行比較,由于不等,所以跳了,那來的
TrueDBGrid Pro 6.0呢?回注冊窗口一看,哦原來如此,這時(shí)是檢查軟件的版本。
好了,先不管這么多了,用TDBG5????????-????????為注冊碼,一步一步地分析
下去再說,經(jīng)過一輪的分析,終于弄清了每個(gè)call的作用。
以下是各個(gè)版本對應(yīng)的注冊碼形式:
TrueDBGrid Pro 5.0 TDBG5????????-????????
TrueDBGrid Pro 6.0 TDBG6????????-????????
TrueDBList Pro 5.0 TDBL5????????-???????? 或 TDBW5????????-????????
TrueDBWizard 5.0 TDBS5????????-????????
TrueDBList Pro 6.0 TDBL6????????-????????
好了,注冊形式終于找到了,由上面可知,這個(gè)公司可能認(rèn)為它的軟件的加密夠強(qiáng)了
所以幾代都是用同一個(gè)注冊機(jī),只是前面的序列號改了一下,的確本人覺得它的注冊
碼也是很強(qiáng)的,很少軟件象它那樣每次注冊的時(shí)候注冊碼都不同的,所以它也值得驕傲
的。由于上面可知注冊碼的正確格式是TDBG6????????-????????。
那么是不是注冊碼就是TDBG6????????-????????了呢(?為隨便數(shù)字)?當(dāng)然
沒有這么簡單了,這只是開頭呢?好戲還在后面呢?不過今天就講到這里吧!手都有
點(diǎn)軟件了,不是快快閃方為上著!!!
作者:Ru Feng
信箱:ocq@163.net
網(wǎng)址:http://ocq.yeah.net (未完,代續(xù))
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -