明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: baitang36

[经验] fas文件格式研究

    [复制链接]
发表于 2018-9-10 21:51:23 来自手机 | 显示全部楼层
baitang36 发表于 2018-9-10 17:00
有点大,600k左右的文件,工程量巨大。

那可以跟踪一下是如何解释执行的
 楼主| 发表于 2018-9-11 06:50:39 | 显示全部楼层
springwillow 发表于 2018-9-10 21:51
那可以跟踪一下是如何解释执行的

用od跟踪过的
发表于 2018-9-11 21:10:41 | 显示全部楼层
主要看看这个lisp代码加密转换成fas格式  是怎么个过程   
发表于 2018-9-11 21:11:29 | 显示全部楼层
现在所有代码都开源了  研究这样的课题  也应该放开了   论坛比较开明了
发表于 2018-9-12 08:27:07 | 显示全部楼层
楼主真牛逼!!!!!!!!
发表于 2018-9-12 13:06:43 | 显示全部楼层
springwillow 发表于 2018-9-10 08:40
楼主很厉害,支持一下。我以前也看过类似的贴子,是用python解密的,也贴出来供大家研究啊!

代码有问题,有没有原贴地址啊?
 楼主| 发表于 2018-9-12 18:36:21 | 显示全部楼层
yxp 发表于 2018-9-8 15:20
你的fas解密后可以运行? 我试了一下我解出来的不能运行。

解密程序下载:   

我找到能运行的关键位置了,就是key的第一个字节是否为0。
解码完成后,把这个字节改成0,acad会直接加载运行它,不需要再解密一次。
如果这个字节不为零,acad.exe就需要先解密它,然后再运行。
 楼主| 发表于 2018-9-12 19:16:30 | 显示全部楼层
本帖最后由 baitang36 于 2018-9-13 05:50 编辑

研究到现在,似乎遇到瓶颈了。
现在可以猜测出很多指令,可以反编译回去,如 09 01 00 06 0200这样的就是(setq xxx yyy)
但如果用程序来反编译,就会遇到大量的未知指令。
程序是没法自己去猜测的。通过试验来确定某个指令编译后的样子也不太靠谱,因为无法做到写出的源代码能够编译出所有的指令,并且这样做效率也太低。
那怎么办?只能通过研究acad.exe对fas文件的调用、处理过程了。
授人以鱼不如授人以渔,把我的方法写出来,感兴趣者一起研究吧。
我的研究方法如下:
运行AutoCAD2008,打开od,附加acad.exe进程,设置打开文件断点bp CreateFileA,然后设置读文件断点bp ReadFile,按F9让CAD正常运行,然后(load “ttt.fas”)加载ttt.fas,程序运行到CreateFileA断点停下,看一下,确实是打开ttt.fas,再按F9,程序停在readfile断点,可以看到是读取1000个字节到缓冲区。
记下缓冲区地址,按Ctrl+F9执行到返回,看一下缓冲区的内容,确实是文件ttt.fas的内容。然后在缓冲区的解码部分(一般是14 01 01 01 00)设置硬件访问断点,程序读取这个位置会停下,发现是调用了memcopy函数,程序VL会把这段内容复制到另一个地址,在这个地址设置硬件访问断点,程序运行到操作这段代码时暂停。
终于找到关键的地方了。这里的程序反汇编是这样的
mov al,byte ptr ds:[edi+esi];读取一个字节
add esi,ebp                        ;计数器加一
movzx ecx,al                      ;字符放到cl中
add ecx,-0x1                      ;字符数值减一
cmp ecx,0x69                     ;比较字符的值是否大于6AH
ja short vl.0C228932           ;大于6A是非法字符,转错误处理
jmp dword ptr ds:[ecx*4+0xC22A328] ;合法指令,转到对应地址去处理
由这段程序可以看出,fas指令的合法字符是01-6Ah,每个指令对应一段处理程序。程序的入口地址存放在[ecx*4+0xC22A328] 处的一张表中,这里的ecx是指令减一,如指令09 处理程序的入口地址就是【(9-1)*4+0xc22a38h】,这是我跟踪时的地址,不同的电脑可能是不同的。
研究这张表中的所有子程序,就可以知道fas的每一个指令是如何处理的。这样就可以充分地了解fas的106个指令。
这是一件很考验毅力的事情。

发表于 2018-9-13 12:00:07 | 显示全部楼层
真正的技术,楼主继续!!
发表于 2018-9-13 12:02:07 | 显示全部楼层
这些函数是基础的LISP函数,有个对应表。早期的研究成果说好像是在FSL文件里面可以找到,当然也可以自己一个个编译找对应,纯粹的体力活。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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