本帖最后由 fux2 于 2012-3-29 15:33 编辑
由于咱这里没学过C语言,只能看书照着写了一点代码,但是输出有点小问题,麻烦各位帮忙看一下。
通过反汇编咱这里得知了rgss3a文件名的算法,但是输出的时候会输出几个诡异的字符,不知道原因为何。
拜谢!
(数据部分解密就不公开了谢谢合作。)
#include<stdio.h> #include<conio.h> void main() { FILE *rgss3a; int point=0,rsize=0; int key,magickey,i; int filehead[4]; int *s; char *cname; if((rgss3a = fopen("Game.rgss3a","r"))==NULL) { printf("当前目录找不到Game.rgss3a文件.\n"); }else{ point=8; fseek(rgss3a,point,0); fread(&key,4,1,rgss3a); magickey = key*9+3; point += 4; start: for(i=0;i<4;i++) { fseek(rgss3a,point,0); fread(&filehead[i],4,1,rgss3a); filehead[i] = filehead[i]^magickey; point += 4; } if(filehead[0] != 0) { rsize = filehead[3]%4==0?filehead[3]/4:filehead[3]/4+1; s = new int[rsize]; cname = (char*)s; for(i=0;i<rsize;i++) { fseek(rgss3a,point+i*4,0); fread(&s[i],rsize,1,rgss3a); s[i]=s[i]^magickey; } cname[filehead[3]] = 0x0; printf("%s\n",cname); point += filehead[3]; goto start; } getch(); } }
#include<stdio.h>
#include<conio.h>
void main()
{
FILE *rgss3a;
int point=0,rsize=0;
int key,magickey,i;
int filehead[4];
int *s;
char *cname;
if((rgss3a = fopen("Game.rgss3a","r"))==NULL)
{
printf("当前目录找不到Game.rgss3a文件.\n");
}else{
point=8;
fseek(rgss3a,point,0);
fread(&key,4,1,rgss3a);
magickey = key*9+3;
point += 4;
start:
for(i=0;i<4;i++)
{
fseek(rgss3a,point,0);
fread(&filehead[i],4,1,rgss3a);
filehead[i] = filehead[i]^magickey;
point += 4;
}
if(filehead[0] != 0)
{
rsize = filehead[3]%4==0?filehead[3]/4:filehead[3]/4+1;
s = new int[rsize];
cname = (char*)s;
for(i=0;i<rsize;i++)
{
fseek(rgss3a,point+i*4,0);
fread(&s[i],rsize,1,rgss3a);
s[i]=s[i]^magickey;
}
cname[filehead[3]] = 0x0;
printf("%s\n",cname);
point += filehead[3];
goto start;
}
getch();
}
}
|