SentinelLM加密分析及破解方法 (3千字)

看雪資料發表於2015-11-15

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

相關文章