Skoči na vsebino

Razbijanje (odklepanje) .pdf


Priporočene objave

Torej imam en file .pdf in rad bi ga nekako spravil v wordov document. Problem je v tem da je file.pdf zaklenjen (standard) in ne dopušča nič niti printanja :hmm: .

Torej je to sploh možno? Če je kako?

Hvala

P.S. Pridige o avtorskih ne rabim.

Povezava do komentarja
Delite na drugih straneh

Opcija je tudi da označiš tekst in copy/paste, če pa tudi to ne dovoli pa si iz DC++ potegni Adobe Acrobat Writer.

Povezava do komentarja
Delite na drugih straneh

če imaš samo tekst - narediš screenshote recimo z Paint Shop Projem (vsako stran posebej), potem pa to nafilaš v program za OCR in dobiš vn besedilo. je nekaj dela, ampak manj, kot če bi pretipkaval!

Povezava do komentarja
Delite na drugih straneh

Najmanj dela pa je da snameš acrobat password recovery (ali nekaj takega) pa odkleneš, pol pa delaš kar hočeš.

El B,.

Povezava do komentarja
Delite na drugih straneh

probaj Advanced PDF Password Recovery Pro, mene še ni razočaral! ;)

ta program ti bo odkleno pdf, je pa vsekakor problem prenosa iz pdf v word, tudi sam iščem kak program, ki bi zmogo prenašat brez da zgubiš vso obliko al pa da imaš probleme s tabelami, slikami, če pozna kdo kaj takega bi se pa tudi jaz priporočal...

Popravljeno . Popravil C( o )( o )L
Povezava do komentarja
Delite na drugih straneh

Ne boste vrje odklenjen je blo s temle:

/* fileSaveAs.c 


This program reads a pdf encrypted with the fileOpen plugin,

and attempts to write a plain pdf.


Compile with:

gcc -g -o fileSaveAs -lssl -lcrypto fileSaveAs.c


To compile, you'll need packages libssl09-dev and libCrypto.

This is a list of things that must be worked out: 


1) It does not decrypt strings, so there is no navigation 

   bar on the left, no author, no additional info and such.

2) Often in the resulting pdf there are many white pages.

3) I had only one ebook to work with, so the salt that

   I have blatantly hardcoded may be different.

4) The ebook I have contains the strings '/FOPN_fLock /V 1',

   I guess that it is the version of the plugin.  There

   certainly are other versions of the plugin, I don't

   know about them.

5) When printing, sometimes acrobat reader says that there

   are illegal characters.


So much to do...

*/


#include <stdio.h>

#include <openssl/md5.h>

#include <sys/stat.h>

#include <sys/fcntl.h>

#include <getopt.h>


#define MAX_OBJ_LEN 2000000

#define STREAM_STR "stream"

#define END_STREAM_STR "endstream"

#define OBJ_STR " obj"

#define END_OBJ_DELIM "endobj"

#define ENCRYPTION_STRING "/Encrypt"


/* I know this is ugly, but hey, I said there is much

to do!   Begin here!  */

unsigned char pObjBuf[MAX_OBJ_LEN];



#define SHUFFLEUP(YY, XX, ZZ, AA) {  \

                    YY=0;            \

                    YY=(char)*ZZ;    \

                    YY=YY << XX;     \

                    AA |= YY;        \

                    ZZ++; }            


unsigned char S[256];

unsigned char K[256];


/* This is the only thing they added on top of plain RC4.  */

void superSecret

(

    unsigned char *pData,

    int nIntParam,

    MD5_CTX *pMd5Ctx

)

{

    unsigned long lTmp1,

    	lTmp2,

    	lTmp3,

    	lTmp4,

    	lTmp5,

    	lTmp6,

    	lTmp7;

    unsigned long *plPoint1;

    unsigned char *plMainPnt;

    

    plMainPnt=pData;

    if(0 == nIntParam)

        return; 

    lTmp4=pMd5Ctx->Nl;

    lTmp7=nIntParam; 

    lTmp7=lTmp7<<3; 

    lTmp4+= lTmp7; 

    lTmp4 &= 0xFF; 

    if(lTmp4<pMd5Ctx->Nl)

    pMd5Ctx->Nh++;

    lTmp6=nIntParam; 

    lTmp6=lTmp6 >> 0x1d; 

    pMd5Ctx->Nh+= lTmp6; 

    pMd5Ctx->Nl=lTmp4; 


    if(0!= pMd5Ctx->num) { 

        plPoint1=(unsigned long *)pMd5Ctx->data; 

        lTmp5=pMd5Ctx->num;

        lTmp5=lTmp5 >> 2; 

        lTmp7=pMd5Ctx->num;

        lTmp7&= 3; 

        lTmp1=lTmp7; 

        lTmp4=pMd5Ctx->num;

        lTmp4+= nIntParam; 

        if(lTmp4>= 0x40) { 

            lTmp4=plPoint1[lTmp5]; 

            switch(lTmp1) {

                case 0: 

                SHUFFLEUP(lTmp4, 0, plMainPnt, lTmp4); 

                case 1: 

                SHUFFLEUP(lTmp7, 8, plMainPnt, lTmp4);

                case 2:

                SHUFFLEUP(lTmp6,0x10, plMainPnt, lTmp4);

                case 3:

                SHUFFLEUP(lTmp7, 0x18, plMainPnt, lTmp4);

            }

            plPoint1[lTmp5]=lTmp4;

            

            lTmp5++;

            if(lTmp5 <0x10) {

                do {

                    SHUFFLEUP(lTmp4, 0, plMainPnt, lTmp4);

                    SHUFFLEUP(lTmp6, 8, plMainPnt, lTmp4);

                    SHUFFLEUP(lTmp7, 0x10, plMainPnt, lTmp4);

                    SHUFFLEUP(lTmp6, 0x18, plMainPnt, lTmp4); 

                    plPoint1[lTmp5]=lTmp4;

                } while(lTmp5<10);

            }

            lTmp7=0x40-pMd5Ctx->num;

            nIntParam-= lTmp7;

            MD5_Update (pMd5Ctx, (unsigned char *)plPoint1, 0x40);

            pMd5Ctx->num;

        } else {

            pMd5Ctx->num+= nIntParam;

            if(lTmp1+nIntParam<4) {

                lTmp4=plPoint1[lTmp5];

                switch(lTmp1) {

                    case 0:

                    SHUFFLEUP(lTmp4, 0, plMainPnt, lTmp4); 

                    nIntParam--;

                    if(0 == nIntParam)

                    break;

                    case 1:

                    SHUFFLEUP(lTmp7, 8, plMainPnt, lTmp4);                     

                    nIntParam--;

                    if(0 == nIntParam)

                    break;

                    case 2:

                    SHUFFLEUP(lTmp6, 0x10, plMainPnt, lTmp4); 

                } 

                plPoint1[lTmp5]=lTmp4;

                return;

            }

            lTmp7=pMd5Ctx->num;

            lTmp7=lTmp7 >> 2;

            lTmp3=lTmp7;

            lTmp2=pMd5Ctx->num & 3;

            lTmp4=((unsigned char *)plPoint1)[4*lTmp5];

            

            switch(lTmp1) {

                case 0:

                SHUFFLEUP(lTmp4, 0, plMainPnt, lTmp4);

                case 1:

                SHUFFLEUP(lTmp7, 8, plMainPnt, lTmp4);

                case 2:

                SHUFFLEUP(lTmp6, 0x10, plMainPnt, lTmp4);

                case 3:

                SHUFFLEUP(lTmp7, 0x18, plMainPnt, lTmp4);

            }

            plPoint1[lTmp5++]=lTmp4;

            if(lTmp5<lTmp3) {

                do {

                    SHUFFLEUP(lTmp4, 0, plMainPnt, lTmp4);

                    SHUFFLEUP(lTmp6, 8, plMainPnt, lTmp4);

                    SHUFFLEUP(lTmp7, 0x10, plMainPnt, lTmp4);

                    SHUFFLEUP(lTmp6, 0x18, plMainPnt, lTmp4);

                    plPoint1[lTmp5++]=lTmp4;

                } while(lTmp5<lTmp3);

            }

            if(0 == lTmp2)

            return;

            lTmp4=0;

            plMainPnt+= lTmp2;

            switch(lTmp2) {

                case 0:

                plMainPnt--;

                lTmp4=0;

                lTmp4=(char)*plMainPnt;

                lTmp4 << 0x10;

                case 2:

                plMainPnt--;

                lTmp6=0;

                lTmp6=(char)*plMainPnt;

                lTmp6<<8;

                lTmp4|= lTmp6;

                case 1:

                plMainPnt--;

                lTmp7=0;

                lTmp7=(char)*plMainPnt;

                lTmp4|= lTmp7;

                case 3:

                plPoint1[lTmp5]=lTmp4;

                return;

            }

        }

    }

    if(0 == ((unsigned long)plMainPnt & 0x3)) { 

        lTmp5=nIntParam;

        if ((lTmp5>> 6) >0) {

            lTmp5=lTmp5<<6;

            MD5_Update (pMd5Ctx, (unsigned char *)plMainPnt, lTmp5);

            plMainPnt+= lTmp5;

            nIntParam-= lTmp5;

        }

    }

    plPoint1=(unsigned long *)pMd5Ctx->data;

    if(nIntParam>= 0x40) {

        do {

            if(plMainPnt!= (unsigned char *)plPoint1) {

                memcpy((unsigned char *)plPoint1, plMainPnt, 0x40);

            }

            plMainPnt+= 0x40;

            MD5_Update (pMd5Ctx, (unsigned char *)pMd5Ctx->data, 0x40);

        } while(nIntParam>= 0x40);

    }

    lTmp1=nIntParam;

    pMd5Ctx->num=lTmp1;

    if(0 == lTmp1)

    return;

    lTmp5=lTmp1>>2;

    plPoint1[lTmp5]=0;

    memcpy((unsigned char *)plPoint1, plMainPnt, lTmp1);

}


/* From 'Applied Cryptography'.

Yes, they used an algorithm from a book.

I can understand: after all, it is a good algorithm.

But If I wanted to distribute some encrypted data, I wouldn't 

put the algorithm _AND_ the key in the same place.  */

void CreateRc4Sbox

(

    unsigned char *pKeySeed

)

{

    int i=0;

    int j=0;

    int nRealIndex;

    unsigned char nTemp;


    for (i=0; i<256; i++)

        S[i]=i;


    for (i=0; i<256; i++)

        K[i]=pKeySeed[i%16];

    nRealIndex=0;

    for (i=0; i<256; i++) {

        j=(j + S[i] + K[nRealIndex])%256;

        nRealIndex++;

        if(nRealIndex>9)

            nRealIndex=0;

        nTemp=S[i];

        S[i]=S[j];

        S[j]=nTemp;

    }

}



/* Also from the book */

int Rc4Decrypt

(

    char *pCryptoData,

    int nCryptoBufLen,

    char *pResults,

    int nResultsBufSize,

    unsigned char *SBox

)

{

    short nByte;

    int nClearPos=0,

        nBuf=0,

        nBuf2=0,

        nCount,

        nSwap,

         nLength=nCryptoBufLen,

        nAdv;

    while(0!= nLength) {

        nBuf++;

        nBuf &= 0xFF;

        nCount=SBox[nBuf];

        nBuf2 += nCount;

        nBuf2 &= 0xFF;

        nSwap=SBox[nBuf2];

        nAdv=nSwap;

        SBox[nBuf]=nSwap;

        SBox[nBuf2]=nCount;

        nCount += nAdv;

        nCount &= 0xFF;

        nByte=SBox[nCount];

        nByte ^= *pCryptoData;

        nClearPos++;

        *pResults=nByte;

        ++pCryptoData;

        ++pResults;

        nLength--;

    }

    return nClearPos;

}



/* this function calculates the key and executes the Rc4 

decrypt loop.  Here I have hardcoded the salt: 'DgNab'.

It may change in other ebooks but I only have one...  */

int mainDecryptLoop

(

    unsigned char * pCryptText,

    int nCryptSize,

    unsigned char * pClearBuffer, 

    int nClearBufferSize,

    int nNumObj

)

{

    unsigned char rc4Key[16],

        keyBuf[8];

    int nClearLength,

        nIdx;

    MD5_CTX md5Ctx;

    unsigned char salt[20];


    for(nIdx=0; nIdx<8; nIdx++)

        keyBuf[nIdx]=0;


    *(int*)keyBuf=nNumObj;

    strcpy(salt, "DgNab");

    MD5_Init(&md5Ctx);

    superSecret(salt, 5, &md5Ctx);

    superSecret(keyBuf, 3, &md5Ctx);

    superSecret(keyBuf+4, 2, &md5Ctx);

    MD5_Final(rc4Key, &md5Ctx);

    CreateRc4Sbox(rc4Key);

    nClearLength=Rc4Decrypt(pCryptText, nCryptSize, pClearBuffer, nClearBufferSize, S);

    return nClearLength;

}



/* the following is just some PDF parsing.

The juicy part is over, I'm afraid...  */

int removeSecurityString

(

    unsigned char *pBeginBlock, 

    unsigned char *pEndBlock

)

{

    unsigned char *pTemp;

    for(

        pTemp=pBeginBlock;

        pTemp!=pEndBlock;

        pTemp++

    ) {

        if(!strncmp(pTemp, ENCRYPTION_STRING, strlen(ENCRYPTION_STRING))) {

            while(

                '\n'!=*pTemp &&

                '\r'!=*pTemp

            ) {

                *pTemp=' ';

                pTemp++;

            }

        }

    }

    

    return 0;

}



int scanFile

(

    const int fh,

    const int ofh,

    int *pnWrote

)

{

    int numObject,

        nCryptLen,

        nClearTextLength,

        bStayThere;

    unsigned char *pStart,

        *pStartCrypted,

        *pBeginBlock,

        *pCurrent;

    

    for(;;) {

        bStayThere=1;

        pCurrent=pObjBuf;

        pCurrent+=strlen(OBJ_STR);

        pStart=pCurrent;


        while(bStayThere) {

            if(1>read(fh,pCurrent,1)) {

                removeSecurityString(pBeginBlock, pCurrent);

                write(ofh, pBeginBlock, pCurrent-pBeginBlock);

                return 0;

            }

            if(!strncmp(pCurrent-strlen(OBJ_STR), OBJ_STR, strlen(OBJ_STR))) {

                pCurrent++;

                write(ofh, pStart, pCurrent-pStart);

                while(*pCurrent!=' ')

                    pCurrent--;

                pCurrent--;

                while(*pCurrent!=' ')

                    pCurrent--;

                *pCurrent=0;

                numObject=atoi(pStart);

                bStayThere=0;

            }

            pCurrent++;

        }

    

        pCurrent=pObjBuf;

        pCurrent+=strlen(END_OBJ_DELIM);

        pBeginBlock=pCurrent;

        bStayThere=1;

        while(bStayThere) {

            if(1>read(fh,pCurrent,1)) {

                write(ofh, pBeginBlock, pCurrent-pBeginBlock);

                return 0;

            }

            if(strncmp(pCurrent-strlen(END_OBJ_DELIM), END_OBJ_DELIM, strlen(END_OBJ_DELIM))) {

                pCurrent++;

                continue;

            }

            for(pStart=pObjBuf-strlen(END_OBJ_DELIM); pStart!=pCurrent; pStart++ ) {

                if(!bStayThere)

                    break;

                if(strncmp(pStart, STREAM_STR, strlen(STREAM_STR)))

                    continue;

                pStartCrypted=pStart+strlen(STREAM_STR)+2;

                for(pStart=pStartCrypted; pStart!=pCurrent; pStart++) {

                    if(strncmp(pStart, END_STREAM_STR, strlen(END_STREAM_STR)))

                        continue;

                    nCryptLen=pStart-pStartCrypted-1;

                    nClearTextLength=mainDecryptLoop(pStartCrypted,nCryptLen,pStartCrypted,nCryptLen,numObject);

                    bStayThere=0;

                    break;

                }

            }

            write(ofh, pBeginBlock, 1+pCurrent-pBeginBlock);

            bStayThere=0;

        }

    }

    return 0;

}



int Usage

(

    const char *szMessage

)

{

    fprintf(stderr, "%s\n", szMessage);

    fprintf(stderr, "Usage: \n");

    fprintf(stderr, "-h      : this message\n");

    fprintf(stderr, "-i file : input file\n");

    fprintf(stderr, "-o file : output file\n");

    return 255;

}




int main

(

    int argc,

    char **argv

)

{

    int ifh,

        ofh,

        nWrote,

        nOffs;

    char *strInputFileName,

        *strOutputFileName,

        ch;

    struct stat statStruct;

    strInputFileName=NULL;

    strOutputFileName=NULL;


    while((ch=getopt(argc, argv, "hi:o:"))!= -1) {

        switch(ch) {

            case 'h':

                return Usage("Help message requested");

                break;

            case 'i':

                strInputFileName=optarg;

                break;

            case 'o':

                strOutputFileName=optarg;

                break;

        }

    }


    if(NULL == strInputFileName)

        return Usage("Must give input file");


    if(NULL == strOutputFileName)

        return Usage("Must give output file");


    if(stat(strInputFileName, &statStruct))

        return Usage("Error opening input file");


    ifh=open(strInputFileName, O_RDONLY);


    ofh=open(strOutputFileName, O_WRONLY|O_CREAT|O_TRUNC, 0666);


    nWrote=0;

    if(scanFile(ifh, ofh, &nWrote))

        return Usage("Problems scanning file");


    close(ifh);

    close(ofh);

    return 0;

}


sam k se pasta u word nima prejšnje oblike, žal a vseeno mnogo bolje kot prej...

Popravljeno . Popravil marem
Povezava do komentarja
Delite na drugih straneh

  • 2 tedne pozneje...

kdo je tukaj tolk spretn, da bi mi lahk to prejšnjo kodo uporabil in mi odklenil en PDF? Gre za legalno zadevo, ker prevajam ena navodila, pa so zaklenjena, jaz pa bi jih raje eksportal v word. .. žal moram oddati v petek, ni časa za komunikacijo "navzgor" do naročnika...

HELP! :)

Povezava do komentarja
Delite na drugih straneh

  • 7 mesecev pozneje...

Halo sem nova tukaj in upam da mi boste pomagali. Sem ena tistih ki ima bolj malo znanja o rač. programih vendar veliko željo da bi se kaj naučila.

Za službo moram na hitro (dan- dva) prospektu ki je na dveh straneh angleški tekst nadomestiti z slovenskim in seveda ohraniti slike. Prospekt imam v pdf obliki.

Sem že nekaj na netu zasledila da je to možno z nekimi programi. Prosim za pomoooč.

Povezava do komentarja
Delite na drugih straneh

Halo sem nova tukaj in upam da mi boste pomagali. Sem ena tistih ki ima bolj malo znanja o rač. programih vendar veliko željo da bi se kaj naučila.

Za službo moram na hitro (dan- dva) prospektu ki je na dveh straneh angleški tekst nadomestiti z slovenskim in seveda ohraniti slike. Prospekt imam v pdf obliki.

Sem že nekaj na netu zasledila da je to možno z nekimi programi. Prosim za pomoooč.

a hočeš končni produkt spe timeti PDF?

skratka - če je stvar ka jkomplicirano dizajnirana, lahko kar pozabiš na te konverzije ... razen, če boš pote mvse skupa jv indesignu poonovno postavila, ali photoshopu ...

Povezava do komentarja
Delite na drugih straneh

glej, ko ti spremeni iz pdf v doc, mas pol v wordu text kot text in sliko kot sliko, to teli programcki delajo...zdej pa ce mas ti v tvojem pdf formatu prospekt, ki je dan v pdf format kot scan prospekta, ki je bil tiskan/printan :? , pol je pa tm notr ena velka slika in ko ti spremeni v word format, je vse kar se zgodi da imas .doc file, ki vsebuje sliko, namesto .pdf z sliko... pol ti noben programck nau tega pretvoru :grrr

Povezava do komentarja
Delite na drugih straneh

Ja poskusla sem vse programčke vsak spremeni pdf v word ampak jest potem v wordu ne moremo popravljati tekst da brišem angl. in vpisujem slovenskega

In potem boš hotla spet met identičn PDF nazaj, samo s prevedenim tekstom, al kako?

Povezava do komentarja
Delite na drugih straneh

Ja zdej sem jest to mal pogledala. Prospekt sem dobila kot bitno sliko in sem ga z acrobatu shranla kot pdf potem sem pa ta novi pdf s programom pretvorla v word dokument ki pa zopet zgleda kot prej pdf delat na njem se pa ne da nič

Povezava do komentarja
Delite na drugih straneh

Ja zdej sem jest to mal pogledala. Prospekt sem dobila kot bitno sliko in sem ga z acrobatu shranla kot pdf potem sem pa ta novi pdf s programom pretvorla v word dokument ki pa zopet zgleda kot prej pdf delat na njem se pa ne da nič

...slike se ne da pretvorit v word format... tko da ce bi hotla tole spremenit, pa rabs ze mal znanja z kakim Photoshopom oz programom za obdelavo slik...

Povezava do komentarja
Delite na drugih straneh

Ustvarite račun ali se prijavite za komentiranje

Za objavljanje se morate najprej registrirati

Ustvarite račun

Registrirajte se! To je zelo enostavno!

Registriraj nov račun

Prijava

Že imate račun? Prijavite se tukaj.

Vpišite se
  • Zadnji brskalci   0 članov

    • Noben registriran uporabnik, si ne ogleduje to stran.


×
×
  • Ustvari novo...

Pomembne informacije

Z uporabo te strani se strinjate z uporabo piškotkov in se strinjate s pravili o varovanju zasebnosti!