FelixFrog / pdfgrabber

Download PDF books from bSmart, Pearson, Oxford, and many more!
GNU Affero General Public License v3.0
97 stars 14 forks source link

Booktabz AES #57

Closed Miriamz1337 closed 10 months ago

Miriamz1337 commented 10 months ago

Stavo lavorando ad un progetto simile solo per booktab (volevo poter leggere i miei ebook senza dover utilizzare la loro app schifosa), sono abbastanza nuova al reverse engineering, quindi ho attaccato il processo con x64dbg, analizzato il flow, trovato la funzione che genera la chiave, e la funzione che si occupa di decifrare l'xhtml. Ho riscritto la funzione di generazione della chiave, e stavo riscrivendo la funzione per decifrare (la stavo riscrivendo istruzione per istruzione), quando dalla vostra repo ho notato che è semplicemente blowfish. Ora la mia domanda è: come avete determinato che fosse blowfish? pattern recognition? Oppure avete visto che decifrava in blocchi e quindi provato aes e blowfish con un processo puramente euristico? O ancora dato che nella versione browser di Zanichelli browser viene utilizzato blowfish avete optato direttamente per quello? Grazie mille :)

FelixFrog commented 10 months ago

Ciao! Innanzitutto mi fa piacere sapere che c'è qualcuno di interessato a pdfgrabber per quanto riguarda il lato reverse engineering. Per sviluppare pdfgrabber mi sono occupato principalmente delle applicazioni android per vari motivi:

Cerco dunque di evitare per quanto possibile di analizzare codice macchina di applicativi desktop o applicazioni web. Le prime (nel raro caso in cui non siano un semplice webview o app electron e ricadendo quindi nelle seconde) perché come avrai ben scoperto richiedono uno sforzo maggiore a causa di ottimizzazioni aggressive dei compilatori, offuscamento, e maggiore complessita in generale. Le seconde perché spesso forniscono dati di qualità minore (render in formato jpg dei pdf originali) in quanto percepite appunto più "vulnerabili" da parte degli sviluppatori, e perché permettono alle case editrici di aggiornarle quando preferiscono, rendendo gli script inutili in qualche mese. Al contrario, le app android richiedono una stabilità e una coerenza con una API che non può, per motivi tecnici, evolversi rapidamente, perché non è concepibile per un utente dover aggiornare un'app ogni volta che si vuole leggere un maledettissimo libro (e gli sviluppatori delle case editrici sono ben consapevoli che una buona fetta di questi utenti installa queste app su dispositivi decisamente poco potenti).

Per rispondere finalmente alla tua domanda (forse in modo un po' deludente) tutto ciò che ho fatto è stato:

  1. Ottenere l'APK dell'app di Booktab
  2. Aprirla in un decompilatore android (tipo jadx-gui)
  3. Cercare per le stringhe "AES", "Cipher", "Crypto", "Decrypt", ec...
  4. Individuare la routine di decriptazione
  5. Trovare dove un oggetto javax.crypto.Cipher viene inizializzato (nel nostro cas con .getInstance('Blowfish/CBC/PKCS5Padding');

Se hai altre domande sarò ben felice di risponderti!

Miriamz1337 commented 10 months ago

Ciao! Grazie mille per la risposta, sono abbastanza familiare con il reverse di app mobile (anche se di solito più per vulnerabilità), e l'avevo scartata a priori perché volevo affinare le mie skill con il reverse x64! Ti ringrazio ancora per la risposta :)

Miriamz1337 commented 10 months ago

Posso contattarti in privato in qualche modo?

FelixFrog commented 10 months ago

Posso contattarti in privato in qualche modo?

Certo! Puoi trovarmi su telegram