簡單演算法――飄雪PXQQ V1.0(Softsentry保護)

看雪資料發表於2015-11-15

下載頁面:  http://www.skycn.com/soft/11000.html
軟體大小:  914 KB
軟體語言:  簡體中文
軟體類別:  國產軟體 / 共享版 / 聊天工具
應用平臺:  Win9x/NT/2000/XP
加入時間:  2003-02-22 11:17:17
下載次數:  2232
推薦等級:  ***
開 發 商:  http://piaoxue666.51.net/

【軟體簡介】: 本軟體是當今最好的區域網即時通訊工具。為QQ的區域網版本,擁有QQ的所有功能,並有所增強。對區域網內的的資訊交流非常方便,比打內線電話方便多了。 1.PXQQ獨創的所見所得資訊功能支援傳送所見所得資訊! 包括圖片、聲音、Word文件等 支援超大檔案傳輸,快!,非常強大您試試就知道了! 2. 不用任何中轉站與伺服器,隨時開啟本軟體就可以看到當前線上的網友。當然,他們也知道您來了,除非您是隱身登入的。 3.支援檔案傳輸,再也不用共享啦。安全!快!4.更換皮膚功能,而且自制皮膚非常容易。 5.資訊的閱讀收條。你傳送資訊時,如果選擇“需要收條”,對方看到訊息後,會自動給你傳送一個收條。 6.信使服務。此功能利用Win2000的信使服務,給對方傳送一個強制通知訊息。當對方未開啟PXQQ,你可以用此方式通知他。(Win98不支援此功能。)7.區域網掃描功能。你可以看到整個區域網的使用者及其IP以及是否聯機。8. 黑名單功能。當你不想收到某個人的訊息時,你可以把他踢入黑名單。 但想收到他的訊息時,別忘了把他加為好友。9. 可以很快的貼上快捷用語,並可以自己根據需要新增、修改。10. 內建語音聊天功能,效果比美坐機電話。11. 如果您不嫌麻煩的話,可以設定為“系統”。

【軟體限制】:8次試用。

【作者宣告】:初學Crack,只是感興趣,沒有其它目的。失誤之處敬請諸位大俠賜教!

【破解工具】:TRW2000娃娃修改版、Ollydbg1.09、PEiD、W32Dasm 10修改版

―――――――――――――――――――――――――――――――――
【過    程】:


呵呵,一看軟體啟動要求註冊的畫面,就知道又碰上Softsentry殼的東東了。這次作者下了點工夫,沒有簡單套用,而是加大了長度,string_1有20位,string_2有15位。但是這種殼的基本演算法流程是改變不了多少的,呵呵,Let's Go!


ID  號:95065
姓  名:fly
單  位:【OCN】
試煉碼:1234567890ABCDEFGHIJ1234567890KLMNOPQRSTU

―――――――――――――――――――――――――――――――――
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0059AC05(C)
|
:0059AC5F A1546C5A00              mov eax, dword ptr [005A6C54]
:0059AC64 25FFFF0000              and eax, 0000FFFF
:0059AC69 0F849B010000            je 0059AE0A
:0059AC6F 85C0                    test eax, eax
:0059AC71 0F8E1A020000            jle 0059AE91
:0059AC77 83F802                  cmp eax, 00000002
:0059AC7A 0F8F11020000            jg 0059AE91
:0059AC80 8B35F46B5A00            mov esi, dword ptr [005A6BF4]
                                 ====>ESI=[005A6BF4]=k(8^do586%hkf_,|5865

:0059AC86 83C9FF                  or ecx, FFFFFFFF
:0059AC89 8BFE                    mov edi, esi
:0059AC8B 33C0                    xor eax, eax
:0059AC8D F2                      repnz
:0059AC8E AE                      scasb
:0059AC8F F7D1                    not ecx
:0059AC91 83C1FE                  add ecx, FFFFFFFE
:0059AC94 6683F9FF                cmp cx, FFFF
:0059AC98 7422                    je 0059ACBC
:0059AC9A 6685C9                  test cx, cx
:0059AC9D 7C17                    jl 0059ACB6

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0059ACB4(C)
|
:0059AC9F 0FBFC1                  movsx eax, cx
:0059ACA2 8A1430                  mov dl, byte ptr [eax+esi]
                                 ====>DL=依次 倒序 取k(8^do586%hkf_,|5865的字元!                                  

:0059ACA5 80FA3F                  cmp dl, 3F
:0059ACA8 7406                    je 0059ACB0
:0059ACAA 3A540420                cmp dl, byte ptr [esp+eax+20]
                                 ====>依次與試煉碼前20位1234567890ABCDEFGHIJ的倒序字元比較!

:0059ACAE 7506                    jne 0059ACB6
                                 ====>不同則跳則OVER!  索性NOP掉,省得老是要跳   ^-^ ^-^

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0059ACA8(C)
|
:0059ACB0 49                      dec ecx
:0059ACB1 6685C9                  test cx, cx
:0059ACB4 7DE9                    jge 0059AC9F
                                 ====>迴圈逐位檢查前20位!有一位不同就OVER了!
                        一、     ====>所以註冊碼的前20位=k(8^do586%hkf_,|5865


* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0059AC9D(C), :0059ACAE(C)
|
:0059ACB6 6683F9FF                cmp cx, FFFF
:0059ACBA 7508                    jne 0059ACC4

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0059AC98(C)
|
:0059ACBC C744241401000000        mov [esp+14], 00000001

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0059ACBA(C)
|
:0059ACC4 8B3DD46B5A00            mov edi, dword ptr [005A6BD4]
                                 ====>EDI=[005A6BD4]=5697|ogj56+&123

:0059ACCA 83C9FF                  or ecx, FFFFFFFF
:0059ACCD 33C0                    xor eax, eax
:0059ACCF F2                      repnz
:0059ACD0 AE                      scasb
:0059ACD1 F7D1                    not ecx
:0059ACD3 49                      dec ecx
:0059ACD4 8D7C2420                lea edi, dword ptr [esp+20]
                                 ====>EDI=[esp+20]=1234567890KLMNOPQRSTU

:0059ACD8 8BE9                    mov ebp, ecx
:0059ACDA 83C9FF                  or ecx, FFFFFFFF
:0059ACDD F2                      repnz
:0059ACDE AE                      scasb
:0059ACDF F7D1                    not ecx
:0059ACE1 49                      dec ecx
:0059ACE2 2BCD                    sub ecx, ebp
:0059ACE4 6685C9                  test cx, cx
:0059ACE7 7E32                    jle 0059AD1B
:0059ACE9 33F6                    xor esi, esi
:0059ACEB 6685ED                  test bp, bp
:0059ACEE 7E22                    jle 0059AD12

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0059AD10(C)
|
:0059ACF0 8B15D46B5A00            mov edx, dword ptr [005A6BD4]
                                 ====>EDX=5697|ogj56+&123

:0059ACF6 0FBFC6                  movsx eax, si
:0059ACF9 8A1410                  mov dl, byte ptr [eax+edx]
                                 ====>DL=依次取5697|ogj56+&123的字元!

:0059ACFC 80FA3F                  cmp dl, 3F
:0059ACFF 740B                    je 0059AD0C
:0059AD01 0FBFF9                  movsx edi, cx
:0059AD04 03F8                    add edi, eax
:0059AD06 3A543C20                cmp dl, byte ptr [esp+edi+20]
                                 ====>EDX=依次與試煉碼後15位7890KLMNOPQRSTU的字元比較!

:0059AD0A 7506                    jne 0059AD12
                                 ====>不同則跳則OVER!  索性NOP掉,省得老是要跳   ^-^ ^-^

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0059ACFF(C)
|
:0059AD0C 46                      inc esi
:0059AD0D 663BF5                  cmp si, bp
:0059AD10 7CDE                    jl 0059ACF0
                                 ====>迴圈逐位檢查後15位!有一位不同就OVER了!
                        二、     ====>所以註冊碼的後15位=5697|ogj56+&123


* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0059ACEE(C), :0059AD0A(C)
|
:0059AD12 663BF5                  cmp si, bp
:0059AD15 7504                    jne 0059AD1B
:0059AD17 FF442414                inc [esp+14]

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0059ACE7(C), :0059AD15(C)
|
:0059AD1B 837C241402              cmp dword ptr [esp+14], 00000002
:0059AD20 740A                    je 0059AD2C
:0059AD22 B8FEFFFFFF              mov eax, FFFFFFFE
:0059AD27 E941010000              jmp 0059AE6D

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0059AD20(C)
|
:0059AD2C 8B3DF46B5A00            mov edi, dword ptr [005A6BF4]
:0059AD32 83C9FF                  or ecx, FFFFFFFF
:0059AD35 33C0                    xor eax, eax
:0059AD37 F2                      repnz
:0059AD38 AE                      scasb
:0059AD39 8B3DD46B5A00            mov edi, dword ptr [005A6BD4]
:0059AD3F F7D1                    not ecx
:0059AD41 49                      dec ecx
:0059AD42 8D740C20                lea esi, dword ptr [esp+ecx+20]
:0059AD46 83C9FF                  or ecx, FFFFFFFF
:0059AD49 F2                      repnz
:0059AD4A AE                      scasb
:0059AD4B F7D1                    not ecx
:0059AD4D 49                      dec ecx
:0059AD4E 8BD6                    mov edx, esi
:0059AD50 2BD1                    sub edx, ecx
:0059AD52 8BFE                    mov edi, esi
:0059AD54 83C9FF                  or ecx, FFFFFFFF
:0059AD57 F2                      repnz
:0059AD58 AE                      scasb
:0059AD59 F7D1                    not ecx
:0059AD5B 49                      dec ecx
:0059AD5C 88040A                  mov byte ptr [edx+ecx], al
:0059AD5F 8BCE                    mov ecx, esi
                                 ====>ECX=123456       呵呵,是試煉碼的中間6位!

:0059AD61 E84A5B0000              call 005A08B0
                                 ====>檢測上面的中間幾位是否為數字?

:0059AD66 85C0                    test eax, eax
:0059AD68 750A                    jne 0059AD74
                                 ====>不是數字則不跳則OVER!

:0059AD6A B8FDFFFFFF              mov eax, FFFFFFFD
:0059AD6F E9F9000000              jmp 0059AE6D

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0059AD68(C)
|
:0059AD74 BA64315A00              mov edx, 005A3164
                                 ====>EDX=0604         呵呵,程式自給的!

:0059AD79 8BCE                    mov ecx, esi
                                 ====>ECX=123456       呵呵,是試煉碼的中間6位!

:0059AD7B E8705B0000              call 005A08F0
                                 ====>再次檢測123456是否為數字?
                不是數字則“invalid digital number!”。並且把123456轉化為用16進位制值表示!

:0059AD80 8BF8                    mov edi, eax
                                 ====>EDI=0001E240(H)=123456(D)


:0059AD82 66A1546C5A00            mov ax, word ptr [005A6C54]
:0059AD88 663D0100                cmp ax, 0001
:0059AD8C 7546                    jne 0059ADD4
:0059AD8E 66A1FA6B5A00            mov ax, word ptr [005A6BFA]
:0059AD94 8B15006C5A00            mov edx, dword ptr [005A6C00]
:0059AD9A 33C9                    xor ecx, ecx
:0059AD9C 8ACC                    mov cl, ah
:0059AD9E 25FF000000              and eax, 000000FF
:0059ADA3 8BF1                    mov esi, ecx
:0059ADA5 8BC8                    mov ecx, eax
:0059ADA7 E854FBFFFF              call 0059A900
:0059ADAC 8B15FC6B5A00            mov edx, dword ptr [005A6BFC]
:0059ADB2 03F8                    add edi, eax
:0059ADB4 6685F6                  test si, si
:0059ADB7 7504                    jne 0059ADBD
:0059ADB9 33C9                    xor ecx, ecx
:0059ADBB EB03                    jmp 0059ADC0

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0059ADB7(C)
|
:0059ADBD 8D4E01                  lea ecx, dword ptr [esi+01]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0059ADBB(U)
|
:0059ADC0 E83BFBFFFF              call 0059A900
:0059ADC5 8BC8                    mov ecx, eax
:0059ADC7 85C9                    test ecx, ecx
:0059ADC9 7438                    je 0059AE03
:0059ADCB 8BC7                    mov eax, edi
:0059ADCD 99                      cdq
:0059ADCE F7F9                    idiv ecx
:0059ADD0 8BC2                    mov eax, edx
:0059ADD2 EB27                    jmp 0059ADFB

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0059AD8C(C)
|
:0059ADD4 663D0200                cmp ax, 0002
:0059ADD8 7529                    jne 0059AE03
:0059ADDA 8B15FC6B5A00            mov edx, dword ptr [005A6BFC]
                                 ====>EDX=[005A6BFC]=564g5fiofj9&^6kfd

:0059ADE0 A1006C5A00              mov eax, dword ptr [005A6C00]
                                 ====>EAX=[005A6C00]=dkjfkdu5f2g445]

:0059ADE5 8B0D386D5A00            mov ecx, dword ptr [005A6D38]
                                 ====>ECX=[005A6D38]=17359(H)=95605(D)呵呵,我的ID號

:0059ADEB 52                      push edx
:0059ADEC 668B15FA6B5A00          mov dx, word ptr [005A6BFA]
:0059ADF3 50                      push eax
:0059ADF4 E897FBFFFF              call 0059A990
                                 ====>演算法CALL!得出下面的EAX值。進入!

:0059ADF9 2BC7                    sub eax, edi
                                 ====>EAX=5DECC - 1E240=3FC8C

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0059ADD2(U)
|
:0059ADFB 85C0                    test eax, eax
                                 ====>相減結果是否為0?即:上面2部分是否相等?
                        三、     ====>所以:註冊碼的中間部分=5DECC(H)=384716(D)


:0059ADFD 0F848E000000            je 0059AE91
                                 ====>不為0則不跳則OVER!


:0059B013 FF1500725A00            call dword ptr [005A7200]
                                 ====>BAD BOY!

―――――――――――――――――――――――――――――――――
進入演算法CALL:59ADF4  call 0059A990

* Referenced by a CALL at Addresses:
|:0059ADF4   , :0059B1DA  
|
:0059A990 53                      push ebx
:0059A991 56                      push esi
:0059A992 668BDA                  mov bx, dx
:0059A995 8BF1                    mov esi, ecx
:0059A997 8B54240C                mov edx, dword ptr [esp+0C]
                                 ====>EDX=[esp+0C]=dkjfkdu5f2g445]

:0059A99B 8ACB                    mov cl, bl
:0059A99D 57                      push edi
:0059A99E 81E1FF000000            and ecx, 000000FF
:0059A9A4 E857FFFFFF              call 0059A900
                                 ====>對程式給的dkjfkdu5f2g445]進行運算得出下面的EAX值!進入!

:0059A9A9 8B542414                mov edx, dword ptr [esp+14]
                                 ====>EDX=dkjfkdu5f2g445]

:0059A9AD 8BF8                    mov edi, eax
                                 ====>EDI=EAX=1B86B 上面CALL對dkjfkdu5f2g445]進行運算得出的值!

:0059A9AF 33C0                    xor eax, eax
:0059A9B1 8AC7                    mov al, bh
:0059A9B3 6685C0                  test ax, ax
:0059A9B6 7512                    jne 0059A9CA
                                 ====>跳下去!

:0059A9B8 33C9                    xor ecx, ecx
:0059A9BA E841FFFFFF              call 0059A900
:0059A9BF 03FE                    add edi, esi
:0059A9C1 0FAFC7                  imul eax, edi
:0059A9C4 5F                      pop edi
:0059A9C5 5E                      pop esi
:0059A9C6 5B                      pop ebx
:0059A9C7 C20800                  ret 0008

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0059A9B6(C)
|
:0059A9CA 8D4801                  lea ecx, dword ptr [eax+01]
                                 ====>EAX=63

:0059A9CD E82EFFFFFF              call 0059A900
                                 ====>對程式給的564g5fiofj9&^6kfd進行運算得出下面的EAX值!
此處與59A9A4  call 0059A900的運算流程相同,只是引數不同,因此就不再記錄了。迴圈得出EAX=2B308


:0059A9D2 03C7                    add eax, edi
                                 ====>EAX=2B308 + 1B86B=46B73

:0059A9D4 03C6                    add eax, esi
                                 ====>EAX=46B73 + 17359=5DECC
         呵呵,把上面運算的結果5DECC(H)轉化成10進位制值384716(D),就是註冊碼的中間部分了!


:0059A9D6 5F                      pop edi
:0059A9D7 5E                      pop esi
:0059A9D8 5B                      pop ebx
:0059A9D9 C20800                  ret 0008


―――――――――――――――――――――――――――――――――
進入關鍵CALL:59A9A4  call 0059A900

* Referenced by a CALL at Addresses:
|:0059A9A4   , :0059A9BA   , :0059A9CD   , :0059ADA7   , :0059ADC0  
|
:0059A900 53                      push ebx
:0059A901 8BDA                    mov ebx, edx
                                 ====>EBX=EDX=dkjfkdu5f2g445]

:0059A903 56                      push esi
:0059A904 8BF1                    mov esi, ecx
                                 ====>ESI=ECX=31

:0059A906 85DB                    test ebx, ebx
:0059A908 7472                    je 0059A97C
:0059A90A 803B00                  cmp byte ptr [ebx], 00
:0059A90D 746D                    je 0059A97C
:0059A90F 57                      push edi
:0059A910 8BFB                    mov edi, ebx
:0059A912 83C9FF                  or ecx, FFFFFFFF
:0059A915 33C0                    xor eax, eax
:0059A917 F2                      repnz
:0059A918 AE                      scasb
:0059A919 F7D1                    not ecx
:0059A91B 49                      dec ecx
                                 ====>ECX=F   取dkjfkdu5f2g445]的位數

:0059A91C 6685F6                  test si, si
:0059A91F 7443                    je 0059A964
:0059A921 6683FE01                cmp si, 0001
:0059A925 743D                    je 0059A964
:0059A927 81E6FFFF0000            and esi, 0000FFFF
:0059A92D 8BC6                    mov eax, esi
:0059A92F 99                      cdq
:0059A930 F7F9                    idiv ecx
                                 ====>EDX=31 % F=4

:0059A932 0FBE041A                movsx eax, byte ptr [edx+ebx]
                                 ====>EAX=6B            即:第5個字元k的HEX值

:0059A936 0FAFC6                  imul eax, esi
                                 ====>EAX=6B * 31=147B

:0059A939 0FAFC2                  imul eax, edx
                                 ====>EAX=147B * 4=51EC

:0059A93C 03C1                    add eax, ecx
                                 ====>EAX=51EC + F=51FB

:0059A93E 33D2                    xor edx, edx
:0059A940 85C9                    test ecx, ecx
:0059A942 7E16                    jle 0059A95A
:0059A944 8BF9                    mov edi, ecx
:0059A946 2BFE                    sub edi, esi
                                 ====>EDI=F - 31=FFFFFFDE

:0059A948 83C76F                  add edi, 0000006F
                                 ====>EDI=FFFFFFDE + 6F=4D

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0059A958(C)
|
:0059A94B 0FBE341A                movsx esi, byte ptr [edx+ebx]
                                 ====>依次取dkjfkdu5f2g445]字元的HEX值

:0059A94F 0FAFF7                  imul esi, edi
                           1、   ====>ESI=64   *  4D=1E14
                           2、   ====>ESI=6B   *  4C=1FC4
                           3、   ====>ESI=6A   *  4B=1F0E
                                …… ……省  略…… ……
                          15、   ====>ESI=5D   *  3F=16E3

:0059A952 03C6                    add eax, esi
                           1、   ====>EAX=51FB + 1E14=700F
                           2、   ====>EAX=700F + 1FC4=8FD3
                           3、   ====>EAX=8FD3 + 1F0E=AEE1
                                …… ……省  略…… ……
                          15、   ====>EAX=1A188 + 16E3=1B86B


:0059A954 42                      inc edx
:0059A955 4F                      dec edi
                                 ====>EDI依次減1

:0059A956 3BD1                    cmp edx, ecx
:0059A958 7CF1                    jl 0059A94B
                                 ====>迴圈15次

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0059A942(C)
|
:0059A95A 85C0                    test eax, eax
:0059A95C 7D1A                    jge 0059A978
:0059A95E 5F                      pop edi
:0059A95F 5E                      pop esi
:0059A960 F7D8                    neg eax
:0059A962 5B                      pop ebx
:0059A963 C3                      ret

―――――――――――――――――――――――――――――――――
【算 法  總 結】:


因為作者做了不少改動,有些引數我沒能驗證,只能大體猜測一下。有可能是不確切的。


一、註冊碼 前20位固定為:k(8^do586%hkf_,|5865

二、註冊碼 後15位固定為:5697|ogj56+&123  

三、註冊碼中間幾位的運算:

1、取系統程式碼:95065,轉化為16進位制值:17359(H)

2、17359 + 46B73=5DECC
運算的結果5DECC(H)轉化成10進位制值384716(D),就是我的註冊碼的中間部分了!


―――――――――――――――――――――――――――――――――
【註冊資訊儲存】:


1、登錄檔中

REGEDIT4

[HKEY_CLASSES_ROOT\{7YTg0oKAVm}]
@="NUQ=%!!5!#Q!3!!)!.!#U!$5Q.4)U!!!!!!\"=R1!!>`^L+$B?:']V/$9F;'NGN8SR].4AW.4-Y.$=R.D5W/4>]<W>K.49L*D%S-Q!!!!!!!!!!!!!#!!!!!!!!N!!!!!!!'!.-(\"!!&!!M!%A!#!$1!N!!!!!)!!!!!!!!!!-%.1Q&G<(E!-$%!3!!!!!!!!!!!!!!!!!!!!!!!!"

2、REGEDIT4

[HKEY_CLASSES_ROOT\SystemAppIDs]
@="N\"!!!!!!!!!\"\\<WZ63E&:=T-W?8V\\2V\".3'6K17.%-(V\\=X.Y6F:D75N8:XV\\-.VF5:T\"P3U&7<8U!"

3、C:\WINDOWS\SYSTEM 下的access.ctl檔案。


不明白:Softsentry 3.0殼的軟體的註冊資訊都如此儲存,如果一個系統裡有幾個註冊的Softsentry 3.0殼的軟體,那會怎樣?!

―――――――――――――――――――――――――――――――――
【整        理】:


ID  號:95065
姓  名:fly      (呵呵,姓名和單位不參與運算,可以隨意輸入)
單  位:【OCN】
註冊碼:k(8^do586%hkf_,|58653847165697|ogj56+&123

―――――――――――――――――――――――――――――――――

   
                   Cracked By 巢水工作坊――fly【OCN】

                           2003-4-12  0:30

相關文章