PE檔案中嵌入檔案讀寫程式碼實現被解密檔案的再加密! (7千字)
標 題: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
相關文章
- 檔案排版(文字檔案讀寫)2020-12-27
- PE檔案格式2015-11-15
- 檔案讀寫2011-10-11
- 檔案的讀寫2024-08-07
- VBA建立文字檔案、讀寫文字檔案2020-04-04
- 檔案操作之按照行讀寫檔案2017-04-12
- Python中的檔案讀寫2019-01-19Python
- Java中檔案的讀寫操作2016-08-23Java
- Silverlight 讀取嵌入在.xap檔案中的檔案內容2009-05-06
- C/C++ 實現PE檔案特徵碼識別2020-09-14C++特徵
- 再探.NET的PE檔案結構(安全篇)2019-05-11
- 深入剖析PE檔案2014-09-25
- 普通檔案的讀寫2020-10-20
- Golang 讀、寫檔案2019-02-16Golang
- keras讀寫檔案2020-10-08Keras
- perl 讀寫檔案2014-04-28
- 檔案讀寫IO2013-09-25
- 讀取檔案流並寫入檔案流2018-07-18
- Python中的檔案讀寫-實際操作2021-09-11Python
- 再談檔案讀寫:判斷檔案的幾種方法及其優劣對比2018-10-22
- Android中檔案的讀寫操作2018-01-03Android
- C語言實現檔案加密2024-05-01C語言加密
- Python:讀寫檔案(I/O) | 組織檔案2021-04-22Python
- C#讀取文字檔案和寫文字檔案2018-05-24C#
- 棧實現反序讀檔案2012-12-13
- PE檔案格式的RVA概念2008-04-14
- A 檔案 500MB,B 檔案 500MB,如何將兩檔案讀進記憶體,比較出其中的檔案內容差,再寫進 C 檔案雲?2019-10-30記憶體
- PE 檔案結構圖2023-09-05
- Python檔案讀寫詳解及設定檔案的字元編碼2017-04-18Python字元
- IO流的檔案讀寫2016-09-28
- Scala檔案的讀寫操作2015-11-28
- Python中的檔案的讀寫操作2018-07-30Python
- 「Python」:檔案讀寫2020-07-07Python
- Python——檔案讀寫2019-08-03Python
- Python 讀寫檔案2019-02-24Python
- C++檔案讀寫2021-05-23C++
- 【Java】讀寫文字檔案2017-09-02Java
- c fopen檔案讀寫2017-11-21