PDA

View Full Version : Controllo su seriale hard disk


Mr Carlo
18-07-2017, 10:22
Ciao a tutti,
ho un programmino (non creato da me) su ubuntu, è una specie di app che gira su tomcat con pagine jsp.
Siccome dovrei sostituire l'SSD della macchina con uno più capiente, ho clonato il disco con clonezilla. L'avvio avviene correttamente ma ad un certo punto si blocca e mi dà un errore di sicurezza. Ho provato a clonare pure con DD e pure su un SSD preciso identico ma l'errore è sempre lo stesso.

Il problema grosso è che il programmatore che ha creato questo accrocchio non lavora più, oltretutto è pure irreperibile, per cui non ci sono speranze di chiedergli come l'abbia creato.

Io penso ci sia un controllo sul numero seriale del disco... altre idee?

Grazie a tutti!

DooM1
19-07-2017, 00:47
Ma quindi non hai il file del pacchetto di installazione?

Mr Carlo
19-07-2017, 10:02
No, purtroppo non ho in mano nulla... non so nemmeno come sia installato.
E' tutto in una sottodirectory di /home e ci sono file .sh, .obj, e ovviamente .jsp e fin qui, aprendoli qualcosa ci capisco ma non trovo nessun controllo.

Ci sono anche 3 ulteriori subdirectory: /app /lib /util con alcuni file .class .jar e .so che ovviamente non riesco ad editare.

Grazie, a presto.

DooM1
19-07-2017, 17:54
Possibile che non ci sia qualche altro file di configurazione, magari un bellissimo .conf ? :D
Se c'è probabilmente è da qualche altra parte... dentro /etc ? Troppo facile?
Sperando che questo presunto controllo di seriale / uuid, non sia hard-coded.
Non ho mai usato tomcat, ma c'è anche un database?

Mr Carlo
20-07-2017, 12:29
Possibile che non ci sia qualche altro file di configurazione, magari un bellissimo .conf ?
Se c'è probabilmente è da qualche altra parte... dentro /etc ? Troppo facile?
Sperando che questo presunto controllo di seriale / uuid, non sia hard-coded.
Non ho mai usato tomcat, ma c'è anche un database?
Ci sono una marea di .conf, anche in /etc e li ho aperti tutti ma non ho trovato nulla...
Penso ci sia un database, non ho visto mySQL o cose simili ma devo verificare bene.


Domanda scema: non e' che magari e' il secure boot? provato a disattivarlo dal pannello delle opzioni di boot?
Altra domanda: ma come e' possibile che la vostra azienda non abbia il sorgente di un programma sviluppato internamente?! Mi sembra una situazione abbastanza critica: se avete un bug nel programma o dovete cambiarlo che fate??
EDIT: guarda qua https://askubuntu.com/questions/587463/how-to-solve-boot-in-insecure-mode-error (https://askubuntu.com/questions/587463/how-to-solve-boot-in-insecure-mode-error) non e' che hai qualcosa di simile?

E' un programma sviluppato nel 2010 di cui purtroppo si sono perse tutte le tracce, o sono state volutamente eliminate da chi è andato via dall'azienda.
Non è il secure boot purtroppo... il programma si avvia fino a questo famigerato controllo, dopodiché si blocca... quindi sicuramente è un controllo nel software.

Faccio un passo indietro: visto che come detto il clone è identico, secondo voi è sicuro che sia un controllo sul seriale del disco o potrebbe essere qualche altro tipo di controllo (non so, UUID, hash o altre cose...)?

Grazie a tutti.

DooM1
20-07-2017, 14:25
Eh qui purtroppo si tratterebbe di fare reverse engineering .
Se invece tenessi il vecchio SSD e montassi il nuovo nelle cartelle dove ti serve spazio? Insomma fai un po' di overlay nelle cartelle che sai che crescono.

zappy
20-07-2017, 14:39
...E' un programma sviluppato nel 2010 di cui purtroppo si sono perse tutte le tracce, o sono state volutamente eliminate da chi è andato via dall'azienda. ....
la vendetta del programmatore. L'avete licenziato/sottopagato? :D

DooM1
21-07-2017, 15:25
Il presunto controllo potrebbe anche essere effettuato semplicemente dallo script di avvio.
Controllerei su /etc/init.d/ se si vede qualcosa nel relativo script di avvio, provando anche ad avviare il programma manualmente per vedere se viene fuori qualche errore più specifico.
Inoltre controllerei su /var/log/ se c'è qualche log che riporti il problema e dia qualche indizio.

Mr Carlo
24-07-2017, 10:13
Ciao a tutti,
ho guardato dappertutto ma non ho trovato nulla.
A questo punto il sospetto è che sia compilato in qualche .class
Ho decompilato alcuni files e, come già avevo intuito dal log, ho scoperto che c'è un securitycheck che può assumere valore 0 o -1. Quando assume valore 0 tutto ok, quando è -1 blocca l'esecuzione.
Ho visto nel file principale che spesso c'è un controllo su questa variabile, esempio:

if (Configuration.getSecurityCheck() == 0) {
Bootstrap.startThread();
}

oppure, caso negativo

if (Configuration.getSecurityCheck() != 0) {
SocketListener.showSecurityViolation();
}

in un file di configurazione ho trovato questa, che dovrebbe essere la funzione:

public static int getSecurityCheck()
{
if (DEBUG) {
securityCheck = Integer.valueOf(0);
}
if (securityCheck == null) {
if ((model.equals("fox-g20")) || (platform.equals("ARM-BeagleBone"))) {
securityCheck = Integer.valueOf(0);
} else {
File f = new File("/home/programma/eseguibile");
if (f.exists()) {
securityCheck = Integer.valueOf(new ShellInterpreter().exec(f.getAbsolutePath(), new String[] { "" }));
}
else
securityCheck = Integer.valueOf(-1);
}
log("Configuration.getSecurityCheck - securityCheck is " + securityCheck);
}

return securityCheck.intValue();
}
}

Grazie a tutti.

DooM1
24-07-2017, 13:32
'/home/programma/eseguibile'
Si, la chiave è qui credo.
Se si capisce che fa questo programma magari si riesce a correggere il comportamento, sarebbe la cosa migliore.
Bisogna vedere se è compilato o no, e se ha qualche file di configurazione.

Altrimenti bypasserei il controllo con questo programma, e lascerei il resto dei controlli del securitycheck.

Mr Carlo
25-07-2017, 08:29
Leggendo questo IF
if (f.exists()) {
securityCheck = Integer.valueOf(new ShellInterpreter().exec(f.getAbsolutePath(), new String[] { "" }));
}
else
securityCheck = Integer.valueOf(-1);

non è un controllo sull'esistenza del file eseguibile? Se è così, il file è sempre presente, non capisco come faccia a restituire "-1".

DooM1
25-07-2017, 13:30
non è un controllo sull'esistenza del file eseguibile? Se è così, il file è sempre presente, non capisco come faccia a restituire "-1".
No, non solo.
Leggi meglio il codice.
Se il file esiste viene eseguito e viene assegnato alla variabile il valore che il programma resituisce.
Se il file non esiste (blocco else) questo controllo non può venire eseguito, e alla variabile viene assegnato un valore arbitrario di -1.

Se pensi che quel controllo non ti serva potresti semplicemente cancellare/rinominare il programma, e cambiare a piacimento il valore che c'è nel blocco else.

Mr Carlo
26-07-2017, 09:52
Ho capito.
Non ho idea circa cosa faccia l'eseguibile, a parte restituire il valore che poi viene processato dall'if.
Altrimenti, creare un eseguibile che restituisca il valore che vuole l'if?