|
論壇說明 | 標記討論區已讀 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2003-12-11, 08:11 PM | #1 |
榮譽會員
|
xx多媒體網路教室精簡版簡單算法分析
程序名稱:xx多媒體網路教室精簡版簡單算法分析
原版下載:http://www.softreg.com.cn/shareware_...-BA34DC283465/ 破解作者:北極熊[DFCG] 破解工具:TRW2000,VB6.0 下萬能斷點:bpx hmemcpy 慢慢跟蹤到如下關鍵(都是高手,菜熊就不多獻醜了),看算法如下: 0167:00427697 E874FCFFFF CALL 00427310 0167:0042769C 83C404 ADD ESP,BYTE +04 0167:0042769F 8D4C2414 LEA ECX,[ESP+14] 0167:004276A3 51 PUSH ECX 0167:004276A4 E8D7C6FEFF CALL 00413D80 //F8進入算法CALL 0167:004276A9 8B00 MOV EAX,[EAX] 0167:004276AB 8B542414 MOV EDX,[ESP+14] 0167:004276AF 50 PUSH EAX 0167:004276B0 52 PUSH EDX 0167:004276B1 FFD7 CALL EDI 0167:004276B3 83C410 ADD ESP,BYTE +10 0167:004276B6 8D4C2410 LEA ECX,[ESP+10] 0167:004276BA 85C0 TEST EAX,EAX 0167:004276BC 0F95C3 SETNZ BL 設定標誌 0167:004276BF E894380100 CALL `MFC42!ord_00000320` 0167:004276C4 84DB TEST BL,BL 0167:004276C6 7412 JZ 004276DA 跳至出錯處 0167:004276C8 6A00 PUSH BYTE +00 --------------------//算法CALL// 0167:00413DCE B80A0A0A0A MOV EAX,0A0A0A0A //這是一個關鍵的字串串 0167:00413DD3 33D2 XOR EDX,EDX 0167:00413DD5 89442414 MOV [ESP+14],EAX 0167:00413DD9 89442418 MOV [ESP+18],EAX 0167:00413DDD 8944241C MOV [ESP+1C],EAX 0167:00413DE1 89442420 MOV [ESP+20],EAX 0167:00413DE5 85F6 TEST ESI,ESI 0167:00413DE7 89442424 MOV [ESP+24],EAX 設定上面ESP+14-->ESP+27 都是"0A" 0167:00413DEB 7E1C JNG 00413E09 0167:00413DED 8D4C2414 LEA ECX,[ESP+14] 取出機器碼 0167:00413DF1 2BF9 SUB EDI,ECX 0167:00413DF3 8D4C1414 LEA ECX,[ESP+EDX+14] 0167:00413DF7 8A040F MOV AL,[EDI+ECX] 0167:00413DFA 84C0 TEST AL,AL 0167:00413DFC 8801 MOV [ECX],AL 0167:00413DFE 7D04 JNL 00413E04 0167:00413E00 F6D8 NEG AL 0167:00413E02 8801 MOV [ECX],AL 0167:00413E04 42 INC EDX 0167:00413E05 3BD6 CMP EDX,ESI 0167:00413E07 7CEA JL 00413DF3 上面是把機器碼放入ESP+14開始的空間 0167:00413E09 33F6 XOR ESI,ESI //開始計算,(以下是一個多重循環) 0167:00413E0B 33C9 XOR ECX,ECX 0167:00413E0D 8A543414 MOV DL,[ESP+ESI+14] 取機器碼第一位,ESI是外循環因子 0167:00413E11 8A440C14 MOV AL,[ESP+ECX+14] 取機器碼第一位,ECX是內循環因子 0167:00413E15 02C2 ADD AL,DL 加起來 0167:00413E17 3C39 CMP AL,39 和$39比較 0167:00413E19 88440C14 MOV [ESP+ECX+14],AL 放回第一位 0167:00413E1D 7E0F JNG 00413E2E 小於等於就跳 0167:00413E1F 0FBEC0 MOVSX EAX,AL 大於就存到EAX 0167:00413E22 99 CDQ 0167:00413E23 BF3C000000 MOV EDI,3C EDI=$EC 0167:00413E28 F7FF IDIV EDI EAX除EDI 0167:00413E2A 88540C14 MOV [ESP+ECX+14],DL 取餘數放到EDX 0167:00413E2E 41 INC ECX 內循環因子加1 0167:00413E2F 83F914 CMP ECX,BYTE +14 比較是否夠20位 0167:00413E32 7CD9 JL 00413E0D 小於就跳回繼續 0167:00413E34 46 INC ESI 內循環結束後繼續外循環,ESI=ESI+1 0167:00413E35 83FE14 CMP ESI,BYTE +14 比較是否夠20位 0167:00413E38 7CD1 JL 00413E0B 小於就跳回繼續,(結束全部循環) 0167:00413E3A 33C9 XOR ECX,ECX 0167:00413E3C 8A440C14 MOV AL,[ESP+ECX+14] 逐位取計算的ascii碼 0167:00413E40 3C30 CMP AL,30 和&30比較 0167:00413E42 7C04 JL 00413E48 小於就跳 0167:00413E44 3C39 CMP AL,39 和&39比較 0167:00413E46 7E12 JNG 00413E5A 不大於就跳,該字串不變 0167:00413E48 0FBEC0 MOVSX EAX,AL 0167:00413E4B 99 CDQ 0167:00413E4C BE0A000000 MOV ESI,0A 和$A取余 0167:00413E51 F7FE IDIV ESI 0167:00413E53 80C230 ADD DL,30 結果加&30變成數字 0167:00413E56 88540C14 MOV [ESP+ECX+14],DL 放回去 0167:00413E5A 41 INC ECX 0167:00413E5B 83F914 CMP ECX,BYTE +14 0167:00413E5E 7CDC JL 00413E3C 循環 0167:00413E60 807C241634 CMP BYTE [ESP+16],34 第3位ascii碼和$34比較 0167:00413E65 7E16 JNG 00413E7D 不大於就跳 0167:00413E67 8A442414 MOV AL,[ESP+14] 取第1位到al 0167:00413E6B 8A4C2425 MOV CL,[ESP+25] 取第18位到CL 0167:00413E6F 88442428 MOV [ESP+28],AL 第1位放到第21位 0167:00413E73 884C2414 MOV [ESP+14],CL 第18位放到第1位 0167:00413E77 88442425 MOV [ESP+25],AL 第1位放到第18位 0167:00413E7B EB14 JMP SHORT 00413E91 //以上是幾個字串互換 0167:00413E7D 8A442417 MOV AL,[ESP+17] 取第4位到al 0167:00413E81 8A542423 MOV DL,[ESP+23] 取第16位到CL 0167:00413E85 88442428 MOV [ESP+28],AL 第4位放到第21位 0167:00413E89 88542417 MOV [ESP+17],DL 第16位放到第4位 0167:00413E8D 88442423 MOV [ESP+23],AL 第4位放到第16位 0167:00413E91 B02D MOV AL,2D "-" 0167:00413E93 8D4C2408 LEA ECX,[ESP+08] 0167:00413E97 88442418 MOV [ESP+18],AL 第5位變為"-" 0167:00413E9B 8844241D MOV [ESP+1D],AL 第10變為"-" 0167:00413E9F 88442422 MOV [ESP+22],AL 第15位變為"-" 0167:00413EA3 8D442414 LEA EAX,[ESP+14] 註冊碼,然後取前18位就是真註冊碼了! 0167:00413EA7 50 PUSH EAX VB也剛學,註冊機程式碼寫的不精練,如下 Private Sub Image1_Click() Dim aa As String, bb As String Dim aa1, i, j, z Dim eax, ebx, ecx Dim tt, zzz, code Dim code4, code16, code18 Dim sn As String aa = Text1.Text bb = "1010101010101010101010101010101010101010" If Len(aa) < 15 Then msg = MsgBox("請填寫機器碼,謝謝!", 1, "錯誤") ElseIf aa = "1111-2222-3333-4444" Then Text2.Text = "這是北極熊自用版" Else '連接為20位 For i = 1 To Len(aa) aa1 = Asc(Mid(aa, i, 1)) bb = Left(bb, i * 2 - 2) & aa1 & Right(bb, 40 - i * 2) Next For j = 1 To 20 For z = 1 To 20 eax = Val(Mid(bb, j * 2 - 1, 2)) ecx = Val(Mid(bb, z * 2 - 1, 2)) ebx = eax + ecx bb = Left(bb, z * 2 - 2) & ebx & Right(bb, 40 - z * 2) If ebx < &H39 Then If ebx < 10 Then ebx = "0" & ebx Else ebx = ebx End If Else ebx = ebx Mod &H3C If ebx < 10 Then ebx = "0" & ebx Else ebx = ebx End If End If bb = Left(bb, z * 2 - 2) & ebx & Right(bb, 40 - z * 2) Next z Next j For i = 1 To 40 Step 2 tt = Val(Mid(bb, i, 2)) If tt < &H30 Or tt > &H39 Then zzz = Chr((Val(Mid(bb, i, 2)) Mod &HA) + &H30) Else zzz = Chr(tt) End If code = code & zzz Next If Asc(Mid(code, 3, 1)) < &H34 Then code4 = Mid(code, 4, 1) code16 = Mid(code, 16, 1) code = Left(code, 15) & code4 & Right(code, Len(code) - 16) code = Left(code, 20) & code4 code = Left(code, 3) & code16 & Right(code, Len(code) - 4) Else code1 = Mid(code, 1, 1) code18 = Mid(code, 18, 1) code = Left(code, 17) & code1 & Right(code, Len(code) - 18) code = Left(code, 20) & code1 code = code18 & Right(code, Len(code) - 1) End If '加上"-" code = Left(code, 4) & "-" & Right(code, Len(code) - 5) code = Left(code, 9) & "-" & Right(code, Len(code) - 10) code = Left(code, 14) & "-" & Right(code, Len(code) - 15) '取前18位 code = Left(code, 18) Text2.Text = code End If End Sub Private Sub Image2_Click() msg = MsgBox("支持國產正版軟體,請向作者註冊!", 1, "謝謝") End End Sub 作者:北極熊[DFCG] 時間:2003年3月6日 |
送花文章: 3,
|