这代码我网上看到了,直接拿来利用,我一般是把16个字节改成64字节,把要xor的改成animation.cfg,然后生成个test文件,用16进看看数据那个像吧。
2 X. s* }; @- x0 I: y( |5 P+ ]: G2 w( W
懂的参考修改完善出工具吧8 o5 D: [. ^2 W$ q" v
; Q9 n+ @+ D7 j( X
7 c/ x: }& k0 w" G
# i6 i" t3 U& U: u5 k- e#include<stdio.h>/ g; }& G$ P8 Y0 Y! U1 T% k/ o4 O
#include<windows.h>
0 U8 s2 y& I8 W7 ~% t2 @% E$ imain(): O& z h; H: L0 O; t. x" R" `% U: m
{- P1 d2 I Y: a- L. Q/ |. K: h L* o1 j
FILE *fp,*fp2;
8 m; i9 q2 m% ^, N2 Y. W- Iint i,j; //i用作记录0到255之间任一个数,j用作记录当前XOR的字节位置- r& R- _! _1 s4 d% C: a' y/ T" t9 B
byte *buffer,*buffer1,*buffer2,*buffer3;//指针buffer和buffer1一组,制作buffer27 |. [ L- ~& C/ r* k9 h& `0 j [
//和buffer3/ c, m% W% G. N# N# O* M4 F0 C! O
//一组,buffer指针会变动,buffer制作永远指向# r0 o# u" x& c: r" d
//buffer的第一个字节位置,buffer2和buffer3同样道/ Z6 {( E: L# D) f: \6 k
//理
) V' y% w" Z7 ^/ b( S, ebuffer =(byte*)malloc(16); //分配16个字节给buffer指向的位置
6 w& \9 ~% r9 v# ]6 O& i: k1 y9 Mbuffer2 =(byte*)malloc(16*256); //分配16*256个字节给buffer2指向的位置
8 O' j7 d! O" {; `8 s' J* efp = fopen("animation.cfg", "rb");//打开怀疑加密了的文件* e0 T: q# [; B. v( `" A. ]( J
buffer3=buffer2; //buffer3保存buffer2初始时的地址
+ [! v4 j. K& ^2 u/ I5 `for (i=0;i<=255;i++)0 Y: }8 l! Q( k8 D, n( G* E8 r
{: V/ X: k6 ?( ^" c2 l- ~
buffer1=buffer; //buffer1保存buffer初始时的地址
9 I! }) ~) ]- _' k/ u1 Kfseek(fp, 0, 0); //重定位到animation.cfg文件的开头
& U# ^% b; S$ \0 s6 w- X7 Nfread(buffer1, 16, 1, fp); //读取animation.cfg文件的开头16字节数据到buffer
! ^' K- O! ~6 C8 L1 V, d: g% i3 ?for(j=0;j<16;j++)
( k# q! j& W0 ]! V( N. |* U{
" Y4 N. m- O, o- X' h*buffer1=*buffer1^i; //animation.cfg文件的开头第一个字节和0~255之间
" D1 t& g, j0 z //任一个数值异或,结果保存在buffer1所指的位置上+ v+ k0 \5 y' w$ g1 ^
*buffer2=*buffer1; //将buffer1所指向的数据复制到buffer2所指的位置8 q% f8 y+ ~5 A# O# S! r w
buffer1=buffer1+1; //buffer1指针加1,准备读取下一个数据* [3 _/ v" I- M4 v4 e; U' I0 @
buffer2=buffer2+1; //buffer2指针加1,准备存储下一个数据* j# O+ {7 q1 {8 i' n D) ^
}4 w P4 Q: M$ p3 M
}
8 E& }. K* ]- Kfp2 = fopen("test", "wb+"); //打开一个二进制文件,准备将数据写入
2 M4 N: _( G2 a% mfwrite(buffer3, 16*256, 1, fp2);//buffer3保存buffer2初始时的地址,这个语句将4 [& S2 h/ f. k5 h4 ~3 s# F
//buffer2初始时的地址所指的数据,用二进制方式写入/ l; l; T2 k3 }1 j* L" h+ G
//16×256字节. P W! J; `9 e0 s
fclose(fp2); //关闭文件句柄/ H+ g/ `7 }9 @4 F, m( m, f6 \3 W
fclose(fp);
: u1 N9 B3 h+ _+ M- T% A( s7 N
} e p9 `% p( ^
3 H% P- W& X$ e, S2 u, t4 w9 o( m) B- V: c* v
http://book.51cto.com/art/200903/112751.htm |