Port d'une appli sur plusieurs archs! [C] - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 16-10-2006 à 19:25:16
Interessant ton projet...
Je fait du c (plutot du c++ maintenant) et je me penche donc doucement sur ton probleme... mais attantion, j'ai pas vraiment de temps en ce moment... alors je ne pense pas faire beaucoup avancer les choses mais bon
La toute petite aide que je peut tout de suite apporter: pour compiler samdump2, il faut installer la librairie libssl-dev ... voilou, je suis sur ubunutu.
J'ai une chtite question concernant l'uilisation : j'imagine que /tmp/syskey, c'est le fichier de sortie ??? a priori si ce fichie n'existe pas le programme le cree???
Parce que j'ai des erreurs sur samdump2 : error reading from /tmp/syskey
Normal ce fichier existe pas !! ???
pour kbhive, il me sort : Error accessing key JD Wrong/corrupted hive??
J'imagine qu'il n'arrive pas a lire le fichier :-( saletes !! bah c'est bien tout ton probleme je crois...
JE regarderai mais enfin, deja sous ubuntu i686 dapper.. ca n'a pas l'air de marcher, pourtant c'est proche d'une debian !!
Marsh Posté le 16-10-2006 à 19:50:05
Oui il faut libssl en effet, j'ai des paquets Debian de prêt.
En fait voila la théorie du truc.
sam contient les hash des passwords. Il est crypté par une clef appelé syskey/bootkey. Bkhive decrypte cette clé dans le fichier system et la store dans /tmp/syskey.
Ensuite samdump decrypte le fichier sam avec la syskey que t'as extrait avec bkhive et dump les hashes des passwords.
Je vais essayer de voir pourquoi ca marche pas chez toi
Marsh Posté le 16-10-2006 à 19:52:11
Oups excusez-moi c'est une erreur de typo, j'ai inversé les deux fichiers, j'édite
Marsh Posté le 16-10-2006 à 20:03:16
Citation : Oups excusez-moi c'est une erreur de typo, j'ai inversé les deux fichiers, j'édite |
Tu veut dire que mon Sam devrai d'appeler system ???
Parce que c'est ce que je viensde voir : le nom de la cle lue par bkhive (chez moi, avec moult printf) me renvoie un nom de type SAM... hmmm
Tu confirme : il faut que j'intervertisse mes deux noms de fichiers "cles", system et sam .???
[edit] apres test : j'ai fait manger mon fichier system a bkhive et ca me donne bien le bon type de cle...
Par contre, j'ai un magnifique sgfault !
[edit2] : j'ai une piste pour mon segfault :
Dans le fichier hive.cpp, ligne 106 environ (j'ai ajoute des printf, j'ai pas pile poil les meme numero que ceux telechargeables) :
Code :
|
pour comprendre ce qu'il se passe, voila ce que j'affiche :
Code :
|
Dans la console, il me sort :
Code :
|
C'est logique : n->key_name fait 11 caracteres, et t 12... et n->name_len fait 44, donc il compare les 44 premiers octets entre t et n->key_name... !!!
Il y a donc un soucis au niveau de l'initialisation de n, effectue probablement (c'est la lecture que je fait du code hein je demande confirmation) par la fonction read_nk, appelee ligne 99 par cette meme fonction...
Elle est ou cette fonction ???? Je la trouve pas !!
Marsh Posté le 16-10-2006 à 20:19:49
Tes fichiers sont bons, faut juste appelé system via bkhive et sam par samdump (j'ai éditer le premier post )
PS: Tu es sur quelle architecture ?
gandalf@hellscream:~/packaging/ophcrack-tools/bkhive$ rgrep read_nk * |
Marsh Posté le 16-10-2006 à 20:25:20
Desole.. un peut fatigue la pas trouve comme un idiot
Bon un petit uname -a :
Code :
|
voilavoila..
Sinon, je trouve le comportement de memcmp bizarre... la fonction _RegOpenKey est d'abord appelee une premiere fois dans le main, surement pour diverses init, pas trop fouille vu que ca passe, et puis ensuite elle est appellee dans une boucle effectuant 4 passages...
Donc vu ou sont places mes printf, je devrais avoir en tout 5 fois les fameuses infos que j'ai placees dans la fonction..
Hors j'ai ca :
Code :
|
[edit] Mon segfault n'est pas encore bien localise.. j'ai ajoute un autre debug a la sortie de la fonction... et celui-ci s'affiche !
D'ailleurs, la fonction renvoie 0, ce qui est bien (lecture reussie a priori)
Et mon segfault est donc plus loin : c'est probablement du au vidage du buffer de sortie qui ne se fait pas bien, et qui m'a trompe sur la source de l'erreur
Marsh Posté le 16-10-2006 à 20:57:58
je pense qu'il faut être particulièrement attentif aux opérations sur les bits, le comportement n'est pas garanti il me semble d'une architecture à une autre, comme par exemple :
*len = v->data_len & 0x0000FFFF; |
Marsh Posté le 16-10-2006 à 21:06:58
bkhive segfault pour moi sur i386...
|
peut-être un problème avec les fichiers sam et system que tu propose ? peux-tu les mettre dans une archive ou donner un checksum pour vérifier que le transfert est ok ?
Marsh Posté le 16-10-2006 à 21:16:38
Citation : bkhive segfault pour moi sur i386... |
Plantage au meme endroit pour moi... apres avoir enfin vide mon stdout ;-)
Marsh Posté le 16-10-2006 à 21:44:48
Ok j'ai ca en sortie de bkhive apres des modifs vraiment TRES etranges :
Code :
|
Cay bon ou pas??
[edit] ca a l'air d'etre pas mal : la sortie du samdump apres bkhive :
Code :
|
Marsh Posté le 16-10-2006 à 22:49:01
Voila mon fichier bkhive.cpp, j'ai modifie juste untruc : bizarrement l'acces aux deux premieres cases du tableau kn fait planter la lecture suivante de ce meme tableau !!!
Et uniquement les deux premieres cases si quelqu'un peut comprendre d'où cela vient !
Enfin, avec un hack à la con, chez moi ca fait marcher (apparemment) le programme bkhive... je n'ai pas d'erreur ) priori sur samdump
Code :
|
Marsh Posté le 16-10-2006 à 23:44:46
ory: ils sont okay les fichiers, je l'ai retesté chez moi
Merci pour le debug guepe, je teste ca sur la sparc !
Marsh Posté le 17-10-2006 à 00:00:12
Hum je pourrais pas toute de suite
Si vous êtes encore motivés il y'a le problème de samdump qui donne un résultat complètement pourri sur amd64
Marsh Posté le 17-10-2006 à 01:30:32
Je veut bien m'y essayer.. mais comment je peut faire ?? Je n'ai qu'un centrino x86 32 bits moi ??
Si y'a une methode quelconque, je suis preneur ... On peut "emuler" une plateforme en compilant d'une maniere particuliere un programme ?? c'est possible ca???
Marsh Posté le 17-10-2006 à 04:53:00
Citation : qemu? |
OK, ce sera pas pour moi ;-) Chacun son tour !!!
Au fait, sur sparc ca donne quoi ?
Marsh Posté le 17-10-2006 à 08:31:49
M300A a écrit : ory: ils sont okay les fichiers, je l'ai retesté chez moi |
je parlais pour le transfert vers quelqu'un d'autre que toi genre je télécharge ces fichiers binaires,comment je peux être sûr qu'ils sont bien passés, et donc que le segfault ne vient pas d'un fichier mal transféré ?
Marsh Posté le 17-10-2006 à 12:54:34
ReplyMarsh Posté le 17-10-2006 à 13:15:21
ReplyMarsh Posté le 17-10-2006 à 13:31:31
M300A a écrit : Hum je pourrais pas toute de suite |
Hello, j'ai un amd64, et ça a l'air de marcher sans modif du source :
/tmp> bkhive-1.0.1/bkhive system /tmp/syskey |
/tmp> samdump2-1.0.1/samdump2 sam /tmp/syskey |
edit : au temps pour moi j'ai lu en diagonale, et je croyais que c'était censé planter ...
Bref, ça ne marche pas, les hashes sont bien incorrects.
Marsh Posté le 17-10-2006 à 20:47:52
Citation : edit : au temps pour moi j'ai lu en diagonale, et je croyais que c'était censé planter ... |
Allez zou au debug ;-)
Comme la dit ory, faudrait regarder les resultats intermediaires au niveau des operation binaires...
Faut se creer une sorte de 'trace' des differentes operations binaires(enfin de leur resultat) et comparer avec un 32 bits... ca permettrait de localiser la ou les operations qui foire(nt) .. Qu'en penses-tu ??
Je n'ai absolument plus le temps de coder quelques logs biens places... a quelqu'un d'autre !
Marsh Posté le 18-10-2006 à 01:43:17
ory a écrit : je pense qu'il faut être particulièrement attentif aux opérations sur les bits, le comportement n'est pas garanti il me semble d'une architecture à une autre, comme par exemple :
|
J'ai un gros doute là... Les opérations binaires sont, il me semble, invariantes selon les plateformes. Ce qui varie, c'est l'ordre des octets.
Marsh Posté le 18-10-2006 à 08:25:40
guepe a écrit :
|
un débuggeur quoi
Marsh Posté le 18-10-2006 à 13:48:01
eL_Shaman___ a écrit : J'ai un gros doute là... Les opérations binaires sont, il me semble, invariantes selon les plateformes. Ce qui varie, c'est l'ordre des octets. |
le problème c'est qu'il semble pour chacun de nous 2
Il faudrait réussir à mettre la main sur ce que dit la norme
Marsh Posté le 18-10-2006 à 16:17:58
Si vous voulez je fais le teste, dit moi juste quoi ajouter et à quelle ligne
Marsh Posté le 18-10-2006 à 16:45:53
J'ai enfin pu tester sur la sparc (free )
C'est toujours pareil
gandalf@plutonium:~/bkhive/patched$ ./bkhive ../system /tmp/out |
Marsh Posté le 19-10-2006 à 18:30:07
au fait, pas pour powerpc ?
Je vais y consacrer du temps, vu que ces problèmes d'endianess m'intéressent
Seule condition, je voudrais avoir un moyen de vérifier l'intégralité des fichiers system et sam que tu propose à télécharger (un md5 ou un sha1 par exemple), histoire de pas brasser du vent à cause d'un download foireux
Marsh Posté le 19-10-2006 à 18:54:08
J'ai pas de powerpc
Cependant je pense que t'auras le même blem sur sparc.
2b7526c3c155d3f32d90a9cef65ac1e3 sam |
Merci pour ton aide
Marsh Posté le 19-10-2006 à 21:49:20
Citation : 'ai enfin pu tester sur la sparc (free ) |
M'etonne pas tellement... Mon "hack" est tellement foireux... Pourquoi donc est-ce que je ne peut pas acceder a ce fameux tableau (en tout cas les deux premieres cases) sans tout faire planter??
Je soupçonne que le probleme n'a rien a voir avec ce tableau ou son utilisation... Probablement une operation invalide ailleurs qui ressort d'une facon ou d'une autre, mais de maniere differentes selon l'architecture???
J'avoue que la j'ai plus le temps, j'avais juste une apres-midi...
Marsh Posté le 20-10-2006 à 03:42:17
ory a écrit : le problème c'est qu'il semble pour chacun de nous 2 |
Bon, en fait, j'en suis sûr
http://fr.wikipedia.org/wiki/Endianness
Marsh Posté le 24-10-2006 à 15:10:06
bon, j'ai enfin un shell sur un amd64, j'essaye de trouver
Marsh Posté le 25-10-2006 à 20:49:30
bon, sur x86 j'ai trouvé la raison du sigsegv
// Quick hack for unicode -> ascii translation |
en gros il y a corruption de données en mémoire, son hack fait que kn se retrouve écrasé au début (les premiers éléments)
Là j'essaye de trouver une solution pas trop cracra
Marsh Posté le 26-10-2006 à 10:23:05
bon, déjà ca marche pour x86, je poste le patch ce soir après quelques validations
Marsh Posté le 26-10-2006 à 14:41:55
C'est bizarre votre blem sur x86, moi j'en ai aucun )
Le problème que j'ai c'est que bkhive n'arrive pas a ouvrir le fichier system sur la sparc et samdump trouve des hash miteux sur amd64. J'ai pas pu tester sur d'autre archis mais on aura sans doute des problèmes simlaires
Marsh Posté le 26-10-2006 à 18:08:36
M300A a écrit : C'est bizarre votre blem sur x86, moi j'en ai aucun ) |
moi je peux faire les tests pour powerpc et amd64, par contre pour sparc tout court j'ai rien sous la main, mais sparc64 si, j'ai une ultra5
Marsh Posté le 26-10-2006 à 19:50:32
Debian est pas encore porté en sparc64 donc c'est du sparc normal 32bits
Et ma sparc est aussi uen Ultra5 donc tu peux testé sans problème dessus
Merci beaucoup en tout cas, mes paquet attendent au chaud
Marsh Posté le 16-10-2006 à 19:02:37
Je vais faire bref mais complet. Je bosse acutellement sur le packaging Debian/Ubuntu d'ophcrack qui est un cracker de mot de passe MS Windows basé sur des Rainbow Tables. C'est assez hallucinant niveau performances.
Cependant je me heurte à un problème: ophcrack utilise deux petits binaires pour dumper les mots de passe depuis l'arborescence de Windows. Et c'est bien là que j'ai un problème:
Comme vous pouvez le voir sur screenshot les hashes des mot de passe trouvé sur amd64 et sur sparc bkhive n'arrive même pas à ouvrir le fichier...
Je demande vous propose donc, à vous qui savez codé en C et s'affranchir des problème d'endianess et de taille des registres de m'aider à porter ses applis sur toutes les archs.
Il est important de noter que c'est de très petits binaires, il n'y a peu de code mais le C reste encore très mistérieux pour moi
Je vous mets à dispo des fichiers sorti de mon arbo Windows ce qui vous permettra de tester le résultat :
Vous pouvez facilement tester ses deux applis en faisant:
bkhive /path/to/system /tmp/syskey
samdump /path/to/sam /tmp/syskey
Les hashes devraient s'afficher et doivent correspondre aux hashes obtenue sur la machine i386 (cf screenshot).
Les sources sont disponibles ici:
En vous remerciant d'avance... Toute contribution, la plus minime soit-elle est évidemment la bienvenue!
Merci!
Message édité par M300A le 16-10-2006 à 19:52:40