hwpx 배포 문서에 대한 정보

16 views
Skip to first unread message

JinKwon Jung

unread,
Sep 18, 2025, 6:10:28 AMSep 18
to hwp-foss
안녕하세요. 
hwp 배포 문서는 공개된 정보를 통하여 알아냈습니다.
하지만 hwpx 배포 문서에 대한 정보가 없어서 여러번 시도를 해 보았지만 실패하였습니다.
하여 한글과커뮤터에 여러번 문의하였습니다. 실패하였습니다.
하여 hwpx 배포 문서에 대한 정보를 얻고자 문의 드립니다.

아래 부분은 저희가 시도한 내용을 정리한 내용인데 이 부분이 도움이 될지는 모르겠지만 
시도 결과 실패를 하였습니다.
*****************************************************************
Zip 내부의 암호화 파일 엔트리는 압축되어 있지 않습니다.
그것을 그대로 가져다가

Salt , iV 는 base64 디코딩하여 구함.
key 는 다음과 같이 처리…
const char* pFix = "\"Yang WangSunv!!\""; int nFix = strlen(pFix);
BrBYTE passbuffer[64] = { 0, };
BrBYTE keybuffer[64] = { 0, };

// password key 생성
HNC_SHA256_ALG_INFO sha256;
HNC_SHA256_Init(&sha256);
HNC_SHA256_Update(&sha256, (BYTE*)pFix, nFix );
HNC_SHA256_Final(&sha256, passbuffer);

HNC_PBKDF2_SHA1((const char*)passbuffer, 32, (const char*)salt.data(), salt.size(), 1024, (char*)keybuffer, 32);

key.assign(keybuffer, keybuffer + 32);

그런 후에 아래 코드를 돌린다.

Unsigned char* decrypted_data = (Unsigned char* )malloc( nCipherTextSize + 16);

EVP_CIPHER_CTX* ctx = EVP_CIPHER_CTX_new();
if( 1 != EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key.data(), iv.data()) )
{
          goto endDecript;
}
EVP_CIPHER_CTX_set_padding(ctx, 0);
if( 1 != EVP_DecryptUpdate(ctx, decrypted_data, &outlen, pCipherText, nCipherTextSize) )
{
          goto endDecript;
}
if( 1!=EVP_DecryptFinal_ex(ctx, decrypted_data + outlen, &tmplen))
{
                     goto endDecript;
}

Int final_len  = out_len + tmplen;

decrypted_data 에 final_len 길이의 복호화 된 데이터가 된다.

이후 이 데이터를 inflate_init( &stream , -15 ); 를 통해 해더 없는 압축데이타 인플레이트를 시도하여 텍스트를 추출한다.

이상이 저희가 한컴 공개 문서를 통해 이해한 사항입니다.
위 처리 과정중에 잘못된 것이 있는지 텍스트 추출에 실패 합니다.
***************************************************************************
Reply all
Reply to author
Forward
0 new messages