關於S-SPLINE的問題,哪位高手給我一個完美的爆破方案? (10千字)
下載地:http://www.shortcut.nl/S-Spline/Shortcut_S-SplineDemo.zip
這個軟體註冊碼非常難算,軟體設計者演算法到了變態的地步.我看的頭都大了.而且這個軟體還設了陷井.當你上網後,他會到它網站的資料庫去比較,如果沒有註冊過,當即將你的註冊版改為未註冊版.
這個軟體用用Asprotect1.2以後的版本加殼 ,得手動脫殼,還得修復輸入表.以下分析部分引BLOWFISH的分析結果。
輸入註冊碼之後的判斷:
0177:0040BB11 PUSH 004BF728
//DialogRegister::RegisterButton.OnClick(
)
0177:0040BB16 CALL 0041EBB6
0177:0040BB1B LEA ECX,[EBP-01EC]
0177:0040BB21 CALL 0041C0CF
0177:0040BB26 AND DWORD PTR [EBP-04],00
0177:0040BB2A PUSH 0040118F
0177:0040BB2F PUSH 0041EB3F
0177:0040BB34 PUSH 03
0177:0040BB36 PUSH 18
0177:0040BB38 LEA EAX,[EBP-00F0]
0177:0040BB3E PUSH EAX
0177:0040BB3F CALL 0047E80A
0177:0040BB44 MOV ECX,[EBP-24]
0177:0040BB47 MOV BYTE PTR [EBP-04],01
0177:0040BB4B CALL 00427F9E
0177:0040BB50 MOV EBX,EAX
0177:0040BB52 CALL 0042FA11
0177:0040BB57 LEA EAX,[EBP-00A8]
0177:0040BB5D PUSH EAX
0177:0040BB5E LEA ECX,[EBX+000001E0]
0177:0040BB64 CALL 00428000
//GetWindowTextA( ),
Name
0177:0040BB69 MOV ESI,004BF724
0177:0040BB6E PUSH ESI
0177:0040BB6F LEA ECX,[EBP-00A8]
0177:0040BB75 MOV BYTE PTR [EBP-04],02
0177:0040BB79 CALL 00420B42
0177:0040BB7E LEA EAX,[EBP-0090]
0177:0040BB84 PUSH EAX
0177:0040BB85 LEA ECX,[EBX+00000224]
0177:0040BB8B CALL 00428000
//GetWindowTextA( ), Company
0177:0040BB90 PUSH ESI
0177:0040BB91 LEA ECX,[EBP-0090]
0177:0040BB97 MOV BYTE PTR [EBP-04],03
0177:0040BB9B CALL 00420B42
0177:0040BBA0 MOV ECX,EBX
0177:0040BBA2 CALL 0040B9D9
0177:0040BBA7 LEA EAX,[EBP-01B8]
0177:0040BBAD LEA ECX,[EBX+0000019C]
0177:0040BBB3 PUSH EAX
0177:0040BBB4 CALL 00428000
//GetWindowTextA( ), Serial[1]
0177:0040BBB9 MOV ESI,EAX
0177:0040BBBB LEA EAX,[EBP-01A0]
0177:0040BBC1 PUSH EAX
0177:0040BBC2 LEA ECX,[EBX+00000158]
0177:0040BBC8 MOV BYTE PTR [EBP-04],04
0177:0040BBCC CALL 00428000
//GetWindowTextA( ), Serial[2]
0177:0040BBD1 MOV EDI,EAX
0177:0040BBD3 LEA EAX,[EBP-0170]
0177:0040BBD9 PUSH EAX
0177:0040BBDA LEA ECX,[EBX+00000114]
0177:0040BBE0 MOV BYTE PTR [EBP-04],05
0177:0040BBE4 CALL 00428000
//GetWindowTextA( ), Serial[3]
0177:0040BBE9 MOV [EBP-1C],EAX
0177:0040BBEC LEA EAX,[EBP-0158]
0177:0040BBF2 PUSH EAX
0177:0040BBF3 LEA ECX,[EBX+000000D0]
0177:0040BBF9 MOV BYTE PTR [EBP-04],06
0177:0040BBFD CALL 00428000
//GetWindowTextA( ), Serial[4]
0177:0040BC02 MOV [EBP-14],EAX
0177:0040BC05 LEA EAX,[EBP-0188]
0177:0040BC0B PUSH EAX
0177:0040BC0C LEA ECX,[EBX+0000008C]
0177:0040BC12 MOV BYTE PTR [EBP-04],07
0177:0040BC16 CALL 00428000
//GetWindowTextA( ), Serial[5]
........
0177:0040BE4E PUSH EAX
0177:0040BE4F MOV ECX,ESI
0177:0040BE51 CALL 00459A71
//第一處瘋狂計算的地方,
0177:0040BE56 TEST AL,AL
0177:0040BE58 MOV [EBP-15],AL
//返回值
0177:0040BE5B JNZ 0040BF1C
0177:0040BE61 LEA EAX,[EBP-40]
0177:0040BE64 PUSH EAX
0177:0040BE65 LEA ECX,[EBX+48]
0177:0040BE68 CALL 00428000
//GetWindowTextA
...........
0177:0040BF0F PUSH EAX
0177:0040BF10 MOV ECX,ESI
0177:0040BF12 CALL 00459A71
//第二處瘋狂計算的地方
0177:0040BF17 MOV [EBP-15],AL
//返回值
0177:0040BF1A JMP 0040BF1E
0177:0040BF1C XOR EDI,EDI
0177:0040BF1E LEA EAX,[EBP-60]
0177:0040BF21 PUSH EAX
0177:0040BF22 LEA ECX,[EBX+48]
0177:0040BF25 CALL 00428000
0177:0040BF2A PUSH 004BF704
//註冊碼的第一部分Serial[1]的黑名單“!AMOK”?
0177:0040BF2F MOV ECX,EAX
0177:0040BF31 MOV BYTE PTR [EBP-04],27
0177:0040BF35 CALL 0041FC03
//strcmp( )
0177:0040BF3A TEST AL,AL
0177:0040BF3C JNZ 0040BF84
0177:0040BF3E LEA EAX,[EBP-40]
0177:0040BF41 PUSH EAX
0177:0040BF42 LEA ECX,[EBX+0000019C]
0177:0040BF48 CALL 00428000
//GetWindowTextA( ), Serial[6]
0177:0040BF4D PUSH 004BF6FC
//註冊碼的最後一部分的黑名單?(有不可顯示字元)
0177:0040BF52 MOV ECX,EAX
0177:0040BF54 MOV BYTE PTR [EBP-04],28
0177:0040BF58 CALL 0041FC03
//strcmp( ),跟進去可看到CMPSB指令
0177:0040BF5D MOV [EBP-0D],AL
//比較的結果。
0177:0040BF60 LEA ECX,[EBP-3C]
0177:0040BF63 MOV BYTE PTR [EBP-04],29
0177:0040BF67 CALL 0040117A
0177:0040BF6C LEA ECX,[EBP-40]
0177:0040BF6F MOV BYTE PTR [EBP-04],27
0177:0040BF73 CALL 0040117A
0177:0040BF78 CMP BYTE PTR [EBP-0D],00 //標誌位
0177:0040BF7C JNZ 0040BF84
0177:0040BF7E AND BYTE PTR [EBP-0D],00
0177:0040BF82 JMP 0040BF88
0177:0040BF84 MOV BYTE PTR [EBP-0D],01
啟動時聯網檢查新版本(BPM WININET!InternetOpenUrlA X DO "d *(esp+8)"):
017F:00AF1870 68 74 74 70 3A 2F 2F 77-77 77 2E 73 68 6F 72 74 http://www.short
017F:00AF1880 63 75 74 2E 6E 6C 2F 63-67 69 2D 62 69 6E 2F 43 cut.nl/cgi-bin/C
017F:00AF1890 68 65 63 6B 2E 63 67 69-3F 75 70 64 61 74 65 25 heck.cgi?update%
017F:00AF18A0 32 30 73 2D 73 70 6C 69-6E 65 5F 32 5F 78 00 00 20s-spline_2_x..
啟動時聯網檢查註冊碼,如果檢查不透過又成為unregistered。這個檢查是隨機的,即並非每次啟動都檢查。
017F:00AF2C10 68 74 74 70 3A 2F 2F 77-77 77 2E 73 68 6F 72 74 http://www.short
017F:00AF2C20 63 75 74 2E 6E 6C 2F 63-67 69 2D 62 69 6E 2F 43 cut.nl/cgi-bin/C
017F:00AF2C30 68 65 63 6B 2E 63 67 69-3F 4A 56 43 36 35 4A 58 heck.cgi?JVC65JX
017F:00AF2C40 46 56 4F 56 57 36 4E 47-50 50 56 56 45 34 4B 48 FVOVW6NGPPVVE4KH
017F:00AF2C50 49 41 00 2E 6E 6C 2F 53-51 00 00 00 51 00 00 00 IA..nl/SQ...Q...
相關的程式碼:
0177:004159DD LEA ECX,[ESI+0000089C]
0177:004159E3 PUSH ECX
0177:004159E4 LEA EAX,[ESI+00000884]
0177:004159EA PUSH EAX
0177:004159EB LEA EAX,[ESI+0000086C]
0177:004159F1 PUSH EAX
0177:004159F2 MOV ECX,ESI
0177:004159F4 CALL 00413013
//聯網檢查有無新版本
0177:004159F9 TEST AL,AL
0177:004159FB JZ 00415A4B
0177:004159FD LEA EAX,[ESI+00000884]
0177:00415A03 PUSH EAX
0177:00415A04 LEA EAX,[EBP-30]
0177:00415A07 PUSH 004C065C
//"update"
0177:00415A0C PUSH EAX
0177:00415A0D CALL 00402CF8
0177:00415A12 SUB ESP,0C
0177:00415A15 MOV ECX,ESP
0177:00415A17 MOV [EBP-10],ESP
0177:00415A1A PUSH 004C0650
//"available"
0177:00415A1F PUSH ECX
0177:00415A20 MOV ECX,EAX
0177:00415A22 MOV BYTE PTR [EBP-04],37
0177:00415A26 CALL 0041FFC9
0177:00415A2B MOV ECX,[EBP-14]
0177:00415A2E CALL 0041BADD
0177:00415A33 LEA ECX,[EBP-2C]
0177:00415A36 MOV BYTE PTR [EBP-04],38
0177:00415A3A CALL 0040117A
0177:00415A3F MOV BYTE PTR [EBP-04],24
0177:00415A43 LEA ECX,[EBP-30]
0177:00415A46 JMP 00415AEA
0177:00415A4B CMP BYTE PTR [ESI+000000D4],00 //標誌位
0177:00415A52 PUSH FF
0177:00415A54 JZ 00415AA1
0177:00415A56 PUSH 0000E156
.......................
0177:00415A9F JMP 00415AEA
0177:00415AA1 PUSH 0000E15E
.......................
0177:00415AEA CALL 0040117A
0177:00415AEF MOV ECX,ESI
0177:00415AF1 CALL 004161C5
//本地檢查註冊碼,並隨機聯網檢查註冊碼
0177:00415AF6 FLD1
0177:00415AF8 FSTP REAL8 PTR [ESI+00000298]
在上面的0177:00415AF1處跟進去,看見本地判斷註冊碼的地方:
0177:0041644C CALL [EAX+14]
//判斷註冊碼,裡面是瘋狂的計算
0177:0041644F MOV ECX,004D420C
0177:00416454 MOV [EBP-0D],AL
//判斷的結果
0177:00416457 CALL 0041E80A
0177:0041645C CMP BYTE PTR [EBP-0D],00 //註冊碼錯誤?
0177:00416460 JZ 004168BD
0177:00416466 MOV ECX,[EDI+00000208]
0177:0041646C CMP ECX,[004A5C78]
0177:00416472 LEA EAX,[EDI+00000208]
0177:00416478 JNZ 00416482
再在上面的0177:0041644C處跟進去,瘋狂的計算就開始了。第一處比較註冊碼的地方如下:
0177:004629C8 MOV EAX,[EBP-0244]
0177:004629CE IMUL EAX,EAX,000343FD
//瘋狂的乘法(RSA?)
0177:004629D4 ADD EAX,00269EC3
0177:004629D9 MOV [EBP-0244],EAX
0177:004629DF MOV EAX,[EBP+FFFFF1A8]
0177:004629E5 ADD EAX,[EBP+FFFFF19C]
0177:004629EB PUSH EAX
0177:004629EC PUSH 00
0177:004629EE PUSH DWORD PTR [EBP-0244]
0177:004629F4 CALL 004791DC
0177:004629F9 ADD ESP,0C
0177:004629FC MOV [EBP+FFFFF198],EAX
0177:00462A02 MOV EAX,[EBP+FFFFF1B4]
0177:00462A08 SUB EAX,[EBP+FFFFF198]
0177:00462A0E SUB EAX,0A
0177:00462A11 CMP [EBP-0174],EAX
0177:00462A17 JGE 00462A7D
0177:00462A19 MOV EAX,[EBP-0174]
0177:00462A1F MOVSX EAX,BYTE PTR [EAX+EBP-0160]
0177:00462A27 MOV [EBP-0178],EAX
0177:00462A2D CMP DWORD PTR [EBP-0178],39
0177:00462A34 JLE 00462A47
0177:00462A36 MOV EAX,[EBP-0178]
0177:00462A3C SUB EAX,41
0177:00462A3F MOV [EBP-0178],EAX
0177:00462A45 JMP 00462A56
0177:00462A47 MOV EAX,[EBP-0178]
0177:00462A4D SUB EAX,30
0177:00462A50 MOV [EBP-0178],EAX
0177:00462A56 MOV EAX,[EBP-0178]
0177:00462A5C MOVSX EAX,BYTE PTR [EAX+EBP-34] //真註冊碼
0177:00462A61 MOV ECX,[EBP+10]
0177:00462A64 ADD ECX,[EBP-0174]
0177:00462A6A MOVSX ECX,BYTE PTR [ECX]
//假註冊碼
0177:00462A6D CMP EAX,ECX
//比較
0177:00462A6F JZ 00462A78
0177:00462A71 XOR AL,AL
//bad guy
0177:00462A73 JMP 0046A910
0177:00462A78 JMP 004626A5
我共找到跳到46A910的有5個比較分別為:462A73,463069,4647F7,465BB5,46A90C。
我將其全部JZ改為JNZ,但程式出錯,而且自動啟動OUTLOOK發信給作者。哪位高手給我一個完美的爆破方案?
相關文章
- 關於jdbc的一個問題,高手解惑2003-12-08JDBC
- 高手 高手 高手 給我一個答案2005-04-26
- 哪位高手幫幫我2005-01-07
- 高手都進來歇歇~解決一個問題關於SE的問題2008-04-21
- 一個關於Struts傳引數的問題,請高手來看看............2004-05-06
- 一個困擾我三天的問題,請高手指點!(關於SUN實現CachedRowSet 的用法)2004-11-24
- 關於什麼高手和什麼擺架子的問題又來了!!!我的看法----
(1千字)2015-11-15
- 關於教程的一個問題2002-09-10
- 請教高手 關於STRUTS DATASOURCE的問題2004-07-17
- 我來提個關於Iterator的小問題2005-03-04
- 關於Integer面試的一個問題2019-03-04面試
- 一個關於Java Excel的問題2004-04-10JavaExcel
- 一個關於SessionBean呼叫的問題。2003-11-03SessionBean
- 一個關於prototype模式的問題?2002-11-26模式
- 請教高手一個問題!2006-06-16
- 請高手幫忙了,關於javamail的問題2003-10-17JavaAI
- 關於HibernateDaoSupport使用的問題,高手指點2006-07-10
- 問一個關於hibernate的OracleDialect問題2003-09-10Oracle
- 關於SESSION中出現的奇怪的問題!高手進~~2005-10-09Session
- 我的第一篇破文,獻給看學學院的!^_^高手免進! (10千字)2015-11-15
- 關於AOP攔截器使用的一個問題,尋求解決方案2008-02-19
- 關於一個歸檔問題?2020-12-17
- 請高手幫忙,關於多個連線的hibernate配置問題2004-05-12
- 關於jive的幾個小問題,請高手指點,多謝先。2005-10-19
- 求助關於JdonFrameworkTest的一個問題2006-02-28Framework
- 關於系統效能的一個問題2005-09-04
- 一個關於jdbc2的問題2004-05-09JDBC
- 關於抽象工廠的一個問題?2002-11-11抽象
- 爭用!!!!一個關於JDBC的問題!2005-04-16JDBC
- 關於singleton模式的一個問題?2002-12-04模式
- 碰到一個棘手的問題——關於httpclient。2007-03-17HTTPclient
- 關於j_security_check的問題 高手請指教2004-06-11
- 關於Java communications API的問題,請教高手2004-09-14JavaAPI
- 關於執行緒的問題,清高手指點2004-06-08執行緒
- 遇到了java smtp 郵件問題,哪位高手能夠相助啊?2004-05-05Java
- 請教各位高手一個問題2003-02-14
- 問一個有關JBPM連MySQL資料庫的問題,高手請進2006-05-10MySql資料庫
- 關於Linux的10個最常見問題2014-08-24Linux