今天继续写一点,接着上一篇fas的研究
3、关于vlx
vlx相当于lsp、fas等资源文件的打包文件,在打包的时候先判断是否有lsp文件,如果有的话,先编译成fas文件,然后把fas文件和其他资源一起打入包内,vlx也是经过仔细设计出来的文件,里面包含了很多校验,但是比起fas文件,vlx要容易的多,还想提一点就是vlx的限制:首先就是各个文件的文件名:当然是字符串了,字符串长度不能大于23个,包含24,中文减半,否则编译的时候会提示你,vlx把资源打入包内省去了路径的设置,方便管理,可以说是大家的好帮手。如果要研究包内的fas文件,首先是要把包内的fas解包出来,当然这一步不是很难,到时候会仔细介绍这一步。
我想下面要好好准备一下写fas文件格式了,这对我来说很难,因为很多地方我也是一知半解,但希望能开阔大家的思路,fas文件应该是采用了某种文件格式,但是对文件格式我研究不多,里面的大部分指令都是为了加快cad执行速度的,几乎所有的数据都采用十六进制,当然也有少部分是10进制,所以先给大家介绍一下这些工具,大家先学一下,熟悉一下工具的使用,到时候大家不要问工具使用方面的问题,大家先看一下这些工具:
1、OllyDbg:一款动态调试软件
先写到这里,办公室好冷啊,受不了.
fas文件格式研究(三)
今天讲fas文件格式:
首先还是熟悉一些基本常识:
1、进制
十进制:123456
十六进制:0x123456
二进制:对于fas我们用不上,不介绍了
通常fas文件里面用到了这两种进制的表示方法,fas文件大部分都是用十六进制表示,是因为十六进制是一种比较高效的表示,一位能存放的最大数是f,相对于十进制的16,(cpu只能识别二进制编码)
2、数据存储
如果熟悉这方面的朋友可以略过,比如一个大小为三字节的数据:0x01E240,整数为123456,在fas文件内的存放顺序是这样的:0x40 0xE2 0x01 正好相反了,也就是说高位放在后面,低位放到前面
3、基本数据类型
字节(Byte)为一个字节,占用两位、字(Word,占两个字节,占4位)和双字(Dword,四个字节,占8位),Word和Dword相当于无符 的整型和无符 长整型。
4、下面介绍fas 文件结构
首先我们在vlide中敲入如下代码:
(alert “hello world”)
然后保存为first,编译,然后用winhex打开这个文件,得到如下:首先把winhex设置为10进制表示偏移显示:
Offset 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
00000000 0D 0A 20 46 41 53 34 2D 46 49 4C 45 20 3B 20 44 .. FAS4-FILE ; D
00000016 6F 20 6E 6F 74 20 63 68 61 6E 67 65 20 69 74 21 o not change it!
00000032 0D 0A 31 0D 0A 31 20 24 20 24 0D 0A 38 32 20 34 ..1..1 $ $..82 4
00000048 20 24 13 FF 73 54 E7 4B 31 6F 15 38 7E 15 43 4A $.T鏚1o.8~.CJ
00000064 4B 52 49 4E 28 64 3F 58 CF 43 55 E7 2C 30 5D 0F KRIN(d螩U].
00000080 12 26 67 27 77 66 68 69 6D 63 30 32 07 FE 76 55 .&g’wfhimc02.U
00000096 ED 78 6D 5D 07 51 47 14 42 11 0D 1A 4E 0F 62 31 韝m].QG.B…N.b1
00000112 71 1B EA 73 55 E7 79 38 5E 07 18 4E 16 43 24 06 q.阺U鐈8^..N.C$.
00000128 1A 0D 08 74 15 4A 4D B3 C1 94 73 0A 3B 66 61 73 …t.JM沉攕.;fas
00000144 34 20 63 72 75 6E 63 68 0A 3B 24 3B 41 31 2F 34 4 crunch.;$;A1/4
00000160 2F 30 37 /07
首先文件头是一个标志:FAS4-FILE,确保是fas文件,Do not change it!提示不要修改他,前两行解决了
下面看第三行:
..1..1 $ $..82 4
第一个1是用户自定义函数代码的长度,第二个是字符串个数,如果都是1的话代表没有定义函数,由于刚才我们只写了一句代码,所以没有自定义函数,如果有defun语句的出现,这里就不是1了。
82:代表包括字符串在内的所有初始化代码的长度,包括这一句(alert “hello world”),注意这里是十进制表示
4:代表字符串的个数,很奇怪,我只有三个字符串,而他确显示4个,如果有研究过的能否指出是否正确,注意这里是十进制表示
下面解读第四行:
00000048 20 24 13 FF 73 54 E7 4B 31 6F 15 38 7E 15 43 4A $.T鏚1o.8~.CJ
第一个字节是20,表示流的开始(流的概念我也说的不是很清楚,感觉这样表述比较贴切,也就是说一段代码的开始),后面是我们需要的代码,而现在看起来什么都看不出来,不急,我们待会再来讲怎么解码的。那么这段代码有多长呢才在第三行我们看到了:82是代码的长度,所以这段代码的长度是82个字节,我们从00000050开始选择82个字节长度的区域,复制下来得到如下:
Offset 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
00000048 13 FF 73 54 E7 4B 31 6F 15 38 7E 15 43 4A .T鏚1o.8~.CJ
00000064 4B 52 49 4E 28 64 3F 58 CF 43 55 E7 2C 30 5D 0F KRIN(d螩U].
00000080 12 26 67 27 77 66 68 69 6D 63 30 32 07 FE 76 55 .&g’wfhimc02.U
00000096 ED 78 6D 5D 07 51 47 14 42 11 0D 1A 4E 0F 62 31 韝m].QG.B…N.b1
00000112 71 1B EA 73 55 E7 79 38 5E 07 18 4E 16 43 24 06 q.阺U鐈8^..N.C$.
00000128 1A 0D 08 74 …t
最后一个字节是74,看一下后面跟的是:字节15 ,注意这里是16进制表示,0x15=21(整数),这个表示解码密码的长度,也就是说后面长度0x15的流是密码,得到如下(用来解码刚才那82个字节长度的流):
4A4DB3C194730A3B66617334206372756E63680A3B
后面$是一个结束标志,十六进制为24,然后跟的是fas文件编译的年月日
有一点要说明一下:这个密码是随机的,大家编译得到的和我的略有不同,所以被加密后的代码上可能和我的不同,这不妨碍我们研究,
今天先写到这里,大家慢慢看,收工下班^_^
未经允许不得刊载
相关资源:win10,win11可用,智尊宝纺服装CAD制版软件,win7可用最新版9.74…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!