饿...本来想还是自己注册个号的,取个有点个性点的名字,结果发现今天不能注册 [s:70]7 v) V4 X a; e6 u4 X5 }
+ T8 x) Q1 D' a( t
PS.一下,偶是粥粥兽啊,HOHOHOHO* V. ?0 ?1 i& }7 Q# v
2 i* Q/ P) `8 ]& d0 \5 p那么就来说一下我对大鱼游戏中经常出现的xmle文件的发现吧% M5 o; e, f9 C
因为一个偶然的巧合,咖啡发给我的游戏里有个XML文件夹,我粉高兴,觉得这下肯定很好解决了,结果打开一看) q$ r% s5 X2 U* ]! w
却是xmle文件,改成xml却也是打不开
6 K* X v! N) q( L$ |) x& O f: z& S* c$ f
用CT打开一看才发现这哪是XML啊( L$ ~' i0 o7 H/ r* E5 x
网上查了查无果,可琢磨着,这不是XML为什么要放在XML文件夹呢,于是我再次运用CT,盯着那些文件看,总算发现/ g/ c1 Z! Y$ a: k; `
他们的文件头6 \7 G" b# i/ Z4 @
=>ylm!wdsrhno<#0/1#!dobnehof<#tug,9#>?) c% a$ E8 Z' q0 V* H
感觉有<有>还有?怎么看都有点像是XML文件的开头啊,怎么回事呢?于是我找来了份XML文件做比较
2 O/ K7 N+ k. d: G, d一开始还没发现这么明显的破绽,哈哈,硬是对着ASCII表去看的,发现5 F* _5 F& z- g
=<, >和? 都在一块,才发现原来只是+1的关系啊
6 K' O ?; ?3 B. K0 c原来没看仔细,哈哈,破解一下后还不对再仔细研究的时候发现了这个秘密(已经圈出)
! f7 B- x/ ~9 N8 v. z8 b一开始还没看懂呢,心里纳闷,怎么一会儿是+1一会儿是-1,到底是怎么回事呢?这么没规律,后来追踪了某个字母(好像是e)3 o$ I2 @6 l+ a* Y; |9 Y/ j/ e
才发现在那文件里,e一直是+1的,8 s8 O: ~2 B+ @% [- i
8 I: P: ^. w6 o才发现原来从xmle到xml的转换完全是按照ASCII代码来的
# c" s& {0 L& G2 n3 N+1 -1 是看ASCII的单,双数决定 (不好意思,我记性不好,又忘了哪个是+哪个是-了...后来写CODE也是....只能在解开来发现不对再改一下.....)
0 Y3 W3 b! d, B9 P5 P, }# r& l- K
于是我就开始写代码了,很简单的C++代码" C t. N# D! E( P f* I" Q
% B, Y$ G1 K7 Z+ E1 Pint main()0 Y' @6 ]/ u& d5 Y( ]* E
{0 W( ?0 {; F% F- i( e
fstream fin;1 p: X9 N$ F! u0 T' r' B
fstream fout;7 O& P7 H& z: A; f
//right now we are decoding *e files
8 D; @2 ^" Q. w( X# B, m- h( M fin.open("test.xml",ios::binary|ios::in);
0 ^) O4 h: M% M/ d' @$ n! E' {3 H fout.open("text.xmle",ios::binary|ios::out);
0 r H' ^8 I# h( E* T* t \+ {6 X* _5 t: o# j' H4 L' @- L
if (!fout.is_open()) printf("outfile cannot be opened\n");
' V; ]% p/ F9 m) m9 E `: A/ r$ d$ k. L' t
fout.seekp(0,ios::beg);1 R: k- H) t- p: `. J- A
fin.seekg(0,ios::end);. L4 {0 f5 p; E3 X* n; O( m3 G1 j
int size = fin.tellg();/ B6 l8 P$ Z9 S6 [* N1 ? e
fin.seekg(0,ios::beg);+ @, B9 S; m: a$ P7 ]
5 e( w8 o3 t( a2 K# } char *buffer;# L9 Z/ e8 u* x9 `8 v Q
buffer = new char[size];8 C8 L/ w3 ?9 Y( x
fin.read(buffer,size);
9 M. o7 w4 |$ \4 Y! r$ o0 P printf("size = %d\n",size);! k8 Z) a8 I7 T* i, T" Y
int count;4 R; L2 g" k B' T4 |' W! {7 P
for (int i = 0;i<size;i++)
) v4 U) y/ n7 l# c0 F {, r x; P4 X$ d- N; `
//encoding2 p6 Q, E4 d/ ~2 z
if ((buffer % 2) ==0) fout.put(buffer+1); //if even subtract one
9 ]1 e" t& D" q' N else fout.put(buffer - 1); //elsewise we add 1' Z, q1 i* }, M- D" B6 b* M
}
/ B7 h/ w% A" b5 x4 P- S; E
3 D- u6 R9 L- D2 X) b fin.close();
, w" A& } }$ m: E: | fout.close();8 F) I9 N( J- k5 j4 H% ]: x
}9 S1 p' e& @& h- Z
) I7 X3 M) \5 W- o3 Y3 ?% f, p
那么,需要破xmle文件的朋友们,enjoy |