明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: baitang36

[经验] fas文件格式研究

    [复制链接]
 楼主| 发表于 2018-9-8 14:47:35 | 显示全部楼层
yxp 发表于 2018-9-7 01:10
按 baitang36 的思路,我试了一下用 lisp 也可以解密 fas,不用汇编程序,降低研究门槛。有兴 ...

很好的试验,解码成功的标志应该是解码后的fas能够加载正常运行,结果正确。
发表于 2018-9-8 15:20:50 | 显示全部楼层
本帖最后由 yxp 于 2018-9-8 15:22 编辑
baitang36 发表于 2018-9-8 14:47
很好的试验,解码成功的标志应该是解码后的fas能够加载正常运行,结果正确。

你的fas解密后可以运行? 我试了一下我解出来的不能运行。

解密程序下载:   
运行后解密出来的fas和你的一样,除了随机key不一样。如下



但是运行时出现错误: Xsubr(L) 指令 (偏移代码) 错误:  0 193

我再看看.


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2018-9-8 15:40:13 | 显示全部楼层
本帖最后由 baitang36 于 2018-9-8 15:52 编辑

现在开始研究字符串在fas文件中的存放
先看小程序:
(princ "555555555555")
(princ "333333333333")
(princ "222222222222")
(princ "11111111111")
这小程序没有定义函数,只是显示几个字符串。
先用到的字符串放到后面,后用到的在前面。
可能大家会感到奇怪,为什么没有“44444444”?
是给princ留着,第四个字符串就是princ,命令也是字符串。
看看编译解码后的fas,是这样的:
Offset          0   1    2   3   4    5   6   7   8   9    A  B   C   D   E   F
00000000   0D 0A 20 46 41 53 34 2D  46 49 4C 45 20 3B 20 44      FAS4-FILE ; D
00000010   6F 20 6E 6F 74 20 63 68  61 6E 67 65 20 69 74 21   o not change it!
00000020   0D 0A 31 0D 0A 31 20 24  20 24 0D 0A 31 35 32 20     1  1 $ $  152
00000030   37 20 24 14 01 01 01 00  32 00 32 2D 2A 39 01 00   7 $     2 2-*9  
00000040   55 03 00 0B 00 31 31 31  31 31 31 31 31 31 31 31   U    11111111111
00000050   0C 00 32 32 32 32 32 32  32 32 32 32 32 32 0C 00     222222222222  
00000060   33 33 33 33 33 33 33 33  33 33 33 33 5B 50 52 49   333333333333[PRI
00000070   4E 43 00 00 55 01 00 0C  00 35 35 35 35 35 35 35   NC  U    5555555
00000080   35 35 35 35 35 01 01 43  00 00 07 00 0A 01 5C 00   55555  C      \
00000090   00 43 00 00 01 00 0A 01  43 07 00 00 00 1C 14 01    C      C      
000000A0   00 00 00 09 06 00 0A 09  05 00 35 01 04 00 03 0A             5     
000000B0   09 03 00 35 01 04 00 03  0A 09 02 00 35 01 04 00      5        5   
000000C0   03 0A 09 01 00 35 01 04  00 03 16 18 00 94 F7 8D        5       旝
000000D0   32 53 23 E3 E9 0A 3B 66  61 73 34 20 63 72 75 6E   2S#汩 ;fas4 crun
000000E0   63 68 0A 3B 24 3B 41 39  2F 38 2F 31 38            ch ;$;A9/8/18
确实按我们设想的顺序排列了,这说明我们的猜想是正确的。
字符串的顺序就是先用到的字符串放到后面,后用到的排在前面。
根据上一次我们找到的规律,程序段是以14开头,以16结尾。从字符串后面开始找,程序段
开始的地址是9E,结束地址是CA。
程序内容是14 01 00 00 00
09 06 00 0A
09 05 00 35 01 04 00 03 0A         
09 03 00 35 01 04 00 03  0A
09 02 00 35 01 04 00 03 0A
09 01 00 35 01 04 00 03 16
掐头去尾,找四个模样差不多的句子。我们大胆猜想一下:
09  05 00 35 01 04 00 03是(princ "555555555555")
09 03 00 35 01 04 00 03 是(princ "333333333333")
09 02 00 35 01 04 00 03是(princ "222222222222")
09 01 00 35 01 04 00 03是(princ "11111111111")
经过修改内容,重新编译解码,证明这猜想是正确的。
这四个句子共同的特点就是:
09 xx 00 35 01 04 00 03
xx正好是我们的字符串顺序,当然,是倒序。01 00 表示0001,就是字符串"11111111111"
04 00表示0004,是princ,和我们预想的一样。
程序段的头是14 01 00 00 00,和以前defun里面的头不太一样,那个是14 00,这里是14 01
09 06 00 0A不知道是什么意思,09和0A应该是指令,06 00像是字符串编号0006,但我们只有5个字符串,怎么会出来第6号?
09 01 00 35 01 04 00 03是(princ "11111111111")从这一句可以看出09这个指令是根据编号01 00取得字符串"11111111111"
35 01这个是执行04 00号命令,也就是princ。
前边几句09 和0A是成对出现的,最后一句没有0A,因此0A可能是另起一行的意思吧?
那03是什么意思?暂且把它当成“)”,以后再研究。






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2018-9-8 15:48:05 | 显示全部楼层
yxp 发表于 2018-9-8 15:20
你的fas解密后可以运行? 我试了一下我解出来的不能运行。

解密程序下载:   

key是循环使用的,用完一遍从头循环,这中间的接茬看看有没有处理好?
发表于 2018-9-8 17:22:47 | 显示全部楼层
解密后应该是不能运行的,因为CAD加载时会再解密一次。
 楼主| 发表于 2018-9-8 18:32:45 | 显示全部楼层
本帖最后由 baitang36 于 2018-9-12 18:37 编辑
kozmosovia 发表于 2018-9-8 17:22
解密后应该是不能运行的,因为CAD加载时会再解密一次。

应该是能运行的


你试试这个

我找到能运行的关键位置了,就是key的第一个字节是否为0。
解码完成后,把这个字节改成0,acad会直接加载运行它,不需要再解密一次。
如果这个字节不为零,acad.exe就需要先解密它,然后再运行。

发表于 2018-9-8 19:54:06 | 显示全部楼层

解密后的fas能不能运行不是重点,能反成lisp就可以。
 楼主| 发表于 2018-9-8 19:57:42 | 显示全部楼层
本帖最后由 baitang36 于 2018-9-8 20:01 编辑
yxp 发表于 2018-9-8 19:54
解密后的fas能不能运行不是重点,能反成lisp就可以。

是的,能运行可以玩破解,修改几个字节就跳过注册。
key的最后一个字节要和第一个字节配合来用。我当初就没处理好,导致解码有错误。
发表于 2018-9-8 20:09:39 | 显示全部楼层
本帖最后由 yxp 于 2018-9-8 20:13 编辑
baitang36 发表于 2018-9-8 19:57
是的,能运行可以玩破解,修改几个字节就跳过注册。

严格的说,世界上没有绝对安全的代码,只要你决心闯入源码,因为 arx 都可以被破译。
世界上的软件大公司都放弃了软件的高强度加密,比如微软,桌子,甲骨文等。
他们选择用法律武器来捍卫自己的知识产权,在欧美打个官司花的钱,远远低于软件的开发投入。
所以这是一个成本问题,而不是技术问题。

但是在中国。。。。。有很多像苏州思杰马克丁这样不要脸的软件公司。
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-9-8 20:12:37 | 显示全部楼层
yxp 发表于 2018-9-8 20:09
严格的说,世界上没有绝对安全的代码,只要你决心闯入源码,因为 arx 都可以被破译。
世界上的软件大公 ...

目前流行的.net 安卓 ios都是可以反编译的,软件越来越大,可维护性更重要。加密势必要降低兼容性,越是大公司越不加密了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 12:24 , Processed in 0.159280 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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