Ciao a tutti,
scrivo su questo forum sperando che qualcuno possa darmi un suggerimento. Prima o poi quando si lotta con i Nanomites ci si fa la bua, il mio è uno di questi casi.
Per chi non conoscesse il tema, brevemente e grossolanamente, si tratta una tecnica per complicare l'analisi tramite un processo "tracciante" (consentitemi il termine) che si aggancia ad un altro processo (o ad esempio forka). Il processo sotto debug (con cattiveria) utilizza degli INT3 per sollevare eccezioni cattuare dal padre che si occupa di gestirle e, nel caso di un crackme, per esempio ricevere dei dati dal figlio ed elaborarli per complicare l'analisi.
Sto sbattendo da diversi giorni la testa su un crackme ELF64 che crea una miriade di processi figli (fork) che, gerarchicamente, si debuggano a scala fino all'ultimo figlio, che debugga, a sua volta, il primo padre della gerarchia, creando una sorta di catena. Tutto funziona tramite ptrace usando PTRACE_SEIZE.
Il Crackme è complesso, uno dei più complessi che io abbia mai cercato di risolvere. L'esecuzione è spezzattata sui diversi figli e l'algoritmo di verifica delle chiavi è complesso e ancora non sono riuscito a ricostruirlo e comprenderlo del tutto, complice il fatto che ogni maledetto figlio solleva INT3 al suo paparino, che a sua volta solleva un'eccezione al suo paparino e così via... Risultato? Ad un certo punto si perde consapevolezza di cosa stia succedendo...
Ovviamente non vi chiedo di risolverlo al posto mio, prima o poi ci devo riuscire!
Vi siete mai cimentati in qualcosa di simile? Se sì, ve ne siete cavati? Qualche suggerimento? Conoscete qualche tool o qualche tecnica che possa essere d'aiuto in un simile scenario? (Tenete presente che sono su Linux).
Grazie
scrivo su questo forum sperando che qualcuno possa darmi un suggerimento. Prima o poi quando si lotta con i Nanomites ci si fa la bua, il mio è uno di questi casi.
Per chi non conoscesse il tema, brevemente e grossolanamente, si tratta una tecnica per complicare l'analisi tramite un processo "tracciante" (consentitemi il termine) che si aggancia ad un altro processo (o ad esempio forka). Il processo sotto debug (con cattiveria) utilizza degli INT3 per sollevare eccezioni cattuare dal padre che si occupa di gestirle e, nel caso di un crackme, per esempio ricevere dei dati dal figlio ed elaborarli per complicare l'analisi.
Sto sbattendo da diversi giorni la testa su un crackme ELF64 che crea una miriade di processi figli (fork) che, gerarchicamente, si debuggano a scala fino all'ultimo figlio, che debugga, a sua volta, il primo padre della gerarchia, creando una sorta di catena. Tutto funziona tramite ptrace usando PTRACE_SEIZE.
Il Crackme è complesso, uno dei più complessi che io abbia mai cercato di risolvere. L'esecuzione è spezzattata sui diversi figli e l'algoritmo di verifica delle chiavi è complesso e ancora non sono riuscito a ricostruirlo e comprenderlo del tutto, complice il fatto che ogni maledetto figlio solleva INT3 al suo paparino, che a sua volta solleva un'eccezione al suo paparino e così via... Risultato? Ad un certo punto si perde consapevolezza di cosa stia succedendo...
Ovviamente non vi chiedo di risolverlo al posto mio, prima o poi ci devo riuscire!
Vi siete mai cimentati in qualcosa di simile? Se sì, ve ne siete cavati? Qualche suggerimento? Conoscete qualche tool o qualche tecnica che possa essere d'aiuto in un simile scenario? (Tenete presente che sono su Linux).
Grazie