Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ca52chek.cpp * Debugged & Compilable in Dev-C++ 4.9.9.2
- CA52 - Compression Algorithm 52 - File Header Check
- Coded by [DA2K] Reptor * youtube.com/ReptorULTRA7
- */
- #include <iostream>
- #include <iomanip>
- #include <fstream>
- /* CA52 File Struct, Global Vars and Defines
- Get v0.4 header from pastebin.com/1e5TsfGT */
- #include "ca52.h"
- using namespace std;
- CA52HEADER CA52Head; // file input header
- string CA52MethInfo;
- string CA52ErrorMsg;
- /******************************************************************************/
- void SetCA52Header(uword si,uword ls,uchar cm)
- {
- CA52Head.Sig = si; // file signature
- CA52Head.DataLen = ls; // packed stream size
- CA52Head.Method = cm; // compression method
- }
- /******************************************************************************/
- bool CheckCA52Header()
- {
- bool bMeth;
- uchar i;
- if (CA52Head.Sig==0x52CA) { // CA52HEAD_SIG (ca52.h - v0.4)
- if (CA52Head.DataLen>6) {
- i = 0;
- bMeth = false;
- while (i<4) {
- if (CA52Head.Method==CA52METHOD[i]) { bMeth=true; i=4; }
- else i++;
- }
- if (bMeth) {
- switch (CA52Head.Method) {
- case 0xEF:
- CA52MethInfo = "Ethereum Frontier http-URL Pack";
- break;
- case 0x25:
- CA52MethInfo = "2-Step Stream Crunch";
- break;
- case 0xCD:
- CA52MethInfo = "Compressed Dictionary";
- break;
- case 0x7E:
- CA52MethInfo = "Zetauri WAV Crunch";
- break;
- default:
- CA52MethInfo = "Unspecified";
- break;
- }
- CA52ErrorMsg = "None";
- return true; // input legit!
- }
- else {
- CA52ErrorMsg = "Compression Method unknown or unsupported!";
- return false; // higher decruncher version required
- }
- }
- else {
- CA52ErrorMsg = "Packed Stream below minimum size!";
- return false; // packed streams under 7 bytes are impossible ;)
- }
- }
- else {
- CA52ErrorMsg = "Not a CA52 Archive!";
- return false; // dumb user gave me bad or non-existing input file
- }
- }
- /******************************************************************************/
- bool LoadCA52Header(const char *fn) // fn = filename
- {
- ifstream fl;
- size_t fs = 0; // fs = filesize
- cout << "Input File : " << fn << endl;
- fl.open(fn, ios::in|ios::binary|ios::ate);
- fl.seekg(0, ios::end); // set pointer to end
- fs = fl.tellg(); // get filesize
- if (fs>4) {
- fl.seekg(0, ios::beg); // set pointer to beginning
- fl.read((char*)&CA52Head, sizeof(CA52Head)); // load entire struct
- IsCA52 = CheckCA52Header();
- return true; // legit filesize
- }
- else {
- IsCA52 = false; // no proper header!
- return false; // filesize is below 5 bytes!
- }
- fl.close();
- }
- /******************************************************************************/
- // Decimal to Hex Conversion Macros w/zerofill (double and quad)
- #define DHex(x) setfill('0') << setw(2) << uppercase << hex << (int)(x)
- #define QHex(x) setfill('0') << setw(4) << uppercase << hex << (int)(x)
- // Linefill Macro
- #define Line(x) setfill('=') << setw(x) << "="
- /******************************************************************************/
- int main(int argc, char *argv[])
- {
- cout << Line(29) << endl;
- cout << " CA52 - Archive Checker v0.3" << endl;
- cout << Line(29) << endl;
- cout << endl;
- SetCA52Header(0x00,0,0x00); // default setting (bugfix:no CA52 signature!)
- if (argc<2) {
- cout << "Usage: " << argv[0] << " filename.ca52" << endl;
- return 1;
- }
- else {
- if ( LoadCA52Header(argv[1]) && IsCA52 ) { // pass filename to loader
- cout << "Data Length : " << CA52Head.DataLen << " Bytes" << endl;
- cout << "Compression : " << CA52MethInfo << " (0x" << DHex(CA52Head.Method) << ")" << endl;
- return 0; // EXIT_SUCCESS
- }
- else {
- cout << "Error Msg : " << CA52ErrorMsg << endl;
- cout << "Header Data : ";
- cout << "(Sig=0x" << QHex(CA52Head.Sig);
- cout << " /Len=" << CA52Head.DataLen;
- cout << " /Meth=0x" << DHex(CA52Head.Method);
- cout << ")" << endl;
- return -1;
- }
- }
- }
- /*
- Initial Version 0.1 (2015-12-15)
- Updated Version 0.2 (2015-12-16)
- * URL: pastebin.com/pCU6DeXm
- * MD5: d147c974b075781a4ab11b9c38b2e909
- Revised Version 0.3 (2016-06-02)
- * URL: pastebin.com/vDm7Mp4k
- * MD5: (n/a)
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement