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被
應用到後的校驗,如果你僅僅改後面的跳轉就不行了,因為錯誤的值被做成標誌,在後面只要拿來校驗就
麻煩了。所以必須分析出程式對它的操作,是比較還是拿來計算?二是系統出錯不一定是程式本身的問題。
加密公司完全有能力把系統出錯和加密程式碼返回的值結何起來,從而讓系統出錯,這樣做的目的是讓破解
者把注意力放到除錯系統出錯的問題上,而忽略了程式本身。
聽天由命
2003-12-25
my qq:69883609