Visual C++ 7.1Visual Studio 6Visual C++ 7.0Visual Studio .NET 2003Windows 2003Windows 2000Visual C++ 6.0Windows XPMFCIntermediateDevVisual StudioWindowsC++
Hide a file in a BMP file (Plus).






4.71/5 (22 votes)
Nov 28, 2003
1 min read

82973

3093
Hide a file in a BMP file: extended from the author Ahmed Osama's article.
Introduction
After I read the article 'Hiding a text file in a BMP file', I found it very funny, and maybe useful. So I decided to extend it to fit in with any file, any password, and become easy to use.
Background
You can find its principle here: Hiding a text file in a BMP file. Very thanks to Ahmed Osama's idea and good work.
Class Structure
class CBmpHermitCrab { ... public: bool Hermit(const char* pszDestFileName, const char* pszSrcFileName, const char* pszPassword=NULL, const char* pszResultFile=NULL); bool IsHermitCrabBMPFile(const char* pszFileName); bool RecoverCrabFile(const char* pszFileName, const char* pszPassword=NULL, const char* pszPath=NULL); };
It provides three methods to implement the following tasks:
Hermit()
. Hides a file in a BMP file.The main code:
... nIndex=0; for(int i=0;i<(iBinaryLen/8); i++){ temp= m_binaryMap[(unsigned char) strBufferAll[i]]; srcBinary[nIndex] = temp[0]; srcBinary[nIndex+1] =temp[1]; srcBinary[nIndex+2] =temp[2]; srcBinary[nIndex+3] =temp[3]; srcBinary[nIndex+4] =temp[4]; srcBinary[nIndex+5] =temp[5]; srcBinary[nIndex+6] =temp[6]; srcBinary[nIndex+7] =temp[7]; nIndex=nIndex+8; } int mask=254; for (i=0 ; i<iBinaryLen ; i++){ bmpBuffer[i+55]=bmpBuffer[i+55] & mask; if (srcBinary[i]=='1') bmpBuffer[i+55]=bmpBuffer[i+55]+1; } ...
Through our binary table
srcBinary
and the correct index, we can express a char by using the original pixel color value micro-changed.RecoverCrabFile()
. Recovers hidden file from a HermitCrab ;) BMP file.The key code:
... for(j=55+8*nHeadSize; j < 55+8*nHeadSize +pHermitCrabHead->bPasswordLen*8+ pHermitCrabHead->bFileNameLen*8;j++){ recBin[j]= (unsigned char) ((unsigned char)buffer[j] & 1); } CString strTemp; for(j=55+8*nHeadSize; j < 55+8*nHeadSize+pHermitCrabHead->bPasswordLen*8+ pHermitCrabHead->bFileNameLen*8;j=j+8){ temp=128*recBin[j]+64*recBin[j+1]+32*recBin[j+2]+ 16*recBin[j+3]+8*recBin[j+4]+4*recBin[j+5]+ 2*recBin[j+6]+1*recBin[j+7]; strTemp+=temp; } ...
IsHermitCrabBMPFile()
. Like method 2, but it just recovers the fist 8 bytes, and whether the first two bytes: 'C' and 'H'.
Using the code
- Include the BmpHermitCrab.h file.
- Generate a
CBmpHermitCrab
instance. - With the instance, use the
Hermit()
method to hide a file in a BMP file with optional password and use theRecoverCrabFile()
method to recover a file from a 'HermitCrab' BMP file. You can check the BMP file format byIsHermitCrabBMPFile()
method.
Hope you enjoy the program!