PE檔案中嵌入檔案讀寫程式碼實現被解密檔案的再加密! (7千字)

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

標 題:PE檔案中嵌入檔案讀寫程式碼實現被解密檔案的再加密! (7千字)

發信人:天狐  [發短訊息]

時 間:2003-08-28 20:28:18

詳細資訊:



說明:
1.本文程式碼在olydbg手工輸入後儲存
2.相關檔案操作API函式的說明
    檔案開啟:
GENERIC_READ  = &H80000000
GENERIC_WRITE = &H40000000
OPEN_ALWAYS = 4              檔案不存在則建立
OPEN_EXISTING = 3            檔案必須存在
        FILE_ATTRIBUTE_NORMAL = &H80   預設檔案屬性
hFile=CreateFile(filename,GENETIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE,0)

     移動檔案指標:
        lDistanceToMove:移動距離的低32位
        lDistanceToMoveHigh:移動距離的高32位(一般為0)

        FILE_BEGIN = 0              檔案移動從起點算
        FILE_CURRENT = 1            檔案移動從當前點算
        FILE_END = 2

        SetFilePointer (hFile,lDistanceToMove,lpDistanceToMoveHigh,FILE_BEGIN)
        返加當前指標=SetFilePointer (hFile,0,NULL,FILE_CREENT)

     讀寫檔案:
        lpBuffer 緩衝區地址
        nNumberOfBytes  緩衝區位元組數
        nNumberBytesOfOk 實際操作成功的位元組數緩衝區地區

        WriteFile(hFile,lpBuffer,nNumberOfBytes,lpnNumberBytesOfOk,Null)
        ReadFile(hFile,lpBuffer,nNumberOfBytes,lpnNumberBytesOfOk,Null)
        讀取檔案失敗返回0,成功為非0

3.功能:
      a.在被解密程式中增加讀寫檔案的程式碼
      b.可以破解針對用多張硬體卡號或單張卡號的加密
      c.本文同時增加了被解密程式的再加密

4.緩衝區說明:
1001da00:硬體號緩衝(單路)
1001dac0:硬體號緩衝(四路)
1001de00:註冊檔名
1001de10:註冊檔名柄
1001de14:註冊檔案長
1001de18:註冊檔案指標
1001de1c:通道號
1001de20:返回的實際註冊檔案長度緩衝區
1001de24:計數器
1001de50:從註冊檔案讀入的16位元組序列號緩衝
1001de70:根據硬體號計算得到的序列號緩衝

5.本人實在太懶,能寫這麼多就很不錯了,看了這個覺得煩的兄弟可別怪我!


具體的破解程式碼:(從100025d0處跳轉過來)
;---------------------------------------------------------------------------------------
1001D7F8    60              PUSHAD                        所有暫存器入棧
1001D7F9    6A 00           PUSH 0
1001D7FB    68 80000000     PUSH 80
1001D800    6A 03           PUSH 3
1001D802    6A 00           PUSH 0
1001D804    6A 01           PUSH 1
1001D806    68 00000080     PUSH 80000000
1001D80B    68 00DE0110     PUSH tmSDK.1001DE00                      
1001D810    FF15 64E20110   CALL DWORD PTR DS:[<&KERNEL32.CreateFile>             KERNEL32.CreateFileA    開啟註冊檔案
1001D816    83F8 00         CMP EAX,0
1001D819    0F8E 1A010000   JLE tmSDK.1001D939
1001D81F    A3 10DE0110     MOV DWORD PTR DS:[1001DE10],EAX
1001D824    6A 02           PUSH 2
1001D826    6A 00           PUSH 0
1001D828    6A 00           PUSH 0
1001D82A    FF35 10DE0110   PUSH DWORD PTR DS:[1001DE10]
1001D830    FF15 68E20110   CALL DWORD PTR DS:[<&KERNEL32.SetFilePoi>; KERNEL32.SetFilePointer    得到檔案長度
1001D836    83F8 00         CMP EAX,0
1001D839    0F8C EE000000   JL tmSDK.1001D92D
1001D83F    90              NOP
1001D840    A3 14DE0110     MOV DWORD PTR DS:[1001DE14],EAX
1001D845    33C9            XOR ECX,ECX
1001D847    890D 18DE0110   MOV DWORD PTR DS:[1001DE18],ECX
1001D84D    6A 00           PUSH 0
1001D84F    6A 00           PUSH 0
1001D851    FF35 18DE0110   PUSH DWORD PTR DS:[1001DE18]
1001D857    FF35 10DE0110   PUSH DWORD PTR DS:[1001DE10]
1001D85D    FF15 68E20110   CALL DWORD PTR DS:[<&KERNEL32.SetFilePoi>; KERNEL32.SetFilePointer    移動檔案指標
1001D863    83F8 00         CMP EAX,0
1001D866    0F8C C1000000   JL tmSDK.1001D92D
1001D86C    90              NOP
1001D86D    90              NOP
1001D86E    90              NOP
1001D86F    90              NOP
1001D870    6A 00           PUSH 0
1001D872    68 20DE0110     PUSH tmSDK.1001DE20
1001D877    6A 10           PUSH 10
1001D879    68 50DE0110     PUSH tmSDK.1001DE50
1001D87E    FF35 10DE0110   PUSH DWORD PTR DS:[1001DE10]
1001D884    FF15 D8E00110   CALL DWORD PTR DS:[<&KERNEL32.ReadFile>]  KERNEL32.ReadFile          從檔案讀16位元組
1001D88A    85C0            TEST EAX,EAX
1001D88C    0F84 97000000   JE tmSDK.1001D929
1001D892    C705 24DE0110   MOV DWORD PTR DS:[1001DE24],0
1001D89C    90              NOP

;-----------根據硬體號得到序列號(用查表法編寫的簡單的再加密演算法的程式碼)-----------
1001D89D    8B5C24 5C       MOV EBX,DWORD PTR SS:[ESP+5C]                                         得到硬體號
1001D8A1    86DF            XCHG BH,BL
1001D8A3    C1C3 10         ROL EBX,10
1001D8A6    86DF            XCHG BH,BL
1001D8A8    33C0            XOR EAX,EAX
1001D8AA    8AC3            MOV AL,BL
1001D8AC    8DB0 F0DC0110   LEA ESI,DWORD PTR DS:[EAX+1001DCF0]
1001D8B2    A1 24DE0110     MOV EAX,DWORD PTR DS:[1001DE24]
1001D8B7    3E:8D3C85 70DE0>LEA EDI,DWORD PTR DS:[EAX*4+1001DE70]    
1001D8BF    B9 04000000     MOV ECX,4
1001D8C4    F3:A4           REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
1001D8C6    8B0D 24DE0110   MOV ECX,DWORD PTR DS:[1001DE24]
1001D8CC    41              INC ECX
1001D8CD    890D 24DE0110   MOV DWORD PTR DS:[1001DE24],ECX
1001D8D3    C1CB 08         ROR EBX,8
1001D8D6    83F9 04         CMP ECX,4
1001D8D9  ^ 75 CD           JNZ SHORT tmSDK.1001D8A8

;---------------------------------------------------------------------------------

1001D8DB    8D35 70DE0110   LEA ESI,DWORD PTR DS:[1001DE70]
1001D8E1    8D3D 50DE0110   LEA EDI,DWORD PTR DS:[1001DE50]
1001D8E7    A6              CMPS BYTE PTR DS:[ESI],BYTE PTR ES:[EDI]               比較讀入的序列號與計算得到的序列號
1001D8E8    74 18           JE SHORT tmSDK.1001D902
1001D8EA    90              NOP
1001D8EB    90              NOP
1001D8EC    90              NOP
1001D8ED    8B0D 18DE0110   MOV ECX,DWORD PTR DS:[1001DE18]
1001D8F3    41              INC ECX
1001D8F4    3B0D 14DE0110   CMP ECX,DWORD PTR DS:[1001DE14]
1001D8FA  ^ 0F8C 47FFFFFF   JL tmSDK.1001D847                                      迴圈讀取註冊檔案,以便查完整個檔案
1001D900    EB 2B           JMP SHORT tmSDK.1001D92D

;-------------------序列號正確執行的程式碼----------------------------------
1001D902    A1 1CDE0110     MOV EAX,DWORD PTR DS:[1001DE1C]
1001D907    BE 90DE0110     MOV ESI,tmSDK.1001DE90
1001D90C    90              NOP
1001D90D    8D3486          LEA ESI,DWORD PTR DS:[ESI+EAX*4]
1001D910    33C0            XOR EAX,EAX
1001D912    8A4424 28       MOV AL,BYTE PTR SS:[ESP+28]
1001D916    2C 10           SUB AL,10
1001D918    BB 0C000000     MOV EBX,0C
1001D91D    F6EB            IMUL BL
1001D91F    8D3430          LEA ESI,DWORD PTR DS:[EAX+ESI]
1001D922    8D7C24 28       LEA EDI,DWORD PTR SS:[ESP+28]
1001D926    B9 04000000     MOV ECX,4
1001D92B    F3:A4           REP MOVSB
;-------------------------------------------------------------------------

1001D92D    FF35 10DE0110   PUSH DWORD PTR DS:[1001DE10]
1001D933    FF15 58E20110   CALL DWORD PTR DS:[<&KERNEL32.CloseHandl>; KERNEL32.CloseHandle    關閉檔案

1001D939    61              POPAD

;----------補上100025d0處被改動的原始碼-----------------------------------
1001D93A    33C0            XOR EAX,EAX                               
1001D93C    83C4 18         ADD ESP,18
;-------------------------------------------------------------------------

1001D93F  ^ E9 914CFEFF     JMP tmSDK.100025D5                            返回跳轉處的下一句



作者:天狐   clsznz@163.net   http://www.thznz.net           QQ:82769488 

相關文章