最近想破译一个文件的存储规则,会一些C#,不是专业计算机出身,希望大家能帮忙解答一下。
我们知道所有文件都是通过字节存储在计算机中,有些文件存储是有公开规范的,比如.TXT,.JPG等。但是更多专有文件是不公开的。
我最近的想破解的是一个工业机器人的控制指令程序文件,这家机器人的程序有两个格式,这两个格式在他们公司专有的软件中可以互相转换(当然要收费)。
这两种文件格式他们自己称为“ASCII文本格式(.LS)”和"二进制文件(.TP)",前者可以用记事本直接打开,后者只能放到机器人中才能打开。
我先拿我测试的一个文件给大家看看,下面是LS格式的文本,该文件为:974字节,程序名是OFFS。
/PROG OFFS
/ATTR
OWNER = MNEDITOR;
COMMENT = "Offest X Y Z R";
PROG_SIZE = 522;
CREATE = DATE 21-03-11 TIME 10:02:16;
MODIFIED = DATE 21-03-11 TIME 10:03:22;
FILE_NAME = OFFEST;
VERSION = 0;
LINE_COUNT = 14;
MEMORY_SIZE = 838;
PROTECT = READ_WRITE;
TCD: STACK_SIZE = 0,
TASK_PRIORITY = 50,
TIME_SLICE = 0,
BUSY_LAMP_OFF = 0,
ABORT_REQUEST = 0,
PAUSE_REQUEST = 0;
DEFAULT_GROUP = 1,*,*,*,*;
CONTROL_CODE = 00000000 00000000;
/APPL
HANDLING : TRUE ;
/MN
1: !******************************** ;
2: !R[10] OFFSET PR CHANGE ;
3: !PR[R10] XYZR OFFSET CHANGE ;
4: !READ IN Parameter ;
5: !******************************** ;
6: ;
7: ;
8: R[10:OFFEST PR NUM]=AR[1] ;
9: PR[R[10]]=LPOS ;
10: PR[R[10]]=PR[R[10]]-PR[R[10]] ;
11: PR[R[10],1]=AR[2] ;
12: PR[R[10],2]=AR[3] ;
13: PR[R[10],3]=AR[4] ;
14: PR[R[10],6]=AR[5] ;
/POS
/END
开头的很多行是程序属性,下面带行编号的是控制指令,主要是一些寄存器变量的赋值。
TP格式的文件是269字节,比文本格式小了很多,可以肯定不是按照上述文本格式存储的。我导入过机器人,程序名、注释、时间、指令等这些都在。
我用C#中的FileStream把TP文件转成字节组,如下,共269字节。
[254 239 0 1 0 0 1 159 255 0 0 4 0 79 70 70 83 252 220 255 224 253 255 255 1 0 76 77 255 78 69 68 73 84 79 82 0 255 0 79 102
102 101 115 116 32 63 88 32 89 32 90 32 36 0 236 241 191 2 10 82 107 80 72 61 0 107 254 233 244 14 0 0 3 70 0 1 226 237 240
50 231 246 82 1 81 2 255 255 2 207 0 34 30 42 111 15 125 10 0 0 255 24 30 82 91 49 48 93 32 254 242 241 69 84 32 80 82 32 67
255 72 65 78 71 69 0 0 28 223 30 80 82 91 82 149 1 88 89 243 90 82 152 5 163 5 19 30 82 69 255 65 68 32 73 78 32 80 97 255
114 97 109 101 116 101 114 0 220 108 15 126 15 0 1 255 1 17 9 3 191 2 0 10 100 62 2 81 0 7 255 4 2 128 10 100 50 7 0 105 14
20 18 20 17 102 20 17 0 12 20 17 84 15 16 13 17 2 43 21 2 13 17 3 43 21 213 3 13 17 4 43 21 6 13 17 5 255 223 255 3 255 255
4 81 1 12 76 220 165 0 242 240 69 83 84 234 243 12 77 23 85 65 80 237 240 8 20 3]
因为该公司喜欢使用ASCII码,而原始ASCII是128位,这里面很多都超过了127,我就去看扩展ASCII码,它是256位。但是对照发现很多都是奇怪符号。我直接用 Encoding转了一下,果然有很多乱码。如下。
我对计算机了解不多,所以特别想知道一般的文件到底是怎么存储读取的,是把二进制通过ASCII、UTF8、UNICODE码转成字符,然后执行?还是说没有特性要求,我认为字节80是啥意思就是啥意思,根本不管这些标准编码。
?? ?? OFFS??????? LM?NEDITOR ? Offest ?X Y Z $ ???
RkPH= k??? F ???2??RQ??? "*o}
?R[10] ???ET PR C?HANGE ?PR[R?XY?ZR??RE?AD IN Pa?rameter ?l~ ? ?
d>Q ??
?????QL?? ??EST??MUAP?
劝贴主还是放弃吧。
这个通常都是调用软件狗内部的算法解密的,你没有软件狗,基本不可能解密。