[R] Dépiotage du fichier index.dat

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Avatar du membre
GhostLine
Niveau 7
Niveau 7
Messages : 342
Enregistré le : jeu. 12 mars 2009 15:28
Localisation : Paris
Status : Hors ligne

[R] Dépiotage du fichier index.dat

#1

Message par GhostLine »

Salut les gens !
Voici ma petite problématique : je dois récupérer sur des machines le fichiers index.dat (qui est présent, pour mémoire, dans le répertoire C:\Documents and Settings\{utilisateur}\Local Settings\Historique\) et le dépioter afin de sortir des stats sur les sites parcourus sur les machines en question (dans la version complète, il y a une expédition de mails contenant les résultats automatiquement planifiée une fois par semaine, mais pour ça, j'ai trouvé des exemples sur le forum, donc pas de souci).

Mon réel problème est plus lié au fichier lui-même : je suis pour ma part un fervent utilisateur des outils unix qui ont été porté sous Windows (Dieu bénisse les créateurs de GREP et de SED !), et je n'arrive par à tirer quoi que ce soit de propre de ce fichier, pour la bonne et simple raison qu'il est considéré comme un binaire ...

Donc si vous avez des idées, je suis carrément preneur, car je sèche grave là ! Merci d'avance :)

Edit pour précisions : ce fichier contient plein de caractères pas du tout normaux (d'où le fait qu'il soit considéré comme un binaire), qu'il faut autant que possible zigouiller ... et c'est là que je sèche :/ je cherche juste à récupérer les lignes qui contiennent la chaine "Visited:" .


Bon bon bon ...

J'ai quand même réussi à avancer un peu, mais au final, ma méthode n'est elle pas la mauvaise ? le fichier index.dat ne semble disponible qu'en mode déconnecté de l'utilisateur, donc je suis de la ...

Une idée pour obtenir ces infos ?


Décidément, j'en raconte des âneries :) si vous testez ça chez vous, après avoir préalablement créé le fichier test2.txt sur c:\ , vous allez comprendre pourquoi des gens se sont inquiété que ce fichier puisse être un spyware !

Du coup, je veux quand même bien un coup de main pour la mise en forme (zigouillages des caractères jusqu'au @) et la création automatique du fichier texte.

Merci d'avance !
► Afficher le texte
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Depiotage du fichier index.dat

#2

Message par ani »

Salut, je ne dispose pas de ce fichier sur le compte et je ne vois pas trop à quoii sa ressemble.
j'ai juste testé avec l'index des cookies :o

Code : Tout sélectionner

$file = FileOpen(@UserProfileDir&"\Local Settings\Historique\History.IE5\index.dat", 0)
If $file = -1 Then
    MsgBox(0, "Erreur", "Impossible d'ouvrir le fichier.")
    Exit
EndIf

While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    If StringInStr($line,"Visited:") Then
        FileWriteLine("c:\test2.txt",$line)
    Endif
Wend
FileClose($file)
le $i = 0 ou $i=$i+1 ne serve pas, car dans la boucle, nous avons le error, ce qui signifie dans le cas ou on arrive en fin de fichier on sort de la boucle.
Avatar du membre
GhostLine
Niveau 7
Niveau 7
Messages : 342
Enregistré le : jeu. 12 mars 2009 15:28
Localisation : Paris
Status : Hors ligne

Re: [..] Depiotage du fichier index.dat

#3

Message par GhostLine »

Quand j'ai testé, le fichier test2.txt ne s'est pas créé ; et j'ai créé $i pour passer à la ligne suivante dans ce fichier (disons que je suis méfiant :)).

Je mettrai un tronçon de ce fichier demain ici.

Edit : ah oué, marrant ... ça fonctionne au boulot, où il y a des CR entre chaque ligne, mais pas sur mon PC perso (le fichier ne contient, de facto, pas de retour à la ligne). Ici, les lignes commencent par le nom d'utilisateur ...

Il suffit de passer par une commande MS DOS pour accéder à ce fichier (qui est complètement invisible via l'explorateur).
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Depiotage du fichier index.dat

#4

Message par ani »

Si le fichier ne se crée pas, c'était juste du au stringinstr avec le paramètre 1, (case sensitive)

La plupart des fichiers de ce type sont tous en cache, mais franchement je ne dispose pas de ce fichier dans le dossier history.IE5 en tout cas pas dans la session que j'utilise.
Pour afficher ces dossier ou fichier il suffit juste de cocher la case dans l'option du dossier.
Si je ne dispose pas de ce fichier il se peut que çà soit juste un parametre décoché ou au niveau du regedit ?

l'index analyse bon petit projet :)
Avatar du membre
GhostLine
Niveau 7
Niveau 7
Messages : 342
Enregistré le : jeu. 12 mars 2009 15:28
Localisation : Paris
Status : Hors ligne

Re: [..] Depiotage du fichier index.dat

#5

Message par GhostLine »

En fait, je viens de me rendre compte qu'à cause des caractères spéciaux, je ne peux même pas copier/coller un tronçon du fichier ici :/ faudrait que je le mette en ligne quelque part ...
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Depiotage du fichier index.dat

#6

Message par ani »

tu peux l'ajouter en fichier joint ;)
Avatar du membre
GhostLine
Niveau 7
Niveau 7
Messages : 342
Enregistré le : jeu. 12 mars 2009 15:28
Localisation : Paris
Status : Hors ligne

Re: [..] Depiotage du fichier index.dat

#7

Message par GhostLine »

Suis je bête :) je n'ai pas l'habitude de voir ce genre de fonctionnalité sur des forums phpbb, je me suis fait feinter :)
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Depiotage du fichier index.dat

#8

Message par ani »

hm j'avais pas lu en entier le topic :(

Code : Tout sélectionner

$file = FileOpen(@UserProfileDir&"\Local Settings\Historique\History.IE5\index.dat", 0)
If $file = -1 Then
MsgBox(0, "Erreur", "Impossible d'ouvrir le fichier.")
Exit
EndIf
While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    If StringInStr($line,"visited:") Then
        $line = StringSplit($line,"@")
        FileWriteLine("c:\test2.txt",$line[2]) 
     endif
Wend

FileClose($file)
On découpe la chaine en deux,$line = StringSplit($line,"@")
On récupere ce qui se trouve a droite du caractère @ (la deuxieme partie) FileWriteLine("c:\test2.txt",$line[2])

Je vais tester avec ton fichier, et le retirer de ton post ;)
Ou bien au lieu de splitter la chaine en deux, on pourrait utiliser une expression régulière (hélas, je me souvient plus trop de comment ...)

Code : Tout sélectionner

While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    If StringInStr($line,"visited:") Then
       FileWriteLine("c:\test2.txt",StringRegExReplace($line,".*@","")) 
     endif
Wend
y a surement mieux dans le regex, faut que je relise la documentation en long en large... :(
Avatar du membre
GhostLine
Niveau 7
Niveau 7
Messages : 342
Enregistré le : jeu. 12 mars 2009 15:28
Localisation : Paris
Status : Hors ligne

Re: [..] Depiotage du fichier index.dat

#9

Message par GhostLine »

Là, ce me dépasse :) mais merci de ton aide efficace en tout cas !
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Depiotage du fichier index.dat

#10

Message par ani »

Si quelqu'un a une tite idée sur l'expression régulière a utiliser pour capturer le premier arobase
Pourquoi ? car dans une des cmd utilisé par microsoft pour le fichier.chm il utilise @
mk:@MSITStore:

les liens de ce fichier index.dat (Pour History) sont de la forme suivant visited:{username}@{cmd}

Code : Tout sélectionner

$file = FileOpen(@UserProfileDir&"\Local Settings\Historique\History.IE5\index.dat", 0)
If $file = -1 Then
MsgBox(0, "Erreur", "Impossible d'ouvrir le fichier.")
Exit
EndIf
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
$RegEx = StringRegExpReplace($line,".*\@","")
If @extended = 1 Then FileWriteLine("c:\test2.txt",$RegEx)
FileClose($file)
çà sera plus simple de matché sur l'arobase, pourquoi ?Ca fonctionnera sur tout fichier index.dat (me semble) :P

merci et bonne continuation ;)
Avatar du membre
GhostLine
Niveau 7
Niveau 7
Messages : 342
Enregistré le : jeu. 12 mars 2009 15:28
Localisation : Paris
Status : Hors ligne

Re: [..] Depiotage du fichier index.dat

#11

Message par GhostLine »

Bon, pas de nouveautés au niveau du code, mais de bonnes clefs de compréhension sur la façon dont fonctionne l'historique de IE ; ça m'a pris une bonne heure de taf, enjoy :)

Voici ce que j'obtiens ce jour (c'est important) en faisant, dans une fenêtre MS DOS, la commande
dir index.dat /s
(en étant dans le repertoire C:\DOCUMENT AND SETTINGS\nom_utilisateur\LOCAL SETTINGS\)
► Afficher le texte
Ces répertoires et fichiers sont invisibles (mais pas cachés, un dir /ah ne les révèle pas), mais on peut y accéder via la fenêtre DOS.

La façon dont cela fonctionne est finalement très simple : chaque répertoire contient une tranche de temps donnée (une semaine à chaque fois), comme on peut le visualiser dans l'historique d'IE.
Chaque répertoire porte le nom de sa tranche de temps, et contient un fichier .DAT contenant l'historique de navigation. Le fichier DAT en \HISTOR~1\History.IE5 doit probablement contenir la compilation des autres fichiers en un seul bloc.

Voici pour les explications. Donc l'idée serait d'accéder à ces répertoires via un batch (vu qu'il est impossible d'utiliser le navigateur pour accéder à ces emplacements, je viens de vérifier), en prenant bien garde de conserver les noms des répertoires, qui permettent de facto de conserver une chronologie, et de les recopier dans un endroit plus accessible.

Je vais zieuter de mon coté, mais j'ai peur que mes connaissances soient définitivement trop short :)

edit : ce topic en référence pour le positionnement des fichiers DAT.
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Depiotage du fichier index.dat

#12

Message par ani »

ok :)
Sinon avec le regular expressions j'y suis pas arrivé avec les maigres connaissancent dont je dispose, surtout avec des liens du genre Visited:username@mk:@MSITStore:C:\
il découpé au deuxieme arobase :(

Sinon Voici un code fonctionnel ;)

Code : Tout sélectionner

$file = FileOpen(@UserProfileDir&"\Local Settings\Historique\History.IE5\index.dat",0)
If $file = -1 Then
    MsgBox(0, "Erreur", "Impossible d'ouvrir le fichier.")
    Exit
EndIf
While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    If (stringinstr($line,":") And stringinstr($line,"@")) <> 0 Then    
        $split = stringsplit($line,"@")
        FileWriteLine("c:\test2.txt",StringReplace($line,$split[1]&"@",""))
    EndIf
Wend
FileClose($file)
RunWait("write c:\test2.txt")

Code : Tout sélectionner

If (stringinstr($line,":") And stringinstr($line,"@")) <> 0 Then
Si la chaine contiend : ou @ est que c'est different de 0 alors

Code : Tout sélectionner

$split = stringsplit($line,"@")
On découpe la chaine qui contiend @

on obtiend un tableau split[0] = 2 element
split[1] = Visited:{username}
split[2] = L'url

Code : Tout sélectionner

FileWriteLine("c:\test2.txt",StringReplace($line,$split[1]&"@",""))
On écrit dans le fichier test2.tx les données trouvée et on remplace la chaine par le premier élèment (Visited:username) avec l'arobase

est on obtiend tout :) même les mk:@MSITStore:C:\

La chaine = ligne

la je suis sur une petite idée de projet l'index analyser :)
+> relève tout les index.dat et pour chaque index y a une analyse spécifique ;)
je posterai dès qu'il est OK :)

merci pour ton post :)
Avatar du membre
GhostLine
Niveau 7
Niveau 7
Messages : 342
Enregistré le : jeu. 12 mars 2009 15:28
Localisation : Paris
Status : Hors ligne

Re: [..] Depiotage du fichier index.dat

#13

Message par GhostLine »

Avec plaisir ! (comme on dit par ici :))

Edit : du coup, tu as réussi à trouver ces fichiers sur ta bécane ?
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Depiotage du fichier index.dat

#14

Message par ani »

du coup, tu as réussi à trouver ces fichiers sur ta bécane ?
oui et non, j'ai bien pour cookies/ie/userdata mais pas pour l'historique :(
je teste sur une autre machine qui dispose de tout les fichiers même les MSHist ;)
J'ai remarqu" qu'avec le code proposé plus haut, y avait une ligne avec des caractère bizarre...
et toi ?

Pour la cmd sous ms-dos j'aurai plutôt indiqué le switch /B avec le /S
=> dir /B /S index.dat > index.txt

on obtiend les liens, on pourrait lire le fichier de sortie ligne par ligne(celui-ci n'est pas obligatoire, y a d'autre possibilité du genre (sans el fichier de sortie) si un fichier index.dat et trouvé on l'analyse)

je vais lire la documentation sur l' index.dat, me semble qu'on peut obtenir la date/le nmbre de fois que l'url fut visité ect non ?
Avatar du membre
GhostLine
Niveau 7
Niveau 7
Messages : 342
Enregistré le : jeu. 12 mars 2009 15:28
Localisation : Paris
Status : Hors ligne

Re: [..] Depiotage du fichier index.dat

#15

Message par GhostLine »

Je n'ai fait que déduire les informations que j'ai donné :) je ne sais pas si il existe un fichier de définition de la structure de ces fichiers.
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Depiotage du fichier index.dat

#16

Message par ani »

Dommage que les fonctions ne sont pas toutes crée sous autoit ...
http://msdn.microsoft.com/en-us/library/aa384026(VS.85).aspx

j'aurai encore apprit quelquechose :P
vais essayer traduire c'est fonctions si pas je demanderai sur le fofo anglais (plus simple ^^" ) :P
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11818
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Depiotage du fichier index.dat

#17

Message par Tlem »

A première vue, cela fait partie de la dll Windows Wininet.dll.
Donc l'appel à la dll sur les fonctions en question devrait apporter la solution au problème.

De tête il y à des exemples sur le forum Anglais sur l'appel à Wininet.dll. :wink:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Depiotage du fichier index.dat

#18

Message par ani »

Pas eu besoin de poser la question :), mais j'avais pas fait de recherche sur le forum :( voilàvoilà :P
UDF WININET
POST

çà servira pour la suite ;)

bein la dessus je part dormir :o
Avatar du membre
GhostLine
Niveau 7
Niveau 7
Messages : 342
Enregistré le : jeu. 12 mars 2009 15:28
Localisation : Paris
Status : Hors ligne

Re: [..] Depiotage du fichier index.dat

#19

Message par GhostLine »

Baaaah ... bonne nuit alors :D et merci !

Edit : Je viens d'aller voir le topic, c'est ENORME !! :shock:
Modifié en dernier par GhostLine le mer. 18 mars 2009 10:07, modifié 1 fois.
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Depiotage du fichier index.dat

#20

Message par ani »

de rien ;)
avant de partir rejoindre morphé, j'essaie de réaliser un exemple qui permettra de lister le contenu de l'index.dat, mais c'est pas gagné j'ai les oeil qui pique ^^'

sinon avec le dernier code dont j'ai posté aurais tu des caractère indessirable ?
j'ai testé sur une machine et j'ai une ligne avec 5 caractère (dommagee que je trouve pas cette foutu expression regulière :( )
Répondre