suivi des modifications du registre bis

Programmation d'applications complexes
hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

suivi des modifications du registre bis

Message par hardy »

Bon, j'ai fait un nouveau code, qui permet d'afficher les détails concernant les clés modifiées/créées/effacées.
Mais si ça n'intéresse personne, je boude... :cry:
Il y a pourtant plein de choses intéressantes à tirer de ce code, et je peux répondre à d'éventuelles questions.
Je mettrai le code si quelqu'un montre un semblant d'intérêt. :(
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

moi !! je suis fan !! ça compte ?

faut dire que je comprend les possibilité que l'on peut tirer d'un code comme ça !! :lol: :lol:


meme si "the cleaner" installé sur mon ordi propose une fonction identique
avec : "TC monitor" :

qui temps qu'il est lancé , surveille en permanence une tentative d'ecriture dans le registre ! et lance une alerte avec possibilité de refuser l'ecriture
utile contre les chevaux de troie qui tentent d'ecrire
dans le "Run" ou "Run-once" :D

mais le fait de disposer du code ouvre la possibilité de le faire soit meme !
:D envoie !
hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

Message par hardy »

Ah, tout de même. Vive Dobro !!
Pour la surveillance en temps réel du registre, je sais faire aussi : il suffit d'utiliser les fonctions de traçage de windows.
J'avais fait un code, mais il faudrait que je reprenne ça.

nouveau code pour les clichés:

Note : dis moi si la prise de cliché et la comparaison est plus rapide / lente qu'avec ton utilitaire.

Code : Tout sélectionner

Global path.s,nbimage,comparaison.b
path=Space(255) 
GetModuleFileName_(0,@path,255)

While Right(path,1)<>"\"
path=Left(path,Len(path)-1)
Wend

CreateDirectory(path+"clichés")

;path="c:\surveillance\"

; A MODIFIER--------------- ainsi que le la fin (label Berlioz)

LoadImage(0,path+"berlioz.ico")

;----------------déclarations ---------------------
Structure m
  adresse1.l
  adresse2.l
  type.b
EndStructure
Dim modif.m(3000)

Declare cliche()
Declare suppression()
Declare sauver()
Declare refresh()

  
;--------------- Lecture config---------------------
Dim image.s(200)
Dim temps.s(200)
nbimage=0
If ReadFile(0,path+"breg.cfg")
  Repeat
    nbimage+1
    image(nbimage)=ReadString()
    temps(nbimage)=ReadString()
  Until Eof(0) Or nbimage=199
  CloseFile(0)
EndIf


;--------------Main------------------------
start=1 : run=1 

h=OpenProcess_($1F0FFF,0,GetCurrentProcessId_())
SetPriorityClass_(h,#HIGH_PRIORITY_CLASS)
CloseHandle_(h)

titre.s="Suivi du registre"
win.l=OpenWindow(0,0,0,530,380,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_SizeGadget|#PB_Window_Invisible,titre)

couleur=GetSysColor_(#COLOR_3DFACE)

CreateGadgetList(win)
CreateImage(2,167,60)
StartDrawing(ImageOutput())
Box(0,0,167,60,couleur)
Locate(0,0)
FrontColor($D6,$B5,$29)
DrawingMode(1)
LoadFont(0,"Times New Roman",12,#PB_Font_Italic|#PB_Font_HighQuality)
DrawingFont(FontID())
DrawText("Suivi registre v 1.0")
Locate(0,18)
DrawText("Pascal Tonnelier")
Locate(0,36)
DrawText("12/2004")
CloseFont(0)
StopDrawing()
ImageGadget(99,355,290,167,60,UseImage(2))
Image= CatchImage(1, ?Berlioz)
StartDrawing(ImageOutput())
DrawingMode(4)
FrontColor($D6,$B5,$29)
Box(0,0,167,251)
Box(1,1,165,249)
Box(2,2,163,247)
StopDrawing()
ImageGadget(100, 355,30,167,250,Image)

ListIconGadget(1,0,10,343,330,"Clichés registre",400,#PB_ListIcon_FullRowSelect|#PB_ListIcon_CheckBoxes|#PB_ListIcon_AlwaysShowSelection)
ButtonGadget(2,10,350,100,20,"Prendre un cliché")
ButtonGadget(3,120,350,120,20,"Comparer deux clichés")
ButtonGadget(4,260,350,60,20,"Effacer")

refresh()

run=1
SetWindowText_(win,@titre)
HideWindow(0,1)
AddSysTrayIcon(0,win,UseImage(0))
SysTrayIconToolTip(0,titre)
HideWindow(0,0)
debut:
Repeat
event=WaitWindowEvent()

If IsIconic_(win)<>0 And hide=0
HideWindow(0,1):hide=1
EndIf
Select event
    
  Case #PB_Event_SysTray
  HideWindow(0,0):hide=0
  SetForegroundWindow_(win)
Case #PB_Event_CloseWindow
  Select EventWindowID()
    Case 0
    run=0
    Case 10
    CloseWindow(10)
    FreeMemory(*memoire1)
    FreeMemory(*memoire2)
    DisableGadget(3,0)
    
  Default
    CloseWindow(EventWindowID())
  EndSelect
    
  Case #PB_Event_Gadget
    Select EventGadgetID()
      Case 2
        cliche()
      Case 4
        suppression()
        
      Case 12
        For i=1 To nmodif
          If GetGadgetItemState(11,i-1)=#PB_ListIcon_Checked Or GetGadgetItemState(11,i-1)=#PB_ListIcon_Checked|#PB_ListIcon_Selected
            If OpenWindow(20+i,0,0,500,300,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"Détails des valeurs",WindowID(10))
              CreateGadgetList(WindowID(20+i))
              ListIconGadget(30+i,5,5,480,280,"",1500)
              Select modif(i)\type
                Case 1
                  *mem=modif(i)\adresse1
                  a.s=PeekS(*mem)
                  AddGadgetItem(30+i,-1,"anciennes valeurs de "+a)
                  AddGadgetItem(30+i,-1," ")
                  *mem+Len(PeekS(*mem))+1
                  a=PeekS(*mem)
                  While Left(a,1)<>"["
                    AddGadgetItem(30+i,-1,ReplaceString(a,"@=","(par défaut)="))
                    *mem+Len(a)+1
                    a=PeekS(*mem)
                  Wend
                  
                Case 2
                  *mem2=modif(i)\adresse2
                  a.s=PeekS(*mem2)
                  AddGadgetItem(30+i,-1,"nouvelles valeurs de "+a)
                  AddGadgetItem(30+i,-1," ")
                  *mem2+Len(PeekS(*mem2))+1
                  a=PeekS(*mem2)
                  While Left(a,1)<>"["
                    AddGadgetItem(30+i,-1,ReplaceString(a,"@=","(par défaut)="))
                    *mem2+Len(a)+1
                    a=PeekS(*mem2)
                  Wend
                Case 3
                  *mem=modif(i)\adresse1
                  a.s=PeekS(*mem)
                  AddGadgetItem(30+i,-1,"anciennes valeurs de "+a)
                  AddGadgetItem(30+i,-1," ")
                  *mem+Len(PeekS(*mem))+1
                  a=PeekS(*mem)
                  While Left(a,1)<>"["
                    AddGadgetItem(30+i,-1,ReplaceString(a,"@=","(par défaut)="))
                    *mem+Len(a)+1
                    a=PeekS(*mem)
                  Wend
                  *mem2=modif(i)\adresse2
                  a.s=PeekS(*mem2)
                  AddGadgetItem(30+i,-1," ")
                  AddGadgetItem(30+i,-1,"nouvelles valeurs de "+a)
                  AddGadgetItem(30+i,-1," ")
                  *mem2+Len(PeekS(*mem2))+1
                  a=PeekS(*mem2)
                  While Left(a,1)<>"["
                    AddGadgetItem(30+i,-1,ReplaceString(a,"@=","(par défaut)="))
                    *mem2+Len(a)+1
                    a=PeekS(*mem2)
                  Wend
                  
              EndSelect
             EndIf 
          EndIf
        Next i
         
      Case 3
        
        n=0
        For i=1 To nbimage
          If GetGadgetItemState(1,i-1)=#PB_ListIcon_Checked Or GetGadgetItemState(1,i-1)=#PB_ListIcon_Checked|#PB_ListIcon_Selected
            n+1
            If n=1 : aa=i :Else: bb=i:EndIf
          EndIf
        Next i
        If n<>2
          MessageRequester("Comparaison de clichés","Sélectionner exactement deux clichés")
          Goto debut
        EndIf
        DisableGadget(3,1)
        
        nmodif=0
         
        If OpenWindow(10,0,0,600,415,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"Résultats de la comparaison")
          CreateGadgetList(WindowID(10))
          ListIconGadget(11,5,5,580,380,"Modifications entre le cliché "+Chr(34)+image(aa)+Chr(34)+" et le cliché "+Chr(34)+image(bb)+Chr(34),1500,#PB_ListIcon_CheckBoxes)
          ButtonGadget(12,250,390,60,20,"détails")
          If OpenFile(0,path+"clichés\"+image(aa)+".breg") And OpenFile(1,path+"clichés\"+image(bb)+".breg")
            UseFile(0)
            l=Lof()
            *mem=AllocateMemory(l)
            *memoire1=*mem
            If *mem=0
              CloseFile(0)
              CloseFile(1)
              Goto debut
            EndIf
            
            ReadData(*mem,l)
            CloseFile(0)
            memo=*mem+l
            UseFile(1)
            l2=Lof()
            *mem2=AllocateMemory(l2)
            *memoire2=*mem2
            If *mem2=0
              CloseFile(0)
              CloseFile(1)
              FreeMemory(*mem)
              Goto debut
            EndIf
            ReadData(*mem2,l2)
            CloseFile(1)
            memo2=*mem2+l2
            add1.b=0:addd2.b=0
            While PeekS(*mem)<>"[berliozo]" And PeekS(*mem2)<>"[berliozo]"
              count+1
              Select CompareMemoryString(*mem,*mem2,1)
                Case -1
                  a.s=PeekS(*mem)
                  AddGadgetItem(11,-1,"clé effacée = "+a)
                  nmodif+1
                  modif(nmodif)\adresse1=*mem
                  modif(nmodif)\type=1
                  Repeat
                    *mem+Len(a)+1
                    a.s=PeekS(*mem)
                  Until Left(a,1)="["
                Case 1
                  a.s=PeekS(*mem2)
                  AddGadgetItem(11,-1,"clé créée = "+a)
                  nmodif+1
                  modif(nmodif)\adresse2=*mem2
                  modif(nmodif)\type=2
                  Repeat
                    *mem2+Len(a)+1
                    a.s=PeekS(*mem2)
                  Until Left(a,1)="["
                Case 0
                  debut1=*mem
                  debut2=*mem2
                  a.s=PeekS(*mem)
                  Repeat
                    *mem+Len(a)+1
                    a.s=PeekS(*mem)
                  Until Left(a,1)="["
                  a.s=PeekS(*mem2)
                  Repeat
                    *mem2+Len(a)+1
                    a.s=PeekS(*mem2)
                  Until Left(a,1)="["
                  l1=*mem-debut1:l2=*mem2-debut2
                  If l1<>l2
                    AddGadgetItem(11,-1,"clé modifiéé = "+PeekS(debut1))
                    nmodif+1
                    modif(nmodif)\adresse1=debut1
                    modif(nmodif)\adresse2=debut2
                    modif(nmodif)\type=3
                    
                  Else
                    If CompareMemory(debut1,debut2,l1)=0
                      AddGadgetItem(11,-1,"clé modifiée = "+PeekS(debut1))
                      nmodif+1
                      modif(nmodif)\adresse1=debut1
                      modif(nmodif)\adresse2=debut2
                      modif(nmodif)\type=3
                    EndIf
                  EndIf
                  
              EndSelect
            Wend
            run2=1
          EndIf
          EndIf
  EndSelect
  
EndSelect
Until run=0
End

Procedure cliche()
debutcliche:
nom.s=InputRequester("Cliché de registre","Choisissez un nom (uniquement des lettres et des chiffres)","")
  If nom=""
    MessageRequester("Cliché registre","Nom vide = cliché annulé")
    ProcedureReturn
  EndIf
  For i=1 To nbimage
    If nom=image(i)
      MessageRequester("cliché de registre","Nom déjà utilisé")
      Goto debutcliche
    EndIf
  Next i
  
  time.s=Space(255)
  date.s=Space(255)
  gettimeformat_(0,8,0,0,@time,255)
  getdateformat_(0,1,0,0,@date,255)
  date=date+"  "+time
  DeleteFile("c:\bregistre.reg")

  RunProgram("regedit.exe","/e c:\bregistre.reg","",1)
  If ReadFile(0,"c:\bregistre.reg")
    l=Lof()
    *mem=AllocateMemory(l)
    *memo=*mem
    If *mem
      ReadData(*mem,l)
      CloseFile(0)
      DeleteFile("c:\bregistre.reg")
    Else
      CloseFile(0)
      ProcedureReturn
    EndIf
    
    *mem2=AllocateMemory(l)
    *memo2=*mem2
    If *mem And *mem2
      While *mem<*memo+l
        a.b=PeekB(*mem)
        
        If a>0
          ;        count+1
          If a<>13 And a<>10
            count+1  
            PokeB(*mem2,a)
            *mem2+1
            *mem+1
          Else
            PokeB(*mem2,0)
            *mem2+1
            count+1
            Repeat
              *mem+1
            Until  (PeekB(*mem)<>13 And PeekB(*mem)<>10 And PeekB(*mem)>0) Or *mem=*memo+l-1
          EndIf
        Else
          *mem+1
        EndIf
        
      Wend
      
      PokeS(*mem2,"[berliozo]")
      If OpenFile(1,path+"clichés/"+nom+".breg")
        *mem2-count
        UseFile(1)
        WriteData(*mem2,count+11)
        CloseFile(1)
        sauver()
        MessageRequester("Cliché de registre","Cliché effectué")
        nbimage+1
        image(nbimage)=nom
        temps(nbimage)=date
      EndIf
  EndIf
  EndIf 
  FreeMemory(*memo)
  FreeMemory(*memo2)
  sauver()
  refresh()
EndProcedure

Procedure suppression()
  nbimage2=0
  Dim image2.s(200)
  For i=1 To nbimage
    If GetGadgetItemState(1,i-1)=#PB_ListIcon_Checked Or GetGadgetItemState(1,i-1)=#PB_ListIcon_Checked|#PB_ListIcon_Selected
      DeleteFile(path+"clichés/"+image(i)+".breg")
    Else
      nbimage2+1
      image2(nbimage2)=image(i)
    EndIf
  Next i
  nbimage=nbimage2
  For i=1 To nbimage
    image(i)=image2(i)
  Next i
  refresh()
  sauver()
EndProcedure

Procedure sauver()
  DeleteFile(path+"breg.cfg")
  If OpenFile(0,path+"breg.cfg")
    For i=1 To nbimage
;      Debug image(i)
;      Debug temps(i)
      WriteStringN(image(i))
      WriteStringN(temps(i))
    Next i
    CloseFile(0)
  EndIf
EndProcedure

Procedure refresh()
  ClearGadgetItemList(1)
  For i=1 To nbimage
    AddGadgetItem(1,-1,image(i)+" : le "+temps(i))
  Next i
EndProcedure


Berlioz:IncludeBinary "d:\imageberliozo.bmp"
Comme j'ai modifié des trucs, c'est pas très beau. Faudra mettre un peu d'ordre.
Comment ça marche chez toi? (Moi bien. XP Pro SP2, Centrino 1,9GHz, 512Mo RAM)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Ah, tout de même
ben ta posté a 0:28
j'ai repondu a 0:40 soit 12 minutes d'attente , ça a pas du etre trop long !! :lol: :lol:


y me demande ça c'est indispensable au premier lancement ?
Berlioz:IncludeBinary "d:\imageberliozo.bmp"
REEDITION : arf ! j'avais pas lu le listing :D !!


Comment ça marche chez toi? (Moi bien. XP Pro SP2, Centrino 1,9GHz, 512Mo RAM)
on a a peut pres la meme config

xp pro (sans pack) Pentium 4 FSB800, 2.8Ghz ,512 Mo Ram :D

REEDITION : oui ça marche bien !!
merci ! :D

Note : dis moi si la prise de cliché et la comparaison est plus rapide / lente qu'avec ton utilitaire.
the cleaner ne marche pas pareil puisque qu'il est present en permanence , je pense qu'il prend un cliché la premiere fois qu'il est lancé, puis vu qu'il se lance au demarage , il est present en Ram comme un anti virus , il test simplement si quelque chose ecrit dans le registre
si c'est le cas , il balance une alerte avec la possibilité de refuser l'ecriture
(la je sais pas comment il fait !) , et meme la possibilité de lancer
REGEDIT pour allez soit meme remodifier une clef qui aurai ete changé !

THE CLEANER est un shearware pour nettoyer le disque dur des Chevaux de Troie ,qui se compose de 3 utilitaires avec lui-meme (le main program)

TC active qui en ram propose d'afficher les process actif !
(tous !! meme des process qui sont pas affiché par le gestionaire des taches de windows)

TC monitor (dont je parle plus haut !)

bravo pour ton code je vais etudier la chose dans mon coin pour les longue soirée d'hiver :D
ce serai bien de mettre a dispo ton images incluse !! :D
hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

Message par hardy »

Oui, faudrait que je remette en marche un site.
J'avais laissé tomber le premier par manque de temps.
Concernant les processus : j'ai fait un utilitaire permettant de surveiller (et donc d'interdire / autoriser, ...) les processus en temps réel.
Je compte justement rajouter le suivi de registre à cet utilitaire.
Je pense que d'ici une dizaine de jours (bientôt en vacances !) il sera disponible pour téléchargement.
Ca fera un utilitaire déjà pas mal.
Je le mettrai peut-être en freeware sur un truc du genre "télécharger.com"... avec une pub pour PureBasic !!! :D

Mais pour le nouveau site, je vais faire simple. Avec NVU, je pense. Ca évite de coder...

Concernant la comparaison des clichés : ce qui est crucial, et qui rend la comparaison rapide grâce à l'usage de comparememorystring, c'est que regedit sauve les clés dans l'ordre lexicographique (ordre du dictionnaire), en ne tenant pas compte de la casse.
Pour comparer des fichiers non classés de la sorte rapidement, il faut d'abord les classer.
Pour ce qui est de comparememorystring, y'a pas à dire : très pratique, et effectivement très rapide.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Hardy,

pourquoi demander si ça interesse alors que le code n'est pas posté ?
Tu postes et on répond après :D (Dobro est trop bon (heu, suis pas sur :mrgreen: ) ça le perdra )

Je suis interessé :D
hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

Message par hardy »

pourquoi demander si ça interesse alors que le code n'est pas posté ?
Tu postes et on répond après
Parce que j'avais déjà posté un code, et que personne n'avait répondu :!:

Chez toi, ça donne quoi?
:D
Répondre