一、关于二进制文件逆向解析
cad的二进制文件逆向解析和常规的二次开发是不同,二次开发是依托于cad软件平台和接口进行数据导出、菜单UI设计等操作的,而逆向解析是脱离软件和接口,直接面向cad的二进制文件进行解析、提取数据等操作。在这里我们来浅聊一下creo软件的文件逆向解析方法。
二、解析流程
creo的二进制文件解析主要分为两个阶段:把二进制文件(.prt)翻译为可读的文本文件;根据文本文件中数据块的格式翻译提取出我们需要的cad数据。在这里我们只讲第二阶段,第一阶段不是我们要讲的内容。
三、文件结构
creo文件的内容按顺序分为三部分:文件头、数据块索引和数据块。这里重点谈一下数据块的解析,因为文件头和数据块索引不太重要,没有太大价值。
文件头
文件头在文件的首部,主要包含日期、版本、零件名称等信息。
数据块索引
数据块索引就是包含各个数据块的名称、在文件中的位置、数据块大小等信息。
数据块
数据块是存储某类cad数据的一段文本。像VisibGeom数据块是存的cad模型的三维可视化数据,Note数据块存的模型的注释数据。
每个数据块都是以 “#” + 数据块名称 开始,直到下一个数据块的 “#” + 数据块名称 之前结束。
数据块里的数据由两部分组成:
第一部分包括一个属性关键字、数据的属性id、数据类型。属性关键字用@+名称表示,数据的属性id就是一个数字,一个数据块里相同类型的数据的属性id是相同的,比如颜色数据会存在多个,那这些颜色数据的属性id都是相同的。数据类型则是有固定含义,0代表这个数据是一个对象或者指针,1代表是整形数据,2代表是浮点型数据。
第二部分的起始也是两个数字:第一个数字表示该数据所在层级,比如一个对象或者结构体的数据层级是2,那么它里面的成员变量所在的数据层级就是3;第二个数字还是表示数据的属性id,和第一部分的属性id是保持一致的。第二部分的两个数字之后就是具体的数据了。
结语
以上就是creo文件及数据块格式的解析方法,这里只是简单介绍了一下,没有过多深入,后续会继续写相关的深入一点的文章,欢迎大家前来交流和指点。