v0.62
This commit is contained in:
parent
f6f5938fe7
commit
efca9adbd4
8 changed files with 80 additions and 61 deletions
45
UnAlz.cpp
45
UnAlz.cpp
|
@ -1,7 +1,13 @@
|
||||||
#include "zlib/zlib.h"
|
|
||||||
#include "bzip2/bzlib.h"
|
#include "bzip2/bzlib.h"
|
||||||
#include "UnAlz.h"
|
#include "UnAlz.h"
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
# include "zlib/zlib.h"
|
||||||
|
#else
|
||||||
|
# include <zlib.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// utime 함수 처리
|
// utime 함수 처리
|
||||||
#if defined(_WIN32) || defined(__CYGWIN__)
|
#if defined(_WIN32) || defined(__CYGWIN__)
|
||||||
# include <time.h>
|
# include <time.h>
|
||||||
|
@ -23,8 +29,8 @@
|
||||||
# include <iconv.h>
|
# include <iconv.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __linux__ // __BYTE_ORDER 가져오기
|
#if defined(__linux__) || defined(__GLIBC__) || defined(__GNU__)
|
||||||
# include <errno.h> // iconv.h 때문에 필요
|
# include <errno.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__NetBSD__)
|
#if defined(__NetBSD__)
|
||||||
|
@ -38,7 +44,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _WIN32 // safe string 처리
|
#ifdef _WIN32 // safe string 처리
|
||||||
# include "strsafe.h"
|
# include <strsafe.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -159,7 +165,7 @@ CUnAlz::CUnAlz()
|
||||||
{
|
{
|
||||||
memset(m_files, 0, sizeof(m_files));
|
memset(m_files, 0, sizeof(m_files));
|
||||||
m_nErr = ERR_NOERR;
|
m_nErr = ERR_NOERR;
|
||||||
m_posCur = (FileList::iterator)NULL;
|
m_posCur = m_fileList.end();//(FileList::iterator)NULL;
|
||||||
m_pFuncCallBack = NULL;
|
m_pFuncCallBack = NULL;
|
||||||
m_pCallbackParam = NULL;
|
m_pCallbackParam = NULL;
|
||||||
m_bHalt = FALSE;
|
m_bHalt = FALSE;
|
||||||
|
@ -331,7 +337,7 @@ void CUnAlz::Close()
|
||||||
i->Clear();
|
i->Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_posCur = (FileList::iterator)NULL;
|
m_posCur = m_fileList.end();//(FileList::iterator)NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -377,7 +383,7 @@ BOOL CUnAlz::ReadAlzFileHeader()
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
BOOL CUnAlz::ReadLocalFileheader()
|
BOOL CUnAlz::ReadLocalFileheader()
|
||||||
{
|
{
|
||||||
SLocalFileHeader zipHeader;
|
SAlzLocalFileHeader zipHeader;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = FRead(&(zipHeader.head), sizeof(zipHeader.head));
|
ret = FRead(&(zipHeader.head), sizeof(zipHeader.head));
|
||||||
|
@ -509,7 +515,7 @@ BOOL CUnAlz::ReadLocalFileheader()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if(IsEncryptedFile(zipHeader.head.fileDescriptor))
|
if(IsEncryptedFile(zipHeader.head.fileDescriptor))
|
||||||
FRead(zipHeader.encChk, ENCR_HEADER_LEN); // xf86
|
FRead(zipHeader.encChk, ALZ_ENCR_HEADER_LEN); // xf86
|
||||||
|
|
||||||
// SKIP FILE DATA
|
// SKIP FILE DATA
|
||||||
zipHeader.dwFileDataPos = FTell(); // data 의 위치 저장하기..
|
zipHeader.dwFileDataPos = FTell(); // data 의 위치 저장하기..
|
||||||
|
@ -641,7 +647,7 @@ BOOL CUnAlz::SetCurrentFile(const char* szFileName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_posCur = (FileList::iterator)NULL;
|
m_posCur = m_fileList.end();//(FileList::iterator)NULL;
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -682,8 +688,7 @@ BOOL CUnAlz::ExtractCurrentFileToBuf(BYTE* pDestBuf, int nBufSize)
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
BOOL CUnAlz::ExtractCurrentFile(const char* szDestPathName, const char* szDestFileName)
|
BOOL CUnAlz::ExtractCurrentFile(const char* szDestPathName, const char* szDestFileName)
|
||||||
{
|
{
|
||||||
if(m_posCur==(FileList::iterator)NULL) {ASSERT(0); return FALSE;}
|
if(m_posCur==m_fileList.end()/*(FileList::iterator)NULL*/) {ASSERT(0); return FALSE;}
|
||||||
|
|
||||||
BOOL ret=FALSE;
|
BOOL ret=FALSE;
|
||||||
|
|
||||||
SExtractDest dest;
|
SExtractDest dest;
|
||||||
|
@ -832,7 +837,7 @@ BOOL CUnAlz::ExtractTo(SExtractDest* dest)
|
||||||
/// @date 2004-03-06 오후 11:09:17
|
/// @date 2004-03-06 오후 11:09:17
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
/*
|
/*
|
||||||
BOOL CUnAlz::ExtractDeflate(FILE* fp, SLocalFileHeader& file)
|
BOOL CUnAlz::ExtractDeflate(FILE* fp, SAlzLocalFileHeader& file)
|
||||||
{
|
{
|
||||||
z_stream stream;
|
z_stream stream;
|
||||||
BYTE* pInBuf=NULL;
|
BYTE* pInBuf=NULL;
|
||||||
|
@ -1044,7 +1049,7 @@ int CUnAlz::WriteToDest(SExtractDest* dest, BYTE* buf, int nSize)
|
||||||
#define BZIP2_TAIL_SIZE 10 // 대충 4+5 정도.?
|
#define BZIP2_TAIL_SIZE 10 // 대충 4+5 정도.?
|
||||||
BYTE bzip2Header[BZIP2_HEADER_SIZE] = {0x42, 0x5a, 0x68, 0x39, 0x31, 0x41, 0x59, 0x26, 0x53, 0x59};
|
BYTE bzip2Header[BZIP2_HEADER_SIZE] = {0x42, 0x5a, 0x68, 0x39, 0x31, 0x41, 0x59, 0x26, 0x53, 0x59};
|
||||||
|
|
||||||
BOOL CUnAlz::ExtractBzip2_bak(FILE* fp, SLocalFileHeader& file)
|
BOOL CUnAlz::ExtractBzip2_bak(FILE* fp, SAlzLocalFileHeader& file)
|
||||||
{
|
{
|
||||||
bz_stream stream;
|
bz_stream stream;
|
||||||
BYTE* pInBuf=NULL;
|
BYTE* pInBuf=NULL;
|
||||||
|
@ -1137,7 +1142,7 @@ END :
|
||||||
/// @date 2004-03-06 오후 11:10:53
|
/// @date 2004-03-06 오후 11:10:53
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
#define BUF_LEN (4096*2)
|
#define BUF_LEN (4096*2)
|
||||||
BOOL CUnAlz::ExtractRawfile(SExtractDest* dest, SLocalFileHeader& file)
|
BOOL CUnAlz::ExtractRawfile(SExtractDest* dest, SAlzLocalFileHeader& file)
|
||||||
{
|
{
|
||||||
BOOL ret = FALSE;
|
BOOL ret = FALSE;
|
||||||
BYTE buf[BUF_LEN];
|
BYTE buf[BUF_LEN];
|
||||||
|
@ -1213,7 +1218,7 @@ BOOL CUnAlz::ExtractRawfile(SExtractDest* dest, SLocalFileHeader& file)
|
||||||
/// @date 2004-03-01 오전 5:47:36
|
/// @date 2004-03-01 오전 5:47:36
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
#define BZIP2_EXTRACT_BUF_SIZE 0x2000
|
#define BZIP2_EXTRACT_BUF_SIZE 0x2000
|
||||||
BOOL CUnAlz::ExtractBzip2(SExtractDest* dest, SLocalFileHeader& file)
|
BOOL CUnAlz::ExtractBzip2(SExtractDest* dest, SAlzLocalFileHeader& file)
|
||||||
{
|
{
|
||||||
BZFILE *bzfp = NULL;
|
BZFILE *bzfp = NULL;
|
||||||
int smallMode = 0;
|
int smallMode = 0;
|
||||||
|
@ -1332,7 +1337,7 @@ BOOL CUnAlz::ExtractBzip2(SExtractDest* dest, SLocalFileHeader& file)
|
||||||
/// @return
|
/// @return
|
||||||
/// @date 2004-03-06 오후 11:11:36
|
/// @date 2004-03-06 오후 11:11:36
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
BOOL CUnAlz::ExtractDeflate2(SExtractDest* dest, SLocalFileHeader& file)
|
BOOL CUnAlz::ExtractDeflate2(SExtractDest* dest, SAlzLocalFileHeader& file)
|
||||||
{
|
{
|
||||||
z_stream stream;
|
z_stream stream;
|
||||||
BYTE pInBuf[IN_BUF_SIZE];
|
BYTE pInBuf[IN_BUF_SIZE];
|
||||||
|
@ -1742,7 +1747,7 @@ void CUnAlz::CryptUpdateKeys(CHAR c)
|
||||||
BOOL CUnAlz::CryptCheck(CHAR *buf)
|
BOOL CUnAlz::CryptCheck(CHAR *buf)
|
||||||
{
|
{
|
||||||
CHAR b = 0;
|
CHAR b = 0;
|
||||||
for (int i = 0; i < ENCR_HEADER_LEN; i++)
|
for (int i = 0; i < ALZ_ENCR_HEADER_LEN; i++)
|
||||||
{
|
{
|
||||||
b = buf[i];
|
b = buf[i];
|
||||||
CryptDecode((CHAR&)b);
|
CryptDecode((CHAR&)b);
|
||||||
|
@ -1831,11 +1836,11 @@ BOOL CUnAlz::CryptCheck(const BYTE* buf)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
BYTE c;
|
BYTE c;
|
||||||
BYTE temp[ENCR_HEADER_LEN];
|
BYTE temp[ALZ_ENCR_HEADER_LEN];
|
||||||
|
|
||||||
memcpy(temp, buf, ENCR_HEADER_LEN); // 임시 복사.
|
memcpy(temp, buf, ALZ_ENCR_HEADER_LEN); // Àӽà º¹»ç.
|
||||||
|
|
||||||
for(i=0;i<ENCR_HEADER_LEN;i++)
|
for(i=0;i<ALZ_ENCR_HEADER_LEN;i++)
|
||||||
{
|
{
|
||||||
c = temp[i] ^ DecryptByte();
|
c = temp[i] ^ DecryptByte();
|
||||||
UpdateKeys(c);
|
UpdateKeys(c);
|
||||||
|
|
69
UnAlz.h
69
UnAlz.h
|
@ -2,7 +2,7 @@
|
||||||
UNALZ : read and extract module for ALZ format.
|
UNALZ : read and extract module for ALZ format.
|
||||||
|
|
||||||
LICENSE (zlib License)
|
LICENSE (zlib License)
|
||||||
Copyright (C) 2004-2005 hardkoder@gmail , http://www.kipple.pe.kr
|
Copyright (C) 2004-2007 kippler@gmail.com , http://www.kipple.pe.kr
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
This software is provided 'as-is', without any express or implied
|
||||||
warranty. In no event will the authors be held liable for any damages
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
@ -41,10 +41,10 @@
|
||||||
- .ALZ 의 압축을 해제하기 위한 모듈.
|
- .ALZ 의 압축을 해제하기 위한 모듈.
|
||||||
- ALZ는 BZIP2변형(변형이라고 뭐 개선한게 아니고, 헤더나 CRC 정보등을 빼서 크기를 줄인 것임)과,
|
- ALZ는 BZIP2변형(변형이라고 뭐 개선한게 아니고, 헤더나 CRC 정보등을 빼서 크기를 줄인 것임)과,
|
||||||
DEFLATE 압축 알고리즘에 ZIP과 유사한 헤더를 만들어서 씌운 포맷임.
|
DEFLATE 압축 알고리즘에 ZIP과 유사한 헤더를 만들어서 씌운 포맷임.
|
||||||
( bzip2 는 4.9x 에서 사용하였고, deflate 는 5.x 부터 사용하였음. 5.x 부터는 bzip2는 너무 느려서 사용 안함 )
|
(bzip2 는 4.9x 에서 사용하였고, deflate 는 5.x 부터 사용하였음. 5.x 부터는 bzip2는 너무 느려서 사용 안함)
|
||||||
- UnAlzBz2decompress.c 와 UnAlzbzlib.c 는 원래의 bzip2 소스에서 alz 용으로 수정된 파일임
|
- UnAlzBz2decompress.c 와 UnAlzbzlib.c 는 원래의 bzip2 소스에서 alz 용으로 수정된 파일임
|
||||||
( deflate 는 변형이 안되었기 때문에 그냥 zlib 를 써도 되지만.. bzip2 는 변형이 되어서
|
(deflate 는 변형이 안되었기 때문에 그냥 zlib 를 써도 되지만.. bzip2 는 변형이 되어서
|
||||||
원래의 bzip2 소스를 그대로 쓰면 안된다. )
|
원래의 bzip2 소스를 그대로 쓰면 안된다.)
|
||||||
- 이 소스는 4칸 탭을 사용 하였음.
|
- 이 소스는 4칸 탭을 사용 하였음.
|
||||||
|
|
||||||
개발 순서 :
|
개발 순서 :
|
||||||
|
@ -57,11 +57,11 @@
|
||||||
2004/02/08 - bzip2 대충 지원
|
2004/02/08 - bzip2 대충 지원
|
||||||
2004/03/01 - bzip2 거의 완벽 지원 乃
|
2004/03/01 - bzip2 거의 완벽 지원 乃
|
||||||
- callback 구현..
|
- callback 구현..
|
||||||
2004/03/07 - 유틸 함수 추가 ( ExtractCurrentFileToBuf() )
|
2004/03/07 - 유틸 함수 추가 (ExtractCurrentFileToBuf())
|
||||||
2004/10/03 - 분할 압축 해제 기능 추가 ( FILE I/O 에 대한 래퍼 클래스 구현 )
|
2004/10/03 - 분할 압축 해제 기능 추가 (FILE I/O 에 대한 래퍼 클래스 구현)
|
||||||
- 2GB 이상의 파일 처리 지원 (WINDOWS ONLY)
|
- 2GB 이상의 파일 처리 지원 (WINDOWS ONLY)
|
||||||
2004/10/22 - 다중 플랫폼(BSD/LINUX)지원을 위한 수정
|
2004/10/22 - 다중 플랫폼(BSD/LINUX)지원을 위한 수정
|
||||||
( BSD/LINUX 의 경우 2GB 이하의 파일만 지원 )
|
(BSD/LINUX 의 경우 2GB 이하의 파일만 지원)
|
||||||
- unalz 0.20
|
- unalz 0.20
|
||||||
2004/10/23 - by xxfree86 : DARWIN 컴파일 지원, 경로명에 "\\" 포함시 문제점 수정
|
2004/10/23 - by xxfree86 : DARWIN 컴파일 지원, 경로명에 "\\" 포함시 문제점 수정
|
||||||
2004/10/24 - by aqua0125 : 코드페이지 변환처리, 64bit 파일 처리
|
2004/10/24 - by aqua0125 : 코드페이지 변환처리, 64bit 파일 처리
|
||||||
|
@ -99,16 +99,20 @@
|
||||||
- unalz 0.51
|
- unalz 0.51
|
||||||
2005/07/27 - main() 에 setlocale() 추가
|
2005/07/27 - main() 에 setlocale() 추가
|
||||||
- unalz 0.52
|
- unalz 0.52
|
||||||
2005/10/15 - NetBSD 에서 컴파일 되도록 수정 ( by minskim@bawi )
|
2005/10/15 - NetBSD 에서 컴파일 되도록 수정 (by minskim@bawi)
|
||||||
2005/11/21 - buffer overflow 버그 수정 ( by Ulf Harnhammar )
|
2005/11/21 - buffer overflow 버그 수정 (by Ulf Harnhammar)
|
||||||
- unalz 0.53
|
- unalz 0.53
|
||||||
2006/03/10 - .. 폴더 관련 보안 문제 수정 (by vuln@secunia )
|
2006/03/10 - .. 폴더 관련 보안 문제 수정 (by vuln@secunia)
|
||||||
- unalz 0.55
|
- unalz 0.55
|
||||||
2006/04/23 - 엔디안 처리를 런타임에 하도록 수정
|
2006/04/23 - 엔디안 처리를 런타임에 하도록 수정
|
||||||
2006/12/31 - strcpy/strcat/sprintf 와 같은 버퍼 오버플로우 가능성이 있는 함수 제거 (by liam.joo@gmail)
|
2006/12/31 - strcpy/strcat/sprintf 와 같은 버퍼 오버플로우 가능성이 있는 함수 제거 (by liam.joo@gmail)
|
||||||
- unalz 0.60
|
- unalz 0.60
|
||||||
2007/02/10 - 리눅스등에서 strlcpy, strlcat 컴파일 에러 수정
|
2007/02/10 - 리눅스등에서 strlcpy, strlcat 컴파일 에러 수정
|
||||||
- unalz 0.61
|
- unalz 0.61
|
||||||
|
2007/04/12 - unalz command 라인 실행중 암호 입력시 \n이 포함되는 버그 수정
|
||||||
|
2008/04/04 - debian 빌드 관련 수정 (by cwryu@debian )
|
||||||
|
- 소스 정리, NULL iterator 관련 수정
|
||||||
|
- unalz 0.62
|
||||||
|
|
||||||
기능 :
|
기능 :
|
||||||
- alz 파일의 압축 해제 (deflate/변형 bzip2/raw)
|
- alz 파일의 압축 해제 (deflate/변형 bzip2/raw)
|
||||||
|
@ -119,7 +123,7 @@
|
||||||
- CRC 체크기능
|
- CRC 체크기능
|
||||||
|
|
||||||
|
|
||||||
컴파일 옵션 ( -DXXXX )
|
컴파일 옵션 (-DXXXX)
|
||||||
- _WIN32 : WIN32
|
- _WIN32 : WIN32
|
||||||
- _UNALZ_ICONV : iconv 를 사용해서 code 페이지 변환 지원
|
- _UNALZ_ICONV : iconv 를 사용해서 code 페이지 변환 지원
|
||||||
- _UNALZ_UTF8 : _UNALZ_ICONV 를 사용할 경우 기본 코드페이지를 "UTF-8" 로 지정
|
- _UNALZ_UTF8 : _UNALZ_ICONV 를 사용할 경우 기본 코드페이지를 "UTF-8" 로 지정
|
||||||
|
@ -130,6 +134,8 @@
|
||||||
#ifndef _UNALZ_H_
|
#ifndef _UNALZ_H_
|
||||||
#define _UNALZ_H_
|
#define _UNALZ_H_
|
||||||
|
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <cstring>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
@ -212,10 +218,10 @@ namespace UNALZ
|
||||||
# pragma pack(1)
|
# pragma pack(1)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const char UNALZ_VERSION[] = "CUnAlz0.61";
|
static const char UNALZ_VERSION[] = "CUnAlz0.62";
|
||||||
static const char UNALZ_COPYRIGHT[] = "Copyright(C) 2004-2007 by hardkoder@gmail ( http://www.kipple.pe.kr ) ";
|
static const char UNALZ_COPYRIGHT[] = "Copyright(C) 2004-2008 by kippler@gmail.com ( http://www.kipple.pe.kr ) ";
|
||||||
|
|
||||||
enum {ENCR_HEADER_LEN=12}; // xf86
|
enum {ALZ_ENCR_HEADER_LEN=12}; // xf86
|
||||||
// 맨 파일 앞..
|
// 맨 파일 앞..
|
||||||
struct SAlzHeader
|
struct SAlzHeader
|
||||||
{
|
{
|
||||||
|
@ -263,7 +269,7 @@ enum ALZ_FILE_DESCRIPTOR
|
||||||
ALZ_FILE_DESCRIPTOR_FILESIZEFIELD_8BYTE = 0x80,
|
ALZ_FILE_DESCRIPTOR_FILESIZEFIELD_8BYTE = 0x80,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _SLocalFileHeaderHead ///< 고정 헤더.
|
struct _SAlzLocalFileHeaderHead ///< 고정 헤더.
|
||||||
{
|
{
|
||||||
SHORT fileNameLength;
|
SHORT fileNameLength;
|
||||||
BYTE fileAttribute; // from http://www.zap.pe.kr, enum FILE_ATTRIBUE 참고
|
BYTE fileAttribute; // from http://www.zap.pe.kr, enum FILE_ATTRIBUE 참고
|
||||||
|
@ -287,12 +293,12 @@ struct _SLocalFileHeaderHead ///<
|
||||||
*/
|
*/
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SLocalFileHeader
|
struct SAlzLocalFileHeader
|
||||||
{
|
{
|
||||||
SLocalFileHeader() { memset(this, 0, sizeof(*this)); }
|
SAlzLocalFileHeader() { memset(this, 0, sizeof(*this)); }
|
||||||
//~SLocalFileHeader() { if(fileName) free(fileName); if(extraField) free(extraField); }
|
//~SAlzLocalFileHeader() { if(fileName) free(fileName); if(extraField) free(extraField); }
|
||||||
void Clear() { if(fileName) free(fileName); fileName=NULL; if(extraField) free(extraField);extraField=NULL; }
|
void Clear() { if(fileName) free(fileName); fileName=NULL; if(extraField) free(extraField);extraField=NULL; }
|
||||||
_SLocalFileHeaderHead head;
|
_SAlzLocalFileHeaderHead head;
|
||||||
|
|
||||||
BYTE compressionMethod; ///< 압축 방법 : 2 - deflate, 1 - 변형 bzip2, 0 - 압축 안함.
|
BYTE compressionMethod; ///< 압축 방법 : 2 - deflate, 1 - 변형 bzip2, 0 - 압축 안함.
|
||||||
BYTE unknown;
|
BYTE unknown;
|
||||||
|
@ -305,10 +311,10 @@ struct SLocalFileHeader
|
||||||
BYTE* extraField;
|
BYTE* extraField;
|
||||||
INT64 dwFileDataPos; ///< file data 가 저장된 위치..
|
INT64 dwFileDataPos; ///< file data 가 저장된 위치..
|
||||||
|
|
||||||
BYTE encChk[ENCR_HEADER_LEN]; // xf86
|
BYTE encChk[ALZ_ENCR_HEADER_LEN]; // xf86
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _SCentralDirectoryStructureHead
|
struct _SAlzCentralDirectoryStructureHead
|
||||||
{
|
{
|
||||||
UINT32 dwUnknown; ///< 항상 NULL 이던데..
|
UINT32 dwUnknown; ///< 항상 NULL 이던데..
|
||||||
UINT32 dwUnknown2; ///< 아마도 crc
|
UINT32 dwUnknown2; ///< 아마도 crc
|
||||||
|
@ -337,7 +343,7 @@ struct SCentralDirectoryStructure
|
||||||
{
|
{
|
||||||
SCentralDirectoryStructure() { memset(this, 0, sizeof(*this)); }
|
SCentralDirectoryStructure() { memset(this, 0, sizeof(*this)); }
|
||||||
//~SCentralDirectoryStructure() { if(fileName) free(fileName); if(extraField) free(extraField);if(fileComment)free(fileComment); }
|
//~SCentralDirectoryStructure() { if(fileName) free(fileName); if(extraField) free(extraField);if(fileComment)free(fileComment); }
|
||||||
_SCentralDirectoryStructureHead head;
|
_SAlzCentralDirectoryStructureHead head;
|
||||||
/*
|
/*
|
||||||
CHAR* fileName;
|
CHAR* fileName;
|
||||||
BYTE* extraField;
|
BYTE* extraField;
|
||||||
|
@ -372,14 +378,11 @@ struct SEndOfCentralDirectoryRecord
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
# pragma pack(pop, UNALZ) ///< PACKING 원상 복구
|
# pragma pack(pop, UNALZ) ///< PACKING 원상 복구
|
||||||
#else
|
#else
|
||||||
# ifdef __LP64__ // 64bit 는 패킹이 8byte 맞나 ? 잘모르겠다.....
|
# pragma pack() // restore packing
|
||||||
# pragma pack(8)
|
|
||||||
# else
|
|
||||||
# pragma pack(4)
|
|
||||||
# endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///< PROGRESS CALLBACK FUNCTION - 압축 해제 진행 상황을 알고 싶으면 이걸 쓰면 된다.
|
///< PROGRESS CALLBACK FUNCTION - 압축 해제 진행 상황을 알고 싶으면 이걸 쓰면 된다.
|
||||||
typedef void (_UnAlzCallback)(const char* szFileName, INT64 nCurrent, INT64 nRange, void* param, BOOL* bHalt);
|
typedef void (_UnAlzCallback)(const char* szFileName, INT64 nCurrent, INT64 nRange, void* param, BOOL* bHalt);
|
||||||
|
|
||||||
|
@ -420,7 +423,7 @@ public : ///< WIN32
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
|
|
||||||
public :
|
public :
|
||||||
typedef vector<SLocalFileHeader> FileList; ///< 파일 목록.
|
typedef vector<SAlzLocalFileHeader> FileList; ///< 파일 목록.
|
||||||
FileList* GetFileList() { return &m_fileList; }; ///< file 목록 리턴
|
FileList* GetFileList() { return &m_fileList; }; ///< file 목록 리턴
|
||||||
void SetCurrentFile(FileList::iterator newPos); ///< low level 접근..
|
void SetCurrentFile(FileList::iterator newPos); ///< low level 접근..
|
||||||
FileList::iterator GetCurFileHeader() { return m_posCur; }; ///< 현재 (SetCurrentFile() 로 세팅된) 파일 정보
|
FileList::iterator GetCurFileHeader() { return m_posCur; }; ///< 현재 (SetCurrentFile() 로 세팅된) 파일 정보
|
||||||
|
@ -518,11 +521,11 @@ private :
|
||||||
private :
|
private :
|
||||||
BOOL ExtractTo(SExtractDest* dest);
|
BOOL ExtractTo(SExtractDest* dest);
|
||||||
|
|
||||||
//BOOL ExtractDeflate(FILE* fp, SLocalFileHeader& file);
|
//BOOL ExtractDeflate(FILE* fp, SAlzLocalFileHeader& file);
|
||||||
//BOOL ExtractBzip2_bak(FILE* fp, SLocalFileHeader& file); - 실패한(잘못된) 방법
|
//BOOL ExtractBzip2_bak(FILE* fp, SAlzLocalFileHeader& file); - 실패한(잘못된) 방법
|
||||||
BOOL ExtractDeflate2(SExtractDest* dest, SLocalFileHeader& file);
|
BOOL ExtractDeflate2(SExtractDest* dest, SAlzLocalFileHeader& file);
|
||||||
BOOL ExtractBzip2(SExtractDest* dest, SLocalFileHeader& file);
|
BOOL ExtractBzip2(SExtractDest* dest, SAlzLocalFileHeader& file);
|
||||||
BOOL ExtractRawfile(SExtractDest* dest, SLocalFileHeader& file);
|
BOOL ExtractRawfile(SExtractDest* dest, SAlzLocalFileHeader& file);
|
||||||
|
|
||||||
private : // bzip2 파일 처리 함수..
|
private : // bzip2 파일 처리 함수..
|
||||||
typedef void MYBZFILE;
|
typedef void MYBZFILE;
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
/// 약간의 수정을 가한 소스들이다..
|
/// 약간의 수정을 가한 소스들이다..
|
||||||
/// FILE* handle 관련 부분들이 수정되었다.
|
/// FILE* handle 관련 부분들이 수정되었다.
|
||||||
///
|
///
|
||||||
/// @author hardkoder@gmail.com
|
/// @author kippler@gmail.com
|
||||||
/// @date 2004-10-03 오후 3:09:11
|
/// @date 2004-10-03 오후 3:09:11
|
||||||
///
|
///
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
///
|
///
|
||||||
/// unalz 관련 유틸 모음
|
/// unalz 관련 유틸 모음
|
||||||
///
|
///
|
||||||
/// @author hardkoder
|
/// @author kippler@gmail.com
|
||||||
/// @date 2005-06-23 오후 9:55:34
|
/// @date 2005-06-23 오후 9:55:34
|
||||||
///
|
///
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -1,3 +1,11 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
///
|
||||||
|
/// modified for .alz handling
|
||||||
|
///
|
||||||
|
/// @author kippler@gmail.com
|
||||||
|
/// @date 2007-04-12 ¿ÀÈÄ 9:06:32
|
||||||
|
///
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// ALZ 압축 해제를 위해서 수정된 bzip2 소스
|
// ALZ 압축 해제를 위해서 수정된 bzip2 소스
|
||||||
// [ALZ] 라고 표시된 부분이 수정된 부분이다.
|
// [ALZ] 라고 표시된 부분이 수정된 부분이다.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
del *.plg *.obj *.o *.sbr *.pch *.pdb *.res *.bsc *.pcc *.idb *.pdb *.ncb *.aps *.ilk 2*.log *.map *.opt *.exp *.sup *.dpbcd gebug.txt *_d.exe *_d.dll *_d.lib *_debug.dll *_debug.exe *.tlh *.tli *.scc *.bak /s
|
del *.plg *.obj *.o *.sbr *.pch *.pdb *.res *.bsc *.pcc *.idb *.pdb *.ncb *.aps *.ilk 2*.log *.map *.opt *.exp *.sup *.dpbcd gebug.txt *_d.exe *_d.dll *_d.lib *_debug.dll *_debug.exe *.tlh *.tli *.scc *.bak *.suo *.vspscc /s
|
||||||
del unalz.exe
|
del unalz.exe
|
||||||
rmdir bin
|
rmdir bin
|
||||||
rmdir release
|
rmdir release
|
||||||
|
|
9
main.cpp
9
main.cpp
|
@ -30,8 +30,9 @@ void Copyright()
|
||||||
// printf("unalz v0.54 (2005/11/21) \n");
|
// printf("unalz v0.54 (2005/11/21) \n");
|
||||||
// printf("unalz v0.55 (2006/03/10) \n");
|
// printf("unalz v0.55 (2006/03/10) \n");
|
||||||
// printf("unalz v0.60 (2006/12/31) \n");
|
// printf("unalz v0.60 (2006/12/31) \n");
|
||||||
printf("unalz v0.61 (2007/02/10) \n");
|
// printf("unalz v0.61 (2007/02/10) \n");
|
||||||
printf("Copyright(C) 2004-2007 by hardkoder@gmail (http://www.kipple.pe.kr) \n");
|
printf("unalz v0.62 (2008/04/04) \n");
|
||||||
|
printf("Copyright(C) 2004-2008 by kippler@gmail.com (http://www.kipple.pe.kr) \n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -273,9 +274,11 @@ int main(int argc, char* argv[])
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
char temp[256];
|
||||||
char pwd[256];
|
char pwd[256];
|
||||||
printf("Enter Password : ");
|
printf("Enter Password : ");
|
||||||
fgets(pwd,256,stdin);
|
fgets(temp,256,stdin);
|
||||||
|
sscanf(temp, "%s\n", pwd); // remove \n
|
||||||
unalz.SetPassword(pwd);
|
unalz.SetPassword(pwd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
|
|
||||||
unalz v0.61
|
unalz v0.62
|
||||||
|
|
||||||
Copyright(C) 2004-2007 by hardkoder (http://www.kipple.pe.kr)
|
Copyright(C) 2004-2008 by hardkoder (http://www.kipple.pe.kr)
|
||||||
|
|
||||||
|
|
||||||
- 최초 작성일 : v0.20 - 2004/10/22
|
- 최초 작성일 : v0.20 - 2004/10/22
|
||||||
|
|
Loading…
Reference in a new issue