史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > Hacker/Cracker 及加解密技術文件
忘記密碼?
論壇說明 標記討論區已讀

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2004-01-19, 12:22 AM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 SentinelLM加密分析及破解方法

SentinelLM加密分析及破解方法

 SentinelLM就Sentinel License Manager的縮寫,該軟體的功能和FLEXLM很像,都是通過網路卡加密的,
伺服器端安裝SERVER,客戶端機不用安裝其它軟體,使用時SERVER端啟動並開啟一個合法的License文件,
這個License文件是軟體開發商提供的。啟動後客戶端機才能正常執行軟體,否則一執行就提示No License,
Can't not run.而且客戶端機上的很多程序都有這個限制,即使暴破能夠成功也要改不少文件,這樣的話就
很麻煩了。先不管這麼多,也許比我想像相的會好的多。

017F:022116D4 MOV [EBP+04],AL
017F:022116D7 CALL 02213C47 //從這裡CALL裡返回的EAX為12,而從這個段裡返回的值是02。
017F:022116DC ADD ESP,BYTE +20 //經分析發現如果返回值為0則不會彈出提示視窗。
017F:022116DF CMP EAX,BYTE +1A
017F:022116E2 MOV [EBP+74],EAX  ********
017F:022116E5 JA NEAR 0221176D
017F:022116EB CMP EAX,BYTE +19
017F:022116EE JNC NEAR 022119A6
017F:022116F4 CMP EAX,BYTE +18
017F:022116F7 JA NEAR 022117A8
017F:022116FD XOR EDX,EDX
017F:022116FF MOV DL,[EAX+022119C4]
017F:02211705 JMP NEAR [EDX*4+022119B8]
017F:0221170C LEA EAX,[EBP+68]
017F:0221170F MOV BYTE [EBP+04],01

以上段裡返回的值是02則會出錯,改成0後不彈出提示視窗,程序可以繼續執行下去,但執行到一半後就
出錯了,「c800001 error!」這種提示不是程序事先做好的視窗,而是真正的系統出錯。難道有非法地
址或資料?不會吧,先下BPX LOCKMYTASK,可以跟到出錯地方,但是看起來是在讀取EXE文件時出錯?
因為有exeshell的字樣,大部分軟體都是用這個API來開啟外部EXE文件的。我想EXE應該不會出錯,很可
能是在前面讀狗後在一個位址裡放入了標誌,而在程序執行之前檢查了這個標誌,然後轉入出錯部分。
我注意到上面程式碼中打*號的地方,因為它是把從那個CALL裡返回的12放入了[EAX+47],因為12是錯誤的
值,會使返回的值為02,而02也是錯誤的。所以[EAX+47]裡的值是錯誤的,如果程序拿來校驗一定會被
查出來,下BPM XXXXXX看看程序在後面是怎麼對它操作的?果然被攔下來,先看下面程式碼:

017F:02211AB2 PUSH BYTE +00
017F:02211AB4 CALL 02214DB2 //從這裡返回的EAX=1,  @@@@@@
017F:02211AB9 MOV ESI,[ESP+10]
017F:02211ABD ADD ESP,BYTE +04
017F:02211AC0 TEST EAX,EAX
017F:02211AC2 MOV [ESI+74],EAX //又把EAX放入[ESI+74],因為EAX=0才能使程序走到2211ACF
017F:02211AC5 JZ 02211ACF //這裡不會跳,從而這段最後的值為02,上段程序返回02是錯的。
017F:02211AC7 MOV EAX,02 //所以這裡也是錯的。改成xor eax,eax
017F:02211ACC POP ESI
017F:02211ACD POP ECX
017F:02211ACE RET
017F:02211ACF MOV EAX,[ESI+70] //這裡有一個表,可能會返回0。
017F:02211AD2 PUSH EBX
017F:02211AD3 PUSH EDI
017F:02211AD4 PUSH BYTE +00

在@@@@@處按F8進入下面段,看看哪裡會使返回值為1。

017F:02215108 CALL 02214E52
017F:0221510D CALL 02216787
017F:02215112 PUSH EAX
017F:02215113 PUSH DWORD [0225BFB4]
017F:02215119 CALL 02214E12
017F:0221511E ADD ESP,BYTE +08
017F:02215121 TEST EAX,EAX
017F:02215123 JNZ 0221512C (JUMP)
017F:02215125 MOV EAX,01     //在這裡,EAX=1
017F:0221512A JMP SHORT 0221512F
017F:0221512C MOV EAX,[EAX+38]
017F:0221512F RET
017F:02215130 CALL 02214E52
017F:02215135 CALL 02216787


聖天諾的加密做的真的很好,從這個程序中我又學到了不少東西,一是出錯值與程序的關係,比如12被
套用到後的校驗,如果你僅僅改後面的跳轉就不行了,因為錯誤的值被做成標誌,在後面只要拿來校驗就
麻煩了。所以必須分析出程序對它的操作,是比較還是拿來計算?二是系統出錯不一定是程序本身的問題。
加密公司完全有能力把系統出錯和加密程式碼返回的值結何起來,從而讓系統出錯,這樣做的目的是讓破解
者把注意力放到偵錯系統出錯的問題上,而忽略了程序本身。
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
 


主題工具
顯示模式

發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 02:40 AM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2022, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1