仅以此代码献给我所有朋友或爱好 VFP 的朋友。 (10 千字) 发信人:- Aming 时 间:2002-9-8 11:23:04 详细信息:
VFP 结构
学习小工具 ==================================== 原代码及编译后的文件:foxlock.net/fox.zip
'----------------------------------------------------------------------------------------' VFP-STRUCTURE Written By Aming Plindge Studio,1997-2002 ' VFP 反编译的第一步,标准 APP 文件的识别,但愿此对 VFP 研究的朋友有一丝帮助 ' 接触 Fox 是 1997 在 JNU 的时候,研究也是在 1997 的年底,不是 Fox,起码不会“认识”琳丫头,更不会 ' 有今天的“品琳居” ,呵呵。 。 ' Http://plindge.yeah.net Email:plindge@163 '----------------------------------------------------------------------------------------Option Explicit
Public Type VfpStructure aAppFileName As String aIsApp As Boolean aAppSize As Long aFoxVersion As String aEncrypt As String aFileNumbers As Long aFileListStartPos As Long aFileListEndPos As Long aFileListSize As Long aMainFileInFileList As Long aMainFileName As String aFilesName() As String aFileNamePos() As Long aFilesType() As Byte aFilesStartPos() As Long aFilesEndPos() As Long aFilesSize() As Long aFoxChkSum As String End Type '*// APP 文件的名称 '*// 是否为 VFP 的 APP 文件 '*// APP 文件的实际长度 '*// VFP 文件的版本 '*// 文件是否加密编译 '*// APP 中所包含文件的总数 '*// 文件列表的开始位置 '*// 文件列表的结束位置 '*// 文件列表的长度 '*// 主文件在文件列表的序号 '*// 主文件的名称 '*// 所有文件的名称 '*// 所有文件各自名字在文件列表的偏移 '*// 所有文件各自的类型 '*// 所有文件各自在 APP 的开始位置 '*// 所有文件各自在 APP 的结束位置 '*// 所有文件各自的长度 '*// FOX
程序的检校 FoxChkSum
'-------------------------------------------------------------------------------------------'- 对于 VFP6.0/7.0 的 APP 文件而言,其标志为 FE F2 FF[EE] 20 02 '- 00h-04h 为 VFP 的版本标识 其中 02h FF 表示为不加密编译, 表示加密编译, 表明该文件为 VFP6/7 EE 20 '- * 对 VFP 的反编译而言,第一步就是将加密的 APP 转成普通的 APP。
'- 05h-06h 文件的数目 07h-08h 主文件在文件列表中的序号 '- 09h-0Ch 文件列表的结束位置[EPOS] 0D-10h 文件列表的开始位置[SPOS] 11h-14h 文件列表长度 '- 15h-27h 保留 28h-29h 前 37 个字节的检校,进一步判断是否为 FOX 文件 '--------------------------------------------------------------------------------------------
Public Function GetFoxFile(aFile As String) As VfpStructure Dim aHeard(0 To 40) As Byte On Error GoTo MetErrors: GetFoxFile.aAppFileName = aFile Open aFile For Binary As #1 Get #1, , aHeard() If aHeard(0) <> &;HFE Or aHeard(1) <> &;HF2 Then Close #1 GetFoxFile.aIsApp = False Exit Function ElseIf aHeard(2) = &;HFF Then GetFoxFile.aIsApp = Tr
ue GetFoxFile.aEncrypt = "[不加密]"
If aHeard(3) = &;H1B Then GetFoxFile.aFoxVersion = "VFP 3.0" ElseIf aHeard(3) = &;H1F Then GetFoxFile.aIsApp = True GetFoxFile.aFoxVersion = "VFP 5.0" ElseIf aHeard(3) = &;H20 Then GetFoxFile.aIsApp = True GetFoxFile.aFoxVersion = "VFP 6.0/7.0" End If ElseIf aHeard(2) = &;HEE Or aHeard(2) = &;HFE Then GetFoxFile.aIsApp = True GetFoxFile.aEncrypt = "[加密]" Close #1 Exit Function Else GetFoxFile.aIsApp = False Close #1 Exit Function End If
GetFoxFile.aFoxChkSum = Hex(aHeard(40)) &; Hex(aHeard(39)) GetFoxFile.aFileNumbers = aHeard(5) + aHeard(6) * 16 ^ 2
'// ChkSum 检校
'// 文件数目
GetFoxFi