*.enc unpacking & repacking..

Page 5 of 6 FirstFirst 123456 LastLast
Results 101 to 125 of 139
  1. #101
    Elite Member balmungx30 is offline
    Member +Rank
    Sep 2008 Join Date
    cabalnation.comLocation
    233Posts

    Re: *.enc unpacking & repacking..

    Quote Originally Posted by bobinsset View Post
    all work, thx

    client crach, because i have sigmetal epaulet

    .
    thx


    diesel

    no problem thanks for the testing


    @yamachi

    what is the purpose of this addresse 0x0040F690? this will make the client crash when you try to load female characters

  2. #102
    Sorcerer Supreme Daman2009 is offline
    Member +Rank
    Feb 2009 Join Date
    GreenDespairLocation
    343Posts

    Re: *.enc unpacking & repacking..

    Quote Originally Posted by Phantom* View Post
    Red Hat (Fedora, RHEL, CentOS, etc.):

    yum install gcc zlib-devel

    Debian (Ubuntu, etc.)

    apt-get install build-essential zlib1g-dev

    Get the source code form http://pastebin.com/m167140bd and copy/paste it into a file named zpipe.c

    Using the same working directory where zpipe.c has been created, type:

    gcc -o zpipe zpipe.c -lz

    Using the same working directory where zpipe has been created, type:

    ./zpipe < phantom.txt > phantom.enc

    ./zpipe < phantom.enc > phantom.txt



    Yes, look at the modified zpipe.c source for the deflateInit2 and inflateInit2 setup and XOR operations.
    Thankyou very much.
    I didn't know how to run ZPIPE. Using ./zpipe runs the app!
    YEY!

  3. #103
    Banned Yamachi is offline
    BannedRank
    Oct 2006 Join Date
    Jolly EnglandLocation
    3,515Posts

    Re: *.enc unpacking & repacking..

    Quote Originally Posted by balmungx30 View Post
    no problem thanks for the testing


    @yamachi

    what is the purpose of this addresse 0x0040F690? this will make the client crash when you try to load female characters
    It's part of the ECH loading loop. It's the line that checks to see how many ECH files have been loaded. No, it will not make your client crash if you do it correctly.. Anyways, I'm making a new thread in the releases section with a few client/server files for everyone because I'm feeling generous this morning.
    Last edited by Yamachi; 23-08-09 at 11:28 AM.

  4. #104
    Elite Member balmungx30 is offline
    Member +Rank
    Sep 2008 Join Date
    cabalnation.comLocation
    233Posts

    Re: *.enc unpacking & repacking..

    Quote Originally Posted by Yamachi View Post
    It's part of the ECH loading loop. It's the line that checks to see how many ECH files have been loaded. No, it will not make your client crash if you do it correctly.. Anyways, I'm making a new thread in the releases section with a few client/server files for everyone because I'm feeling generous this morning.
    i try it again and again but no success..still when loading women ECH the client crashes. thanks i will wait for the release..

  5. #105
    Sorcerer Supreme maxgo1 is offline
    Member +Rank
    Aug 2008 Join Date
    EST , PaldiskiLocation
    311Posts

    Re: *.enc unpacking & repacking..

    I'm feeling generous this morning.
    xD hehe , just i think it's good

    But i am trying to add the strings into Data.enc by Special/bow_08_keep.enc just calculating all values too , but Cabal not loads (Loads but later it has been breaking down )

  6. #106
    Member bobinsset is offline
    MemberRank
    Dec 2008 Join Date
    FranceLocation
    34Posts

    Re: *.enc unpacking & repacking..

    Quote Originally Posted by Yamachi View Post
    It's part of the ECH loading loop. It's the line that checks to see how many ECH files have been loaded. No, it will not make your client crash if you do it correctly.. Anyways, I'm making a new thread in the releases section with a few client/server files for everyone because I'm feeling generous this morning.
    thx yamachi


    diesel

  7. #107
    The Cat in the Hat cypher is offline
    Grand MasterRank
    Oct 2005 Join Date
    IrelandLocation
    5,068Posts

    Re: *.enc unpacking & repacking..

    [mod]Verbal Warning: do not post thank you in a reply, use thank you button
    Note: Do not reply to this post![/mod]

  8. #108
    Elite Member balmungx30 is offline
    Member +Rank
    Sep 2008 Join Date
    cabalnation.comLocation
    233Posts

    Re: *.enc unpacking & repacking..

    Quote Originally Posted by Yamachi View Post
    It's part of the ECH loading loop. It's the line that checks to see how many ECH files have been loaded. No, it will not make your client crash if you do it correctly.. Anyways, I'm making a new thread in the releases section with a few client/server files for everyone because I'm feeling generous this morning.

    its a part of woman ECH loading loop...the problem is when you try to increase the number of ECH on that part the client crashes causing access violation error... i try to change it upto 8 it works but doesnt load the sigmetal set for female character... maybe your client will fix the problem waiting for you release

  9. #109
    Banned Yamachi is offline
    BannedRank
    Oct 2006 Join Date
    Jolly EnglandLocation
    3,515Posts

    Re: *.enc unpacking & repacking..

    Quote Originally Posted by balmungx30 View Post
    its a part of woman ECH loading loop...the problem is when you try to increase the number of ECH on that part the client crashes causing access violation error... i try to change it upto 8 it works but doesnt load the sigmetal set for female character... maybe your client will fix the problem waiting for you release
    SIGMetal is in woman9.ech and man9.ech. There shouldn't be any problems with loading all 18 ECH files (I've been doing it for ages). I'll add my modified cabalmain.exe to my thread in the Release section later.

  10. #110
    Elite Member balmungx30 is offline
    Member +Rank
    Sep 2008 Join Date
    cabalnation.comLocation
    233Posts

    Re: *.enc unpacking & repacking..

    Quote Originally Posted by Yamachi View Post
    SIGMetal is in woman9.ech and man9.ech. There shouldn't be any problems with loading all 18 ECH files (I've been doing it for ages). I'll add my modified cabalmain.exe to my thread in the Release section later.
    if you dont mind can i request the file of woman9.ech from you thanks in advance sir yama

  11. #111
    Banned Yamachi is offline
    BannedRank
    Oct 2006 Join Date
    Jolly EnglandLocation
    3,515Posts

    Re: *.enc unpacking & repacking..

    Quote Originally Posted by balmungx30 View Post
    if you dont mind can i request the file of woman9.ech from you thanks in advance sir yama
    Just get it from the EU client.

  12. #112
    Member acidstar is offline
    MemberRank
    Jun 2005 Join Date
    39Posts

    Re: *.enc unpacking & repacking..

    yama, can u add this line under pet block in cabal.enc
    Code:
    		<pet_ex	id="1054"	pet_name="pet1054"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1055"	pet_name="pet1055"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1056"	pet_name="pet1056"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1057"	pet_name="pet1057"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1058"	pet_name="pet1058"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1059"	pet_name="pet1059"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1147"	pet_name="pet1147"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1151"	pet_name="pet1151"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1169"	pet_name="pet1169"	max_lv="5"	skill="0,0,0"	/>
    i tried to add it but client will crash.
    thank you

  13. #113
    Banned Yamachi is offline
    BannedRank
    Oct 2006 Join Date
    Jolly EnglandLocation
    3,515Posts

    Re: *.enc unpacking & repacking..

    Quote Originally Posted by acidstar View Post
    yama, can u add this line under pet block in cabal.enc
    Code:
    		<pet_ex	id="1054"	pet_name="pet1054"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1055"	pet_name="pet1055"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1056"	pet_name="pet1056"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1057"	pet_name="pet1057"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1058"	pet_name="pet1058"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1059"	pet_name="pet1059"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1147"	pet_name="pet1147"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1151"	pet_name="pet1151"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1169"	pet_name="pet1169"	max_lv="5"	skill="0,0,0"	/>
    i tried to add it but client will crash.
    thank you
    ahh... I forgot to add that :P Working on it now.

  14. #114
    Grand Master dordort is offline
    Grand MasterRank
    Nov 2004 Join Date
    IsraelLocation
    635Posts

    Re: *.enc unpacking & repacking..

    Quote Originally Posted by Yamachi View Post
    ahh... I forgot to add that :P Working on it now.
    Yamachi- Big thanks for helping, you dont know how much you helped. =] You are doing Awesome job!

    BTW- Hmm... what is this for? O.O

  15. #115
    Banned Yamachi is offline
    BannedRank
    Oct 2006 Join Date
    Jolly EnglandLocation
    3,515Posts

    Re: *.enc unpacking & repacking..

    Quote Originally Posted by acidstar View Post
    yama, can u add this line under pet block in cabal.enc
    Code:
    		<pet_ex	id="1054"	pet_name="pet1054"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1055"	pet_name="pet1055"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1056"	pet_name="pet1056"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1057"	pet_name="pet1057"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1058"	pet_name="pet1058"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1059"	pet_name="pet1059"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1147"	pet_name="pet1147"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1151"	pet_name="pet1151"	max_lv="5"	skill="0,0,0"	/>
    		<pet_ex	id="1169"	pet_name="pet1169"	max_lv="5"	skill="0,0,0"	/>
    i tried to add it but client will crash.
    thank you
    Done and tested. Redownload my client patch from here: http://forum.ragezone.com/f459/clien...pdated-601652/

  16. #116
    Sorcerer Supreme maxgo1 is offline
    Member +Rank
    Aug 2008 Join Date
    EST , PaldiskiLocation
    311Posts

    Re: *.enc unpacking & repacking..

    but what is that?

  17. #117
    Banned Yamachi is offline
    BannedRank
    Oct 2006 Join Date
    Jolly EnglandLocation
    3,515Posts

    Re: *.enc unpacking & repacking..

    Quote Originally Posted by maxgo1 View Post
    but what is that?
    It's needed for the names to show up on the new pets.

  18. #118
    Elite Member Pupacila is offline
    Member +Rank
    Jan 2009 Join Date
    104Posts

    Re: *.enc unpacking & repacking..

    Can someone reupload:

    The first 4 bytes of the files contain the uncompressed data size which is used to allocate the correct amount of memory. The next 4 bytes are encrypted. With this and the above knowledge you can now program your own application. I've thrown together a quick hack job sample using the zpipe example from zlib. You can download and apply this patch file or get the full source. Be warned my development platform is Linux and it won't compile for Windows. For Windows you would need to remove the code that retrieves the file size in the def function and replace it with the Win32 equivalent, eg.


    because it was deleted
    Thanks!
    Last edited by Pupacila; 21-09-09 at 02:05 PM.

  19. #119
    The Dinosaur chumpywumpy is offline
    Grand MasterRank
    Jun 2008 Join Date
    /f451/Location
    5,127Posts

    Re: *.enc unpacking & repacking..

    I only have this one to hand. I don't think i have fiddled with this copy but i will double-check when i get home.

    Code:
    /* zpipe.c: example of proper use of zlib's inflate() and deflate()
       Not copyrighted -- provided to the public domain
       Version 1.2  9 November 2004  Mark Adler */
    
    /* Version history:
       1.0  30 Oct 2004  First version
       1.1   8 Nov 2004  Add void casting for unused return values
                         Use switch statement for inflate() return values
       1.2   9 Nov 2004  Add assertions to document zlib guarantees
       1.3   6 Apr 2005  Remove incorrect assertion in inf()
     */
    
    #include <stdio.h>
    #include <string.h>
    #include <assert.h>
    #include "zlib.h"
    #include <sys/types.h>
    #include <sys/stat.h>
    
    #define CHUNK 16384
    
    /* Compress from file source to file dest until EOF on source.
       def() returns Z_OK on success, Z_MEM_ERROR if memory could not be
       allocated for processing, Z_STREAM_ERROR if an invalid compression
       level is supplied, Z_VERSION_ERROR if the version of zlib.h and the
       version of the library linked do not match, or Z_ERRNO if there is
       an error reading or writing the files. */
    int def(FILE *source, FILE *dest, int level)
    {
        int ret, flush;
        unsigned have;
        z_stream strm;
        char in[CHUNK];
        char out[CHUNK];
        char *buf;
        unsigned long dest_size;
        unsigned long indx = 0;
        struct stat sb;
    
        have = fileno(source);
    
        if (fstat(have, &sb) < 0)
            return Z_ERRNO;
    
        if (!S_ISREG(sb.st_mode))
            return Z_ERRNO;
    
        if ((dest_size = (unsigned long)sb.st_size) <= 0)
            return Z_ERRNO;
    
        if (fwrite(&dest_size, 4, 1, dest) != 1 || ferror(dest))
            return Z_ERRNO;
    
        /* allocate deflate state */
        strm.zalloc = Z_NULL;
        strm.zfree = Z_NULL;
        strm.opaque = Z_NULL;
        ret = deflateInit2(&strm, level, Z_DEFLATED, -MAX_WBITS, 8, Z_DEFAULT_STRATEGY);
        if (ret != Z_OK)
            return ret;
    
        /* compress until end of file */
        do {
            strm.avail_in = fread(in, 1, CHUNK, source);
            if (ferror(source)) {
                (void)deflateEnd(&strm);
                return Z_ERRNO;
            }
            flush = feof(source) ? Z_FINISH : Z_NO_FLUSH;
            strm.next_in = in;
    
            /* run deflate() on input until output buffer not full, finish
               compression if all of source has been read in */
            do {
                strm.avail_out = CHUNK;
                strm.next_out = out;
                ret = deflate(&strm, flush);    /* no bad return value */
                assert(ret != Z_STREAM_ERROR);  /* state not clobbered */
                have = CHUNK - strm.avail_out;
                if (have > 0) {
                    buf = out;
    
                    do {
                        if (dest_size > indx++) {
                            switch (indx) {
                            case 1:
                                *buf ^= 0x92;
                                break;
                            case 2:
                                *buf ^= 0x65;
                                break;
                            case 3:
                                *buf ^= 0x67;
                                break;
                            case 4:
                                *buf ^= 0x57;
                            }
                        }
                    } while (*buf++);
    
                    if (fwrite(out, 1, have, dest) != have || ferror(dest)) {
                        (void)deflateEnd(&strm);
                        return Z_ERRNO;
                    }
                }
            } while (strm.avail_out == 0);
            assert(strm.avail_in == 0);     /* all input will be used */
    
            /* done when last data in file processed */
        } while (flush != Z_FINISH);
        assert(ret == Z_STREAM_END);        /* stream will be complete */
    
        /* clean up and return */
        (void)deflateEnd(&strm);
        return Z_OK;
    }
    
    /* Decompress from file source to file dest until stream ends or EOF.
       inf() returns Z_OK on success, Z_MEM_ERROR if memory could not be
       allocated for processing, Z_DATA_ERROR if the deflate data is
       invalid or incomplete, Z_VERSION_ERROR if the version of zlib.h and
       the version of the library linked do not match, or Z_ERRNO if there
       is an error reading or writing the files. */
    int inf(FILE *source, FILE *dest)
    {
        int ret;
        unsigned have;
        z_stream strm;
        char in[CHUNK];
        char out[CHUNK];
        char *buf;
        unsigned long dest_size;
        unsigned long indx = 0;
    
        have = fread(in, 1, 4, source);
    
        if (have != 4 || ferror(source)) {
            return Z_ERRNO;
        }
    
        dest_size = ((unsigned long)in[0]) |
                    ((unsigned long)in[1] << 8) | 
                    ((unsigned long)in[2] << 16) | 
                    ((unsigned long)in[3] << 24);
    
        /* allocate inflate state */
        strm.zalloc = Z_NULL;
        strm.zfree = Z_NULL;
        strm.opaque = Z_NULL;
        strm.avail_in = 0;
        strm.next_in = Z_NULL;
        ret = inflateInit2(&strm, -MAX_WBITS);
        if (ret != Z_OK)
            return ret;
    
        /* decompress until deflate stream ends or end of file */
        do {
            strm.avail_in = fread(in, 1, CHUNK, source);
            if (ferror(source)) {
                (void)inflateEnd(&strm);
                return Z_ERRNO;
            }
            if (strm.avail_in == 0)
                break;
    
            buf = in;
    
            do {
                if (dest_size > indx++) {
                    switch (indx) {
                    case 1:
                        *buf ^= 0x92;
                        break;
                    case 2:
                        *buf ^= 0x65;
                        break;
                    case 3:
                        *buf ^= 0x67;
                        break;
                    case 4:
                        *buf ^= 0x57;
                    }
                }
            } while (*buf++);
    
            strm.next_in = in;
    
            /* run inflate() on input until output buffer not full */
            do {
                strm.avail_out = CHUNK;
                strm.next_out = out;
                ret = inflate(&strm, Z_NO_FLUSH);
                assert(ret != Z_STREAM_ERROR);  /* state not clobbered */
                switch (ret) {
                case Z_NEED_DICT:
                    ret = Z_DATA_ERROR;     /* and fall through */
                case Z_DATA_ERROR:
                case Z_MEM_ERROR:
                    (void)inflateEnd(&strm);
                    return ret;
                }
                have = CHUNK - strm.avail_out;
                if (fwrite(out, 1, have, dest) != have || ferror(dest)) {
                    (void)inflateEnd(&strm);
                    return Z_ERRNO;
                }
            } while (strm.avail_out == 0);
    
            /* done when inflate() says it's done */
        } while (ret != Z_STREAM_END);
    
        /* clean up and return */
        (void)inflateEnd(&strm);
        return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR;
    }
    
    /* report a zlib or i/o error */
    void zerr(int ret)
    {
        fputs("zpipe: ", stderr);
        switch (ret) {
        case Z_ERRNO:
            if (ferror(stdin))
                fputs("error reading stdin\n", stderr);
            if (ferror(stdout))
                fputs("error writing stdout\n", stderr);
            break;
        case Z_STREAM_ERROR:
            fputs("invalid compression level\n", stderr);
            break;
        case Z_DATA_ERROR:
            fputs("invalid or incomplete deflate data\n", stderr);
            break;
        case Z_MEM_ERROR:
            fputs("out of memory\n", stderr);
            break;
        case Z_VERSION_ERROR:
            fputs("zlib version mismatch!\n", stderr);
        }
    }
    
    /* compress or decompress from stdin to stdout */
    int main(int argc, char **argv)
    {
        int ret;
    
        /* do compression if no arguments */
        if (argc == 1) {
            ret = def(stdin, stdout, Z_DEFAULT_COMPRESSION);
            if (ret != Z_OK)
                zerr(ret);
            return ret;
        }
    
        /* do decompression if -d specified */
        else if (argc == 2 && strcmp(argv[1], "-d") == 0) {
            ret = inf(stdin, stdout);
            if (ret != Z_OK)
                zerr(ret);
            return ret;
        }
    
        /* otherwise, report usage */
        else {
            fputs("zpipe usage: zpipe [-d] < source > dest\n", stderr);
            return 1;
        }
    }

  20. #120
    Member kafetao is offline
    MemberRank
    Jan 2008 Join Date
    26Posts

    Re: *.enc unpacking & repacking..

    i got this http://img114.imageshack.us/img114/8774/uploadx.jpg when type patch < zpipe-enc.patch, any1 wat error i made ?

  21. #121
    The Dinosaur chumpywumpy is offline
    Grand MasterRank
    Jun 2008 Join Date
    /f451/Location
    5,127Posts

    Re: *.enc unpacking & repacking..

    Try patch < ./zpipe-enc.patch. It would probably be easier to use the version in phantom's post on page 2 as you just paste into a textfile and compile.

  22. #122
    Member jobier is offline
    MemberRank
    Apr 2007 Join Date
    85Posts

    Re: *.enc unpacking & repacking..

    Why when edited anything in cabal.enc when you open the game it comes out of nowhere?

    Does anyone know?

  23. #123
    The Dinosaur chumpywumpy is offline
    Grand MasterRank
    Jun 2008 Join Date
    /f451/Location
    5,127Posts

    Re: *.enc unpacking & repacking..

    I don't have that problem myself and i have edited quite a lot. I have seen a few reports where certain versions don't pack well but i have not seen it happen myself. The one in Lost-Spirit's patch does pack well and this is the recommended one anyway.

  24. #124
    Sorcerer Supreme Daman2009 is offline
    Member +Rank
    Feb 2009 Join Date
    GreenDespairLocation
    343Posts

    Re: *.enc unpacking & repacking..

    Quote Originally Posted by Phantom* View Post
    It's likely everyone is using different clients and I don't want to deal with unpacking or Xtrap removal. So I've decided to explain everything with these client files I found via ragezone and posted by cyber37, apparently from chumpywumpy's v2.5 server files. All clients employ the same logic.

    The client uses the popular inflation/deflation algorithms found in zlib with a suppressed header (negative windowBits). Albeit they use an older public domain code base from the same author, Mark Adler, it can be found here. The code was compiled without the PKZIP_BUG_WORKAROUND definition at line 172 and uses a custom FLUSH and NEXTBYTE definition at lines 214 and 206. Otherwise, everything else is exactly alike. The custom NEXTBYTE instructions contain XOR encryption for only the first 4 inflated bytes while the rest pass through without modification.

    Client offsets of the functions are (look at your keyboard to replace back the missing digits):
    inflate = ))$@D#B^
    inflate_block = ))$@D#@$
    inflate_dynamic = ))$@CF(#
    inflate_stored = ))$@CDAA
    inflate_fixed = ))$@CEB$
    inflate_codes = ))$@CAE^
    huft_build = ))$@C&@)
    huft_free = ))$@CACA
    NEEDBYTE = ))$@D$$*
    XOR:
    byte 1 xor 0x92
    byte 2 xor 0x65
    byte 3 xor 0x67
    byte 4 xor 0x57
    The first 4 bytes of the files contain the uncompressed data size which is used to allocate the correct amount of memory. The next 4 bytes are encrypted. With this and the above knowledge you can now program your own application. I've thrown together a quick hack job sample using the zpipe example from zlib. You can download and apply this patch file or get the full source. Be warned my development platform is Linux and it won't compile for Windows. For Windows you would need to remove the code that retrieves the file size in the def function and replace it with the Win32 equivalent, eg.

    Code:
    HANDLE hFile;
     
    hFile = GetStdHandle(STD_INPUT_HANDLE);
     
    if (GetFileSizeEx(hFile, &dest_size) == 0)
        return Z_ERRNO;
    Apply Patch:
    patch < zpipe-enc.patch
    Compile ZPipe:
    gcc -o zpipe zpipe.c -lz
    Compress Usage:
    zpipe < phantom.txt > phantom.enc
    Decompress Usage:
    zpipe -d < phantom.enc > phantom.txt
    Note: Newer clients have a list of 128bit checksums to deter modification. It's far easier to remove the corrupt file check than it is to replace the list. Both require modifying the client.

    Code:
    /* zpipe.c: example of proper use of zlib's inflate() and deflate()
       Not copyrighted -- provided to the public domain
       Version 1.2  9 November 2004  Mark Adler */
     
    /* Version history:
       1.0  30 Oct 2004  First version
       1.1   8 Nov 2004  Add void casting for unused return values
                         Use switch statement for inflate() return values
       1.2   9 Nov 2004  Add assertions to document zlib guarantees
       1.3   6 Apr 2005  Remove incorrect assertion in inf()
     */
     
    #include <stdio.h>
    #include <string.h>
    #include <assert.h>
    #include "zlib.h"
     
    #include <sys/types.h>
    #include <sys/stat.h>
     
    #define CHUNK 16384
     
    /* Compress from file source to file dest until EOF on source.
       def() returns Z_OK on success, Z_MEM_ERROR if memory could not be
       allocated for processing, Z_STREAM_ERROR if an invalid compression
       level is supplied, Z_VERSION_ERROR if the version of zlib.h and the
       version of the library linked do not match, or Z_ERRNO if there is
       an error reading or writing the files. */
    int def(FILE *source, FILE *dest, int level)
    {
        int ret, flush;
        unsigned have;
        z_stream strm;
        char in[CHUNK];
        char out[CHUNK];
        char *buf;
        unsigned long dest_size;
        unsigned long indx = 0;
        struct stat sb;
     
        have = fileno(source);
     
        if (fstat(have, &sb) < 0)
            return Z_ERRNO;
     
        if (!S_ISREG(sb.st_mode))
            return Z_ERRNO;
     
        if ((dest_size = (unsigned long)sb.st_size) <= 0)
            return Z_ERRNO;
     
        if (fwrite(&dest_size, 4, 1, dest) != 1 || ferror(dest))
            return Z_ERRNO;
     
        /* allocate deflate state */
        strm.zalloc = Z_NULL;
        strm.zfree = Z_NULL;
        strm.opaque = Z_NULL;
        ret = deflateInit2(&strm, level, Z_DEFLATED, -MAX_WBITS, 8, Z_DEFAULT_STRATEGY);
        if (ret != Z_OK)
            return ret;
     
        /* compress until end of file */
        do {
            strm.avail_in = fread(in, 1, CHUNK, source);
            if (ferror(source)) {
                (void)deflateEnd(&strm);
                return Z_ERRNO;
            }
            flush = feof(source) ? Z_FINISH : Z_NO_FLUSH;
            strm.next_in = in;
     
            /* run deflate() on input until output buffer not full, finish
               compression if all of source has been read in */
            do {
                strm.avail_out = CHUNK;
                strm.next_out = out;
                ret = deflate(&strm, flush);    /* no bad return value */
                assert(ret != Z_STREAM_ERROR);  /* state not clobbered */
                have = CHUNK - strm.avail_out;
                if (have > 0) {
                    buf = out;
     
                    do {
                        if (dest_size > indx++) {
                            switch (indx) {
                            case 1:
                                *buf ^= 0x92;
                                break;
                            case 2:
                                *buf ^= 0x65;
                                break;
                            case 3:
                                *buf ^= 0x67;
                                break;
                            case 4:
                                *buf ^= 0x57;
                            }
                        }
                    } while (*buf++);
     
                    if (fwrite(out, 1, have, dest) != have || ferror(dest)) {
                        (void)deflateEnd(&strm);
                        return Z_ERRNO;
                    }
                }
            } while (strm.avail_out == 0);
            assert(strm.avail_in == 0);     /* all input will be used */
     
            /* done when last data in file processed */
        } while (flush != Z_FINISH);
        assert(ret == Z_STREAM_END);        /* stream will be complete */
     
        /* clean up and return */
        (void)deflateEnd(&strm);
        return Z_OK;
    }
     
    /* Decompress from file source to file dest until stream ends or EOF.
       inf() returns Z_OK on success, Z_MEM_ERROR if memory could not be
       allocated for processing, Z_DATA_ERROR if the deflate data is
       invalid or incomplete, Z_VERSION_ERROR if the version of zlib.h and
       the version of the library linked do not match, or Z_ERRNO if there
       is an error reading or writing the files. */
    int inf(FILE *source, FILE *dest)
    {
        int ret;
        unsigned have;
        z_stream strm;
        char in[CHUNK];
        char out[CHUNK];
        char *buf;
        unsigned long dest_size;
        unsigned long indx = 0;
     
        have = fread(in, 1, 4, source);
     
        if (have != 4 || ferror(source)) {
            return Z_ERRNO;
        }
     
        dest_size = ((unsigned long)in[0]) |
                    ((unsigned long)in[1] << 8) | 
                    ((unsigned long)in[2] << 16) | 
                    ((unsigned long)in[3] << 24);
     
        /* allocate inflate state */
        strm.zalloc = Z_NULL;
        strm.zfree = Z_NULL;
        strm.opaque = Z_NULL;
        strm.avail_in = 0;
        strm.next_in = Z_NULL;
        ret = inflateInit2(&strm, -MAX_WBITS);
        if (ret != Z_OK)
            return ret;
     
        /* decompress until deflate stream ends or end of file */
        do {
            strm.avail_in = fread(in, 1, CHUNK, source);
            if (ferror(source)) {
                (void)inflateEnd(&strm);
                return Z_ERRNO;
            }
            if (strm.avail_in == 0)
                break;
     
            buf = in;
     
            do {
                if (dest_size > indx++) {
                    switch (indx) {
                    case 1:
                        *buf ^= 0x92;
                        break;
                    case 2:
                        *buf ^= 0x65;
                        break;
                    case 3:
                        *buf ^= 0x67;
                        break;
                    case 4:
                        *buf ^= 0x57;
                    }
                }
            } while (*buf++);
     
            strm.next_in = in;
     
            /* run inflate() on input until output buffer not full */
            do {
                strm.avail_out = CHUNK;
                strm.next_out = out;
                ret = inflate(&strm, Z_NO_FLUSH);
                assert(ret != Z_STREAM_ERROR);  /* state not clobbered */
                switch (ret) {
                case Z_NEED_DICT:
                    ret = Z_DATA_ERROR;     /* and fall through */
                case Z_DATA_ERROR:
                case Z_MEM_ERROR:
                    (void)inflateEnd(&strm);
                    return ret;
                }
                have = CHUNK - strm.avail_out;
                if (fwrite(out, 1, have, dest) != have || ferror(dest)) {
                    (void)inflateEnd(&strm);
                    return Z_ERRNO;
                }
            } while (strm.avail_out == 0);
     
            /* done when inflate() says it's done */
        } while (ret != Z_STREAM_END);
     
        /* clean up and return */
        (void)inflateEnd(&strm);
        return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR;
    }
     
    /* report a zlib or i/o error */
    void zerr(int ret)
    {
        fputs("zpipe: ", stderr);
        switch (ret) {
        case Z_ERRNO:
            if (ferror(stdin))
                fputs("error reading stdin\n", stderr);
            if (ferror(stdout))
                fputs("error writing stdout\n", stderr);
            break;
        case Z_STREAM_ERROR:
            fputs("invalid compression level\n", stderr);
            break;
        case Z_DATA_ERROR:
            fputs("invalid or incomplete deflate data\n", stderr);
            break;
        case Z_MEM_ERROR:
            fputs("out of memory\n", stderr);
            break;
        case Z_VERSION_ERROR:
            fputs("zlib version mismatch!\n", stderr);
        }
    }
     
    /* compress or decompress from stdin to stdout */
    int main(int argc, char **argv)
    {
        int ret;
     
        /* do compression if no arguments */
        if (argc == 1) {
            ret = def(stdin, stdout, Z_DEFAULT_COMPRESSION);
            if (ret != Z_OK)
                zerr(ret);
            return ret;
        }
     
        /* do decompression if -d specified */
        else if (argc == 2 && strcmp(argv[1], "-d") == 0) {
            ret = inf(stdin, stdout);
            if (ret != Z_OK)
                zerr(ret);
            return ret;
        }
     
        /* otherwise, report usage */
        else {
            fputs("zpipe usage: zpipe [-d] < source > dest\n", stderr);
            return 1;
        }
    }
    I have managed to compile the new encpack.c file using LCC for windows and the program works fine. But it seems to only work if I have a small txt file that im encrypting and it seems when decrypting the file, I get a 1 or 2kb file output which is incorrect.

    Please help?

  25. #125
    ANTI emi is offline
    Grand MasterRank
    Mar 2009 Join Date
    ZHLocation
    1,378Posts

    Re: *.enc unpacking & repacking..

    an much easier way than compress with zippe is modify the balq gm tools for enc repack.....its much easier....



Page 5 of 6 FirstFirst 123456 LastLast

Advertisement