|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2004-01-19, 12:22 AM | #1 |
榮譽會員
|
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被 套用到後的校驗,如果你僅僅改後面的跳轉就不行了,因為錯誤的值被做成標誌,在後面只要拿來校驗就 麻煩了。所以必須分析出程序對它的操作,是比較還是拿來計算?二是系統出錯不一定是程序本身的問題。 加密公司完全有能力把系統出錯和加密程式碼返回的值結何起來,從而讓系統出錯,這樣做的目的是讓破解 者把注意力放到偵錯系統出錯的問題上,而忽略了程序本身。 |
送花文章: 3,
|