冒险解谜游戏中文网 ChinaAVG

标题: xmle文件的破解 [打印本页]

作者: scgame    时间: 2010-3-30 08:20
标题: xmle文件的破解
饿...本来想还是自己注册个号的,取个有点个性点的名字,结果发现今天不能注册 [s:70]% z* q7 R4 n+ i) @1 ^$ h4 ?
: B" _- M: o3 K2 O8 Q) v& O
PS.一下,偶是粥粥兽啊,HOHOHOHO2 l+ r  I2 W* P, c: F7 d% H
# n8 w3 K' r' f: }5 h
那么就来说一下我对大鱼游戏中经常出现的xmle文件的发现吧1 ]3 b/ {7 Z" t# i/ ]
因为一个偶然的巧合,咖啡发给我的游戏里有个XML文件夹,我粉高兴,觉得这下肯定很好解决了,结果打开一看
1 n' ]* x* E% I& j却是xmle文件,改成xml却也是打不开+ f4 @% d8 e9 {( y% m

2 [9 l# Z1 w* C* Y用CT打开一看才发现这哪是XML啊
8 A/ j- t: K+ h/ T( S9 J# W1 {网上查了查无果,可琢磨着,这不是XML为什么要放在XML文件夹呢,于是我再次运用CT,盯着那些文件看,总算发现
/ |7 V5 n, J& a) A0 d& Z' b# M$ Y他们的文件头
/ \) I, I+ [1 y; O. B1 T3 Z=>ylm!wdsrhno<#0/1#!dobnehof<#tug,9#>?
1 r7 [3 q1 o  F5 B3 ?: d  T. X感觉有<有>还有?怎么看都有点像是XML文件的开头啊,怎么回事呢?于是我找来了份XML文件做比较
- z" _4 M8 k; d; b' [* h一开始还没发现这么明显的破绽,哈哈,硬是对着ASCII表去看的,发现& z4 h: p& T9 T4 Q5 D
=<, >和? 都在一块,才发现原来只是+1的关系啊
7 A$ n! Z+ ?' y. z原来没看仔细,哈哈,破解一下后还不对再仔细研究的时候发现了这个秘密(已经圈出)$ O7 L3 O6 c* r4 C# e
一开始还没看懂呢,心里纳闷,怎么一会儿是+1一会儿是-1,到底是怎么回事呢?这么没规律,后来追踪了某个字母(好像是e)
% Q5 x: W$ e& {) r6 i才发现在那文件里,e一直是+1的,
  w( _8 j$ D) |
) J+ ?- \( [8 K3 w) f) U7 j才发现原来从xmle到xml的转换完全是按照ASCII代码来的7 I7 {2 w1 z( y& u) V
+1 -1 是看ASCII的单,双数决定 (不好意思,我记性不好,又忘了哪个是+哪个是-了...后来写CODE也是....只能在解开来发现不对再改一下.....)8 b0 v& d* b4 A3 i9 P" D
  c- n; w. }8 Y& S+ ^5 a7 ?
于是我就开始写代码了,很简单的C++代码% i  K: `8 w- A2 `) g( _% o

& w; r2 n- [/ ]1 s0 V" Qint main()
. y, V! z) H8 r6 r{% ~3 n/ Y- {* R; m  t% R5 T
    fstream fin;6 \0 W% Y, v  c; h; M
    fstream fout;
9 a+ w( A! D: A( Y; B/ b8 ]    //right now we are decoding *e files
/ i6 A% M1 @4 w, O    fin.open("test.xml",ios::binary|ios::in);0 a6 E0 c& m1 {( O# `$ J
    fout.open("text.xmle",ios::binary|ios::out);( I$ M% r7 v9 E: u/ q+ u7 j" H5 c

% u/ L7 |4 C, L# X6 z/ a2 k    if (!fout.is_open()) printf("outfile cannot be opened\n");
# {( P: }0 U" ?4 a& R
% |8 ^; n. `5 c2 `& g. L7 e9 ~    fout.seekp(0,ios::beg);
2 m- R+ K- h3 m/ H5 G0 `! x" U    fin.seekg(0,ios::end);
5 H( A! G8 J$ i/ b2 F1 J: S    int size = fin.tellg();
) Z8 l& C* w& [% |1 p    fin.seekg(0,ios::beg);
, o, J3 H  q; B0 y% G& s7 s6 ~3 x: p' W5 @/ k- w5 ^
    char *buffer;
3 ?  U: t2 @! a: D' f7 Y" Y    buffer = new char[size];
8 l# E( `! S! A4 J3 D    fin.read(buffer,size);
7 L9 {6 ]2 Q$ b! K: \    printf("size = %d\n",size);
% `. l( U" f$ f' X. g- a    int count;
- H- ~5 T4 d8 O; _& K5 ]    for (int i = 0;i<size;i++)+ k+ L) d, U% R
    {1 y# a" `+ A/ g
        //encoding" g& {2 i$ Y; k& S8 H" m- w, u2 q7 F; _
        if ((buffer % 2) ==0) fout.put(buffer+1); //if even subtract one
/ G2 b$ Z* }1 i+ ^        else fout.put(buffer - 1); //elsewise we add 1/ _) A! A% o" {+ h4 [
    }
7 H, c( P# C8 A, w
: t! F! ]9 ^; k1 G4 d; u    fin.close();
3 {& B" s3 o1 d$ p! B/ c    fout.close();/ a. E, ^* x% b6 ^/ _: D5 v
}; ^  T1 P  i+ H1 i8 r9 y
. ^8 ]: K  d, ^. ]8 C% `% B/ F* e
那么,需要破xmle文件的朋友们,enjoy
作者: shane007    时间: 2010-3-30 11:40
非常感谢粥粥兽给我们带来这么精彩的汉化分析贴。) u, ~5 g( _9 J! s  E
枫叶给加威望吧。
作者: woliu    时间: 2010-3-30 12:18
那它的字体文件呢?一般也不是标准的官方后缀,粥粥兽继续拓展分析一下
作者: scgame    时间: 2010-3-30 20:34
xmle只是XML文件,只是配置而已,字体文件就不一样了! A% g2 W; h8 Z) U$ r  s

" ?& P, _8 J  N, G不过我上次看到的那个游戏BT的很,连JPG,DDS都带这样编码的...至少我觉得是,因为后面都带了个e,不过我没仔细检查,估计是一样的 [s:73]
作者: woliu    时间: 2010-3-30 21:29
粥粥兽做个还原程序和加密程序放上来吧,要能批量操作文件夹内全部文件的~~~~
5 q/ V+ U5 i  [3 j2 u; e7 @7 [; t7 @3 v9 ?# m2 f
感谢




欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/) Powered by Discuz! X3.2