请看一下这个/ W( b; J% A8 t( Y. M
https://www.chinaavg.com/read.php?tid=209782 y7 h8 x8 o- w& P! Y2 F4 P% x& q6 g
! X$ \3 X+ a p/ m
这是一段解vbf文件的代码$ u# h( h' \' c' a/ \1 z& T
int vxbg_extract(FILE *fd) {
3 G1 _: m) c! P) H1 ~ u32 offset,6 ~1 w6 d ^" Z/ D" R M; a
start,
2 N2 P6 m6 | ~" N. r( j size;. d7 v1 Q# t+ W' F7 ^6 Z* L
int i,
, L' t& o0 U1 l' [. u | c,
! F8 b+ t; t x0 Z. d9 p+ A files = 0;
0 K K* N4 a: Q& b1 v/ y# A q0 n" E- w u8 fname[BUFFSZ + 1];: a4 G2 ^# N4 h
6 W# b4 q# Q8 {0 U( c8 X( M- M/ I fseek(fd, 4, SEEK_SET);
3 }0 T$ i' V! `9 \) c if(FREAD(&offset, 4, fd)) goto quit;6 [$ h& v* M; l4 j" i& y% h9 f- G
5 \" | K/ A' N5 M; z& r
printf("\\n"4 {* f3 k* _ `% A1 |& U F( H
" offset size filename\\n" k- @% V. }! M- M2 R
" ----------------------------\\n");+ @5 l t/ V/ y/ Z; k
5 [) v, a2 H% w' E offset += 8;4 d+ l* I }+ p: V b! G
for(start = offset; ftell(fd) < start; offset += size) {% z) ?! } Q {% s/ [
for(i = 0; i < BUFFSZ; i++) {- d* u- O3 U4 y; \
c = fgetc(fd);
% _+ S8 p. E2 I' t. D9 O fname = c;& v" v+ F) Z. Q8 O
if(!c) break;
1 S' b3 {4 y( \2 ^4 ~. {! G+ c& v if(c < 0) goto quit;
+ s5 a& Y& L5 }& L# ?2 Z }
5 P- n6 ~' s4 S if(FREAD(&size, 4, fd)) goto quit;
5 H" I5 N1 R$ P1 b5 y& n9 L
. q+ h j: T$ m; p+ m6 b- |$ v4 H$ s printf(" %08x %-10u %s\\n", offset, size, fname);, o' f6 A; k6 k) B0 l& E
if(!listonly) getfile(fd, fname, size, offset); v# Q- b3 L$ A$ f8 e
files++;
. r1 ]! C; J H1 `9 ^2 S( ^ }
1 A. x; H& _: [4 G- {, Yquit:/ q; E! Z! t9 ]
return(files);9 F% ]4 E6 e, k/ [! Q
} |