begin process at 2010 08 01 07:26:14
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Applications Windows

 > BASE DE REGISTRE ET TRANSFERE DE BMP DANS SYSTEM32

BASE DE REGISTRE ET TRANSFERE DE BMP DANS SYSTEM32


 Description

Cliquez pour voir la capture en taille normale
Programme simple pour particulier ou professionnel, on prend un logo que l' on place dans System32, puis on touche au registre pour y mettre l' adresse du BMP mais aussi les coordonnées de l' entreprise ou de la personne qui gère le SAV du PC.

Source

  • Tous est dans le zip,
  • p0m1.bmp = Image 90X90 pixel
  • p0m1.ico = icone du programme
  • SAV_p0m1.asm = Source
  • data.inc = source
  • rsrc.rc = pour que l' icone soit prise en compte
  • Make asm.bat = Build to MASM32
  • SAV_p0m1.wap = pour l' editeur WinAsm
  • SAV_p0m1.exe = éxécutable
  • SAV_p0m1.jpg = résultat visuel (windows+pause)
  • SAV_p0m1.reg = ce que l'on touche a la base de registre
Tous est dans le zip,
p0m1.bmp = Image 90X90 pixel
p0m1.ico = icone du programme
SAV_p0m1.asm = Source
data.inc = source
rsrc.rc = pour que l' icone soit prise en compte

Make asm.bat = Build to MASM32
SAV_p0m1.wap = pour l' editeur  WinAsm

SAV_p0m1.exe = éxécutable
SAV_p0m1.jpg = résultat visuel (windows+pause)
SAV_p0m1.reg = ce que l'on touche a la base de registre


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources de la même categorie

Source avec Zip CONVERSION HEXA=>DÉCI ET DÉCI=>HEXA SUR 64 BITS par jejamar
Source avec Zip RÉSOUDRE LES PROBLÈMES DE VERSIONS DU SYSTÈME OU DE DLL par ToutEnMasm
Source avec Zip DEXPLORE INTERFACE HELP2 MICROSOFT DOCUMENT EXPLORER par ToutEnMasm
Source avec Zip DEXPLORE INTERFACE HELP2 MICROSOFT DOCUMENT EXPLORER par ToutEnMasm
Source avec Zip Source avec une capture ANALYSEUR DE TRAFIC (WINPCAP) par ORdream

 Sources en rapport avec celle ci

BIBLIOTHEQUE POUR LE 8086 par flory_
ECRIRE EN COULEUR AVEC TASM par cheoles

Commentaires et avis

Commentaire de BruNews le 25/01/2010 12:47:39 administrateur CS

Je parle exclusivement du "code", pas de l'utilité du prog.

Ce code est une nullité absolue.
L'ASM y est tout simplement absent, rien d'autre que des 'invoke'.
Une suite d'appels API sans aucune vérif du code de retour, ex on continue à vouloir écrire dans la BDR sans savoir si RegOpenKeyEx a réussi.
Des appels 'lstrcat', une fonction de DLL pour chainer un buffer, non sens absolu en ASM qui devrait être le domaine de l'optimisation absolue, tout l'opposé de ce qui nous est présenté ici.

Conclusion:
Ceci est une démo de ce qu'il ne faut jamais faire.
Débutants passez votre chemin.

Commentaire de vincent2795 le 25/01/2010 18:13:21

Génial d' un admin, mais bon, je prend not et donc sa devrais donner quoi ?

Commentaire de BruNews le 25/01/2010 22:15:14 administrateur CS

mov    eax, 264
lea    edx, [esp - 264] ; VOILA CheminSystem qui devient inutile
mov    esp, edx
push   eax
push   edx  ; ADDR CheminSystem
call   GetSystemDirectory
;  DEVUT CHAINAGE SANS AUCUN REPARCOURS (2 lstrcat !!!)
lea    edx, [esp + eax + 1]
; ben oui, on a direct l'adresse d'ecriture chainage
mov    ecx, offset szMybmp
mov    byte ptr[edx - 1], '\' ; 1er lstrcat vient de sauter, c'etait dur...
cpyBMP:
mov    al, byte ptr[ecx]
mov    byte ptr[edx], al
add    ecx, 1
add    edx, 1
test   al, al
jne    short cpyBMP
; 2eme appel strcat idem aux oubliettes
mov    eax, esp
push   0
push   eax
push   offset szMybmp
call   CopyFile

etc, etc.

add    esp, 264
push   0
call   ExitProcess

Commentaire de vincent2795 le 25/01/2010 22:29:15

j'étudie ta reponse, pour remodeler ma source.

Commentaire de BruNews le 25/01/2010 22:34:22 administrateur CS

Fais gaffe aux eventuelles fautes de frappe, j'ai meme pas relu.
et la textbox du forum c'est pas le top pour coder.

Commentaire de BruNews le 26/01/2010 18:26:35 administrateur CS

Réponse à ton MP ici, tout le monde peut participer.

Evite les labels du genre @@:
Mets de noms explicites, ça permet des sauts de nimporte où et ce sera beaucoup plus lisible.

ESP a été SUBé de 264
...
...
Nous en sommes au:
call   CopyFile

;INVOKE RegOpenKeyEx,HKEY_LOCAL_MACHINE,ADDR szRegKey,0,KEY_SET_VALUE,ADDR RegKeyHandle
On doit donc récupérer un handle à une adresse:
On va prendre l'adresse à [ESP]:
mov    eax, esp
xor    edx, edx ; juste pour éviter STALL (emploi illico)
push   eax  ; ADDR retour handle
push   KEY_SET_VALUE
push   edx  ; ZERO
push   offset szRegKey
push   HKEY_LOCAL_MACHINE
call   RegOpenKeyEx
mov    ecx, [esp] ; le HANDLE
test   eax, eax
jne    short progEND
; NOW on peut écrire, on va donc conserver le handle entre les appels API
push   esi

;INVOKE RegSetValueEx,RegKeyHandle,ADDR szRegKeyValueMO,0,REG_SZ,OFFSET szRegKeyValueMOV, SizeOf szRegKeyValueMOV
push   TailleEnDur  ; je n'aime pas les 'SizeOf' szRegKeyValueMOV
push   offset szRegKeyValueMOV
mov    esi, ecx  ; SAUVE handle pour usages ulterieurs
push   REG_SZ
push   0
push   offset szRegKeyValueMO
push   eax ; sera ESI les coups suivants
call   RegSetValueEx

; suite sur ce modèle devrait aller


push   esi
call   RegCloseKey
pop    esi
progEnd:
add esp, 264
push   0
call ExitProcess

Commentaire de vincent2795 le 26/01/2010 18:37:44

Merci pour cette aproche, je ne comprend pas : "TailleEnDur", sinon mon probleme n' etait pas sa... enfin je pensais :(.
je demandais comment je pouvais recuperer notre C:\windows\system32\p0m1.bmp,qui se trouve au debut:
mov    eax, 264
lea    edx, [esp - 264] ; VOILA CheminSystem qui devient inutile
mov    esp, edx
push   eax
push   edx  ; ADDR CheminSystem
call   GetSystemDirectory
lea    edx, [esp + eax + 1]
mov    byte ptr[edx - 1], '\' ; Ajout de l' antislash
mov    ecx, offset szMybmp

c' est la que je colle, la source que j' ai envoyer en mp marche et ne plante pas avec ollydbg.
Mais je n'es pas l' adressage a la bdr de :"Logo" "C:\windows\system32\p0m1.bmp"

Commentaire de BruNews le 26/01/2010 18:55:28 administrateur CS

ah ok, tu dois encore utiliser le chainage fait au début. Excuse mais je n'ai vraiment pas le temps de me pencher sérieusement sur ton affaire.
Puisque la chaine pat de ESP, on ne doit pas toucher à ce qui a été réservé, les 264 au dessus de ESP.
Alors change le sub  esp, 264
sub esp, 268  ; 4 de plus pour le handle
idem en bas: add esp, 268 en sortie

ensuite devient
lea  eax, [esp + 264]
après le RegOpenKeyEx, recup du handle:
mov  ecx, [esp+264]
le reste ne devrait pas chnager

Ta chaine se trouve en ESP, quand tu as besoin, après le push ESI sera en [esp = 4].
push  esi
j'ai besoin de l'adresse de chaine
lea  eax, [esp + 4]
et tu peux la PUSHer (eax) pour une API quand besoin.

Commentaire de BruNews le 26/01/2010 21:03:50 administrateur CS

PROG TESTE ET FONCTIONNANT

J'ai fait sur VC++, je n'utilise plus MASM depuis des lustres.
La syntaxe est idem, c'est pur ASM.
J'ai juste changé les chaines pour retrouver le bmp et les entrées dans la BDR afin de nettoyer.

#include <windows.h>

char szappname[] = "TrnsBmp";
char szMybmp[] = "aaa.bmp";
char szRegKey[] = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\OEMInformation";
char szRegKeyValueMOV[] = "Powered by BruNews";
char szRegKeyValueMO[] = "Model";


__declspec(naked) void __stdcall myWinMain()
{
  __asm {
    lea     eax, [esp - 272]
    mov     edx, 264
    mov     esp, eax      ; buffer[264] + handle en [esp+264] + ESI
    mov     [eax + 268], esi
    
    push    edx
    push    eax
    call    dword ptr GetSystemDirectory
    lea     edx, [esp + eax]        ; sur fin de sysDir
    mov     ecx, offset szMybmp
    mov     esi, esp                ; ESI = ADDR chaine
    mov     byte ptr[edx], 5Ch      ; '\'
cpyBMP:
    mov     al, byte ptr[ecx]
    add     edx, 1
    add     ecx, 1
    mov     [edx], al
    test    al, al
    jne     short cpyBMP
    
    push    0
    push    esi                 ; ADDR chaine newFileName
    push    offset szMybmp
    call    dword ptr CopyFile
    lea     edx, [esi + 264]    ; ADDR handle
    test    eax, eax
    je      progEND             ; inutile aller plus loin si pas copie
    
    push    edx
    push    KEY_SET_VALUE
    push    0
    push    offset szRegKey
    push    80000002h           ;  HKEY_LOCAL_MACHINE
    call    dword ptr RegOpenKeyEx
    mov     esi, [esp + 264]    ; ESI = handle BDR
    test    eax, eax
    jne     progEND
    
    push    19    ; TAILLE de szRegKeyValueMOV AVEC 0 final
    push    offset szRegKeyValueMOV
    push    REG_SZ
    push    0
    push    offset szRegKeyValueMO
    push    esi
    call    dword ptr RegSetValueEx
    test    eax, eax
    jne     closeBDR
    ; POUR LA SUITE ON CONSIDERERA OK ECRITURE VU QUE 1er REUSSI
    
    ; Comme tout est bon, tu continueras seul les 5 RegSetValueEx suivants
    
    
    ; ICI POUR TEST QUE EST ALLE JUSQU'AU BOUT
    mov     eax, esp
    push    0
    push    offset szappname
    push    eax
    push    0
    call    dword ptr MessageBox
    
closeBDR:
    push    esi
    call    dword ptr RegCloseKey
progEND:
    pop     esi
    add     esp, 268
    push    0
    call    dword ptr ExitProcess
    ret     0
  }
}

Commentaire de djamel28dz le 08/03/2010 10:05:44

Merci

Commentaire de patatalo le 06/04/2010 19:15:33 administrateur CS

salut,

Je ne suis pas sur que le "jne short" serve a quelquechose étant donné qu'il transforme un dword en word et non en byte. La transformation byte étant fait automatiquement avec masm.

Cela doit donner un db 0x66+jne word.

@++

Commentaire de patatalo le 06/04/2010 19:17:43 administrateur CS

j'ai confondu avec le "near" autant pour moi.

Commentaire de vincent2795 le 06/04/2010 21:25:49

lol monologue^^

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

exercice [ par susur2002 ] afficher le contenu du registre du didact 68000 sous forme de 1 et de 0 sur l'ecran du pc en utilisant le port 3 du didact.on utilisera ce registre di Base de Registre [ par VBrifi ] bon ma question a un rapport avec l'assembleur -j'ai cracké un vieux petit programme qui demande un numéro de série pour s'enregistrer : un jne rempl Placer là "partie basse" d'un registre 32 bits dans un registre 16 bits ??? [ par Otaku ] Salut, tout est dans le titre, comment faire pour placer la partie basse (LOWWORD) d'une valeur stockée dans le registre EAX dans un registre 16 bits Petite question... [ par did2604 ] Bonsoir,Que signifie exactement la notation crochet en assembleur ? Je m'explique, par exemple : mov cl,[bx], je suppose que ce n'est pas un move ordi affichage du contenu d'un registre général [ par did2604 ] Bonsoir,Quel est le code qui permet d'afficher le contenu d'un registre général (bx par exemple). Exemple, le registre BX contient la valeur 3F8 et j' Décaler les octets d'un registre [ par Kephuro2 ] Bonjour à tous !Je m'adresse à vous car j'ai un petit souci !Je vous explique vite fait. Donc j'ai un registre (eax) qui a pour valeur : 0000825C, j'a bits de registres [ par vecchio56 ] Salut,Je cherche le moyen le plus rapide de-connaitre le bit numero n d'un registre-mettre à b le bit numero n d'un registre(Ou si c'est possible mett Comment trouver l'appel d'une cle de la base de registre dans W32DASM par exemple [ par huguesmagali ] J'ai un prog qui appelle une cl&#233; dans la base de registre windows ( Dword = 0x00000012 ), puis il fait un traitement parce que&nbsp;cette cl&#233 Flags dans le registre INTCON [ par tahiti_bob ] Bonjour,J'ai&nbsp; trouv&#233; sur cette page une excellente routine de communication RS232 entre un PIC et un PC.http://www.electronic-engineering.ch Afficher valeur registre ? [ par Zootella ] Hello all, dans un programme, celui-&#231;i test la valeur d'un registre : cmp&nbsp; dword ptr [eax],4550h je voudrais faire des tests et afficher


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Août 2010
LMMJVSD
      1
2345678
9101112131415
16171819202122
23242526272829
3031     

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,108 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales