This commit is contained in:
King_DuckZ 2020-05-05 20:22:58 +02:00
parent f6f5938fe7
commit efca9adbd4
8 changed files with 80 additions and 61 deletions

View file

@ -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
View file

@ -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;

View file

@ -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
/// ///
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////

View file

@ -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
/// ///
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////

View file

@ -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] 라고 표시된 부분이 수정된 부분이다.

View file

@ -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

View file

@ -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);
} }
} }

View file

@ -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