明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 邹锋

[经验] Tony首创教你VLX分成FAS,以及WINHEX妙用

  [复制链接]
发表于 2014-6-7 22:50:15 | 显示全部楼层
nzl1116 发表于 2014-6-7 13:10
我觉得打包工具可以写,这样的话,可以修改vlx里的数据,也可以把数据存储在vlx中。
反正写打包也不是太 ...

研究这个没有太大必要,vlide能做的更好,还是交给vlide好点,另外如果有vlx文件的编写规范的话很容易改写vlx文件。
发表于 2014-6-9 18:43:38 | 显示全部楼层
可做参考,先收下了,谢谢!

点评

你要参考,准备干啥?  发表于 2014-6-9 18:44
发表于 2014-6-9 18:47:18 | 显示全部楼层
illcyt 发表于 2014-6-9 18:43
可做参考,先收下了,谢谢!

以后写程序如果加密可以试试这个是否能暴力破解
发表于 2014-6-10 12:22:54 | 显示全部楼层
我弱弱的問一下..什麼情況下.須要要從VLX 提取FAS ~

点评

报告先生,在下从来没用过,  发表于 2014-6-10 19:50
发表于 2014-6-10 14:32:40 | 显示全部楼层
牛,原来还可以这样
发表于 2014-6-10 21:15:26 | 显示全部楼层
原来可以这么用!
发表于 2014-6-11 20:29:46 | 显示全部楼层
可以是可以,不一样用么,貌似作用不大啊
发表于 2014-6-23 20:47:16 | 显示全部楼层
  1. fas文件格式研究 作者 : lidejun_55 (2007-11-16 15:21:12)转载▼
  2. 标签: 知识/探索       
  3. fas文件格式研究
  4. 作者 : lidejun_55    06-12-23

  5. 先介绍以下几种文件:
  6. 1、.lsp文件是lisp源程序文件的扩展名,这种文件在运行时需要翻译成中间代码才能在cad上执行,这种中间代码相当于fas的代码,在加载完lisp文件后,lisp文件被翻译成中间代码,驻留在内存中,这时我们可以在内存中看到这段代码,所以有网友在说lisp文件运行快还是fas文件运行快,运行是差不多的,只是lisp文件在加载的时候需要被翻译成中间代码,消耗了一点时间,运行完全是和fas文件一样的
  7. 2、.fas文件
  8. fas文件称为一种快速加载文件,这种文件省去了加载时的翻译时间,所以相对较快一些,vlx和fas文件是autocad公司自己设计开发的一种文件。由于文件被翻译成中间代码,也保护了开发者的版权,但是这种文件并不是完全没有漏洞的,fas文件把资源代码加密成不直接可见的代码,但我们想一下,他既然能加密,在调用的时候当然要解密资源,这一点大家都可以验证一下,用内存工具打开内存可以看到这些代码
  9. 3、关于vlx
  10.    vlx相当于lsp、fas等资源文件的打包文件,在打包的时候先判断是否有lsp文件,如果有的话,先编译成fas文件,然后把fas文件和其他资源一起打入包内,vlx也是经过仔细设计出来的文件,里面包含了很多校验,但是比起fas文件,vlx要容易的多,还想提一点就是vlx的限制:首先就是各个文件的文件名:当然是字符串了,字符串长度不能大于23个,包含24,中文减半,否则编译的时候会提示你,vlx把资源打入包内省去了路径的设置,方便管理,可以说是大家的好帮手。如果要研究包内的fas文件,首先是要把包内的fas解包出来,当然这一步不是很难,到时候会仔细介绍这一步。
  11.    我想下面要好好准备一下写fas文件格式了,这对我来说很难,因为很多地方我也是一知半解,但希望能开阔大家的思路,fas文件应该是采用了某种文件格式,但是对文件格式我研究不多,里面的大部分指令都是为了加快cad执行速度的,几乎所有的数据都采用十六进制,当然也有少部分是10进制,所以先给大家介绍一下这些工具,大家先学一下,熟悉一下工具的使用,到时候大家不要问工具使用方面的问题,大家先看一下这些工具:
  12. 1、OllyDbg:一款动态调试软件
  13. 2、winhex:一款强大的支持内存编辑的十六进制软件,必须熟悉这个工具,数据的复制,选择等
  14. 首先还是熟悉一些基本常识:
  15. 1、进制
  16. 十进制:123456
  17. 十六进制:0x123456
  18. 二进制:对于fas我们用不上,不介绍了
  19. 通常fas文件里面用到了这两种进制的表示方法,fas文件大部分都是用十六进制表示,是因为十六进制是一种比较高效的表示,一位能存放的最大数是f,相对于十进制的16,cpu认为十六进制是他本身的表示方法,所以fas为了提高效率也用了这种方法,而对于我们则不方便

  20. 2、数据存储
  21. 如果熟悉这方面的朋友可以略过,比如一个大小为三字节的数据:0x01E240,整数为123456,在fas文件内的存放顺序是这样的:0x40 0xE2 0x01 正好相反了,也就是说高位放在后面,低位放到前面

  22. 3、基本数据类型
  23. 字节(Byte)为一个字节,占用两位、字(Word,占两个字节,占4位)和双字(Dword,四个字节,占8位),Word和Dword相当于无符号的整型和无符号长整型。

  24. 4、下面介绍fas 文件结构
  25. 首先我们在vlide中敲入如下代码:
  26. (alert "hello world")
  27. 然后保存为first,编译,然后用winhex打开这个文件,得到如下:首先把winhex设置为10进制表示偏移显示:
  28. Offset      0  1  2  3  4  5  6  7   8  9 10 11 12 13 14 15
  29. 00000000   0D 0A 20 46 41 53 34 2D  46 49 4C 45 20 3B 20 44   .. FAS4-FILE ; D
  30. 00000016   6F 20 6E 6F 74 20 63 68  61 6E 67 65 20 69 74 21   o not change it!
  31. 00000032   0D 0A 31 0D 0A 31 20 24  20 24 0D 0A 38 32 20 34   ..1..1 $ $..82 4
  32. 00000048   20 24 13 FF 73 54 E7 4B  31 6F 15 38 7E 15 43 4A    $.?sT鏚1o.8~.CJ
  33. 00000064   4B 52 49 4E 28 64 3F 58  CF 43 55 E7 2C 30 5D 0F   KRIN(d?X螩U?0].
  34. 00000080   12 26 67 27 77 66 68 69  6D 63 30 32 07 FE 76 55   .&g'wfhimc02.U
  35. 00000096   ED 78 6D 5D 07 51 47 14  42 11 0D 1A 4E 0F 62 31   韝m].QG.B...N.b1
  36. 00000112   71 1B EA 73 55 E7 79 38  5E 07 18 4E 16 43 24 06   q.阺U鐈8^..N.C$.
  37. 00000128   1A 0D 08 74 15 4A 4D B3  C1 94 73 0A 3B 66 61 73   ...t.JM沉攕.;fas
  38. 00000144   34 20 63 72 75 6E 63 68  0A 3B 24 3B 41 31 2F 34   4 crunch.;$;A1/4
  39. 00000160   2F 30 37                                           /07
  40. 首先文件头是一个标志:FAS4-FILE,确保是fas文件,Do not change it!提示不要修改他,前两行解决了
  41. 下面看第三行:
  42. ..1..1 $ $..82 4  
  43. 第一个1是用户自定义函数代码的长度,第二个是字符串个数,如果都是1的话代表没有定义函数,由于刚才我们只写了一句代码,所以没有自定义函数,如果有defun语句的出现,这里就不是1了。
  44. 82:代表包括字符串在内的所有初始化代码的长度,包括这一句(alert "hello world"),注意这里是十进制表示
  45. 4:代表字符串的个数,很奇怪,我只有三个字符串,而他确显示4个,如果有研究过的能否指出是否正确,注意这里是十进制表示
  46. 下面解读第四行:
  47. 00000048   20 24 13 FF 73 54 E7 4B  31 6F 15 38 7E 15 43 4A    $.?sT鏚1o.8~.CJ
  48. 第一个字节是20,表示流的开始(流的概念我也说的不是很清楚,感觉这样表述比较贴切,也就是说一段代码的开始),后面是我们需要的代码,而现在看起来什么都看不出来,不急,我们待会再来讲怎么解码的。那么这段代码有多长呢?刚才在第三行我们看到了:82是代码的长度,所以这段代码的长度是82个字节,我们从00000050开始选择82个字节长度的区域,复制下来得到如下:
  49. Offset      0  1  2  3  4  5  6  7   8  9 10 11 12 13 14 15

  50. 00000048         13 FF 73 54 E7 4B  31 6F 15 38 7E 15 43 4A     .?sT鏚1o.8~.CJ
  51. 00000064   4B 52 49 4E 28 64 3F 58  CF 43 55 E7 2C 30 5D 0F   KRIN(d?X螩U?0].
  52. 00000080   12 26 67 27 77 66 68 69  6D 63 30 32 07 FE 76 55   .&g'wfhimc02.U
  53. 00000096   ED 78 6D 5D 07 51 47 14  42 11 0D 1A 4E 0F 62 31   韝m].QG.B...N.b1
  54. 00000112   71 1B EA 73 55 E7 79 38  5E 07 18 4E 16 43 24 06   q.阺U鐈8^..N.C$.
  55. 00000128   1A 0D 08 74                                        ...t
  56. 最后一个字节是74,看一下后面跟的是:字节15 ,注意这里是16进制表示,0x15=21(整数),这个表示解码密码的长度,也就是说后面长度0x15的流是密码,得到如下(用来解码刚才那82个字节长度的流):
  57. 4A4DB3C194730A3B66617334206372756E63680A3B
  58. 后面$是一个结束标志,十六进制为24,然后跟的是fas文件编译的年月日

  59. 有一点要说明一下:这个密码是随机的,大家编译得到的和我的略有不同,所以被加密后的代码上可能和我的不同,这不妨碍我们研究
复制代码

点评

我想要什么,自己写,纯ALISP,不行就加VLISP,不够 美观就自己 写DCL,又不是不会  发表于 2014-6-23 21:38
发表于 2014-6-23 23:33:38 | 显示全部楼层
lucas_3333 发表于 2014-6-23 20:47

很久的文章了,有些表述不太对

点评

有没有新的文章发表?  发表于 2014-9-9 14:53
发表于 2014-6-24 08:23:03 | 显示全部楼层
cnks 发表于 2014-6-23 23:33
很久的文章了,有些表述不太对

无意中浏览到的,偶是门外汉,转上来,仅供参考!如有得罪,敬请谅解!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-27 11:02 , Processed in 0.179891 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表