冒险解谜游戏中文网 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.一下,偶是粥粥兽啊,HOHOHOHO
2 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" Q
int 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; e
7 @7 [; t7 @3 v9 ?# m2 f
感谢
欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/)
Powered by Discuz! X3.2