饿...本来想还是自己注册个号的,取个有点个性点的名字,结果发现今天不能注册 [s:70]
/ B+ `/ Y; p" k
; l* S8 Q1 Q* f6 uPS.一下,偶是粥粥兽啊,HOHOHOHO. n+ ?8 y: @! s1 j5 x% E: Y5 l
* j. Z& O3 Y* L0 g% a0 X' d那么就来说一下我对大鱼游戏中经常出现的xmle文件的发现吧 ~" _$ N. k0 l q( J
因为一个偶然的巧合,咖啡发给我的游戏里有个XML文件夹,我粉高兴,觉得这下肯定很好解决了,结果打开一看
* ]' s) t; r& M5 Z; M却是xmle文件,改成xml却也是打不开/ K" N$ {! u) m# C3 M
5 T" a0 I* _6 W& h用CT打开一看才发现这哪是XML啊- n7 a7 V! m. V n; t7 z& O
网上查了查无果,可琢磨着,这不是XML为什么要放在XML文件夹呢,于是我再次运用CT,盯着那些文件看,总算发现( l( T# R7 h7 K" L1 z
他们的文件头) f ^+ s, u+ ?% t. o
=>ylm!wdsrhno<#0/1#!dobnehof<#tug,9#>?
9 N: a" t& ]! k0 {. G L, T感觉有<有>还有?怎么看都有点像是XML文件的开头啊,怎么回事呢?于是我找来了份XML文件做比较6 v1 E" Z. {3 S6 R4 s% t
一开始还没发现这么明显的破绽,哈哈,硬是对着ASCII表去看的,发现
. p7 ^3 m" G. w3 w9 w3 C, u' T=<, >和? 都在一块,才发现原来只是+1的关系啊3 E+ h$ ?/ t, G- k
原来没看仔细,哈哈,破解一下后还不对再仔细研究的时候发现了这个秘密(已经圈出)
9 ?2 O4 }: Q3 H% [! a' E一开始还没看懂呢,心里纳闷,怎么一会儿是+1一会儿是-1,到底是怎么回事呢?这么没规律,后来追踪了某个字母(好像是e)* g0 I2 i$ _& L; D) A
才发现在那文件里,e一直是+1的,
n- F$ D: e! s+ J" E" v9 i; ]# ]% A* V8 }' m3 ^% S" Z4 Q! d, G- f
才发现原来从xmle到xml的转换完全是按照ASCII代码来的
' P8 ?: l8 q; ~2 p3 r+1 -1 是看ASCII的单,双数决定 (不好意思,我记性不好,又忘了哪个是+哪个是-了...后来写CODE也是....只能在解开来发现不对再改一下.....)
5 i r- F/ R9 M) [* Z$ X
8 a! G3 G7 f" g2 w3 z1 ^( U于是我就开始写代码了,很简单的C++代码 u" w6 ?. M" ~; t7 D1 N4 M, v
; V& l+ |4 m% Cint main()- k+ r0 U( t7 h S
{
0 r0 X8 L3 T- Q F1 j$ L fstream fin; F; Z: V# {0 Y" d
fstream fout;
8 T# |& h, w& f //right now we are decoding *e files
2 H) @4 m6 L+ `+ v$ G4 x fin.open("test.xml",ios::binary|ios::in);
. `" y p" d( N- q G3 g fout.open("text.xmle",ios::binary|ios::out);7 t0 Q" H2 v7 g
4 {. }" a. U8 ~: W( Z3 ?/ U K
if (!fout.is_open()) printf("outfile cannot be opened\n"); a( \2 [/ v* `5 F6 M6 C2 y+ b l
2 {9 P! k$ Z- r1 m8 r" Y
fout.seekp(0,ios::beg);
/ U) p. t: k( g$ b6 T fin.seekg(0,ios::end);
' C: g8 Z+ X. K# j# u int size = fin.tellg();
8 K1 @) o% Q w+ Z. W( i fin.seekg(0,ios::beg);
5 R' l5 k6 h1 {7 |9 d5 L# o* ~
\6 }$ |2 r4 \" m' f char *buffer;) x9 I+ ^; T) _# m! {5 O
buffer = new char[size];
3 M7 L/ ]2 p2 c3 c7 l fin.read(buffer,size);/ p. B$ ~4 S5 |9 G# p; G- V) b
printf("size = %d\n",size);- P0 z% p. G1 Q, ]+ F0 x5 c) r7 ~
int count;
- d, Q# @: d% P0 d4 q for (int i = 0;i<size;i++)
/ g6 q+ _) C( J) p6 W% z( \ q* u {0 X" c0 C1 R/ a2 P7 {+ ~+ j
//encoding+ H8 u0 i6 r/ o( H4 Z3 ?3 T; e
if ((buffer % 2) ==0) fout.put(buffer+1); //if even subtract one
. m0 i8 _5 s) t* w else fout.put(buffer - 1); //elsewise we add 1
: X, D7 f! }# V, G$ G }9 |& Q5 r0 T* X0 W
+ O( C7 ]# D: O5 b
fin.close();
* `% w, s4 s/ T+ X4 O# r fout.close();
. B2 f. ]* {: o5 q- ]}- m, T5 t! I0 G; W9 D/ D
' f0 m5 c5 E2 K3 j% `那么,需要破xmle文件的朋友们,enjoy |