简介:自从有了上次汉化《剑芒罗曼史2》的经验之后,leexuany(小宝)看到没汉化的游戏就有点兴奋。这不,前几天整理光盘发现了一个英文的《X-Change2》,那么再汉化一次看看。调试了半天发现,完全不需要调字体改编码,关键就是xc2.sce这个加密了的脚本文件啦~~
正文:
什么方法加密快,解密也快,操作又简单?
答:非xor莫属!
X-Change2采用了一种类似xor的方法,不过要复杂一点
//加密/解密转换核心
long
change(
long
a,
long
b)
... {
long c;
a&=0xFF;
b&=0xFF;
c=a;
a=a | b;
c=c & b;
c=~c & a;
return c;
}
... {
long c;
a&=0xFF;
b&=0xFF;
c=a;
a=a | b;
c=c & b;
c=~c & a;
return c;
}
用a加密b得到c,再用a加密c又得到b啦
当然具体代码中还要筛选参数a,如下:
void
xchange(
const
char
*
s1,
const
int
c1,
const
int
c2,
char
*
p1)
... {
int si,pi;
long tmp_si; // [esp+10]
int last_si; // [esp+C]
int tmp=0,tmp2=0;
long arg_a,arg_b,arg_c;
si=0; // 解密/加密字符串临时指针
pi=0; // [esp+14]已处理的字节数
tmp_si=0;
last_si=0;
while(pi<c2)
...{
tmp=tmp_si+pi;
si=tmp%c1;
tmp2=last_si & tmp_si;
arg_a=*(s1+si) | tmp2;
arg_b=*(p1+pi);
arg_c=change(arg_a,arg_b);
*(p1+pi)=arg_c & 0xFF;
if(si==0)
...{
tmp=tmp_si+last_si;
tmp=tmp%c1;
last_si++;
tmp_si=*(s1+tmp);
}
pi++;
}
}
... {
int si,pi;
long tmp_si; // [esp+10]
int last_si; // [esp+C]
int tmp=0,tmp2=0;
long arg_a,arg_b,arg_c;
si=0; // 解密/加密字符串临时指针
pi=0; // [esp+14]已处理的字节数
tmp_si=0;
last_si=0;
while(pi<c2)
...{
tmp=tmp_si+pi;
si=tmp%c1;
tmp2=last_si & tmp_si;
arg_a=*(s1+si) | tmp2;
arg_b=*(p1+pi);
arg_c=change(arg_a,arg_b);
*(p1+pi)=arg_c & 0xFF;
if(si==0)
...{
tmp=tmp_si+last_si;
tmp=tmp%c1;
last_si++;
tmp_si=*(s1+tmp);
}
pi++;
}
}
s1是解密用字符串"crowd scenario script"
c1是0x15
c2是待加密/解密字符串的长度
p1指向待加密/解密的字符串