IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

Code auto modifiable x64


Sujet :

x86 32-bits / 64-bits Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Février 2011
    Messages : 21
    Par défaut Code auto modifiable x64
    Bonjour,

    Je n'arrive pas à faire fonctionner un code automodifiable (cf je copie une instruction par dessus une autre) sur windows 7 x64.
    (il fonctionne bien sur système x86 32bts)

    Quelqu'un sait il si il y a des limitations sous win 7 x64 ou sur système x64 ??

    L'idéal, mais je n'ose l'espérer, serait qu'un expert donne un petit code fonctionnel sous x64 win 7.

    En attendant de vous lire...

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 484
    Par défaut
    Bonjour,

    Il y a effectivement des limitations sur toutes les plate-formes fonctionnant en mode protégé ou assimilé, ce qui en gros inclut tous les PC depuis 1990, à peu près. Par contre, ça m'étonne que Windows t'ait laissé modifier du code à la volée même sur système 32 bits, à moins que tu ne fonctionne en mode DOS. Et de ce côté-là, il semblerait que Windows 7 ait décidé de s'émanciper pour de bon.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Février 2011
    Messages : 21
    Par défaut
    Je te confirme que cela fonctionne très bien sur x86 32bts. (XP, Vista)

    Je te remercie pour ta réponse et j'avoue que ça me fout vraiment les boules parce que j'adore cela, auto modifier les codes.

    Est ce que par hasard cela aurait quelque chose à voir avec le cache L1 d'instruction qui ne prend pas en compte les modifications (puisque normalement ce n'est pas très catholique de faire cela. Dans ce cas le "problème" viendrait du processeur x64 lui même) ou est ce à cause de l'OS ? A moins que ce soit la fameuse protection anti-virii installé en hard (je ne connais pas bien le sujet mais je crois que cette protection a été intégrée aux processeurs récents)

    Je suis vraiment très contrarié que cela ne fonctionne pas.

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 484
    Par défaut
    J'avoue que beaucoup fait ça en mode réel et sur les huit bits, mais que je ne me suis pas vraiment livré à cette activité sur les systèmes multi-tâches (je suis passé à autre chose, en fait).

    En principe, chaque segment déclaré a plusieurs flags, dont le droit d'exécution et celui d'écriture. En flat mode, je ne sais pas comment ça fonctionne (pas été voir).

    Maintenant, ça dépend de ce que tu faisais réellement : tu faisais de vrais programmes Windows (j'imagine que oui, puisque tu as l'air de connaître ton sujet) ou des programmes D.O.S. exécutés depuis Windows ? Et, d'autre part, Est-ce que tu modifiais le code directement en mémoire ou bien dans le fichier *.exe ?

  5. #5
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par défaut
    Bonjour,

    Sous Windows, les processus 64 bits sont protégés via DEP (non permanent par défaut) + ASLR. Ne pas oublier non plus que la section de code est non modifiable par défaut.

    Tu peux compiler de façon à ce que la section de code soit modifiable, ou alors faire un VirtualProtect() sur la section de code.

    Exemple de base, compilé avec JWASM ou ml64.

    Remplace une série de NOPs par des int3. Testé sous Windbg.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    ; Win64.asm
    ;--- Win64 console application
    ;--- assemble: jwasm -c -win64 -Zp8 -I<path_to_include> Win64_4.asm
    ;--- link: link /subsystem:console /section:.text,erw Win64_4.obj
     
        option casemap:none
        option frame:auto
     
        .nolist
        .nocref
    WIN32_LEAN_AND_MEAN equ 1
        include windows.inc
        .list
        .cref
     
        includelib <kernel32.lib>
     
    main			 proto 
    ExitProcess      proto :UINT	
     
        .CODE
     
    main proc FRAME uses rbx rsi rdi
     
    local dwWritten:DWORD
     
    	;int 3
     
    	;lea rbx, [rip]
    	DB 48h, 8Dh, 1Dh, 00h, 00h, 00h, 00h
     
    	; 16 NOPs
    	db 10h dup(90h)
     
    	; réécrit les NOPs avec des int3
    	mov rdi, rbx
    	mov eax, 0cch
    	mov ecx, 10h
    	rep stosb
     
        ret
     
    main endp
     
    mainCRTStartup proc FRAME
        invoke main
        invoke ExitProcess, eax
    mainCRTStartup endp
     
    END mainCRTStartup
    Compilation:

    jwasm -c -win64 -Zp8 -ID:\Programmation\Asm\include Win64.asm
    Link :

    link /subsystem:console /section:.text,erw Win64.obj
    L'important ici c'est le "/section:.text,erw" qui indique que la section de code (.text) devient Executable, Readable, Writable.

    On peut s'en passer en utilisant VirtualProtect():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    .data 
    oldprotect dd ?
     
    .code
     
    ; <snip>
     
      lea r9, oldprotect  ; R9  = lpflOldProtect
      mov r8d, 40h     ; R8D = flNewProtect
      mov rdx, 1000h        ; RDX = dwSize
      lea rcx, address ; RCX = lpAddress
      call VirtualProtect

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Février 2011
    Messages : 21
    Par défaut
    Obsidian> Oui, il s'agit de vrais programmes windows. Je modifie les opcodes en mémoire vive.
    Neitsa> Effectivement c'est ça qui semble me bloquer. Wiki nous dit cela concernant le DEP:

    OptIn :
    This setting is the default configuration for Windows XP, Vista and 7. In this mode, DEP is only enabled for limited Windows system applications and services. Applications are not forced by the Operating System to opt-in—applications that wish to opt in must explicitly submit a protection request.[9] The only exception however, are 64-bit application and services on Windows Vista x64: 64-bit applications and services that run in this mode are automatically protected in this mode unless they submit an explicit opt-out request.[10][11]
    J'utilise Fasm, je vais essayer de trouver comment faire pour faire sauter le DEP.J'ai essayé en modifiant la liste d'exception pour mon exécutable, mais ça ne marche pas.

    Je vous remercie pour votre aide.

Discussions similaires

  1. Exemple de code auto-modifiant
    Par n5Rzn1D9dC dans le forum Contribuez
    Réponses: 11
    Dernier message: 27/05/2025, 07h15
  2. Code auto-modifié => sérialiser
    Par - Robby - dans le forum Assembleur
    Réponses: 2
    Dernier message: 11/05/2008, 13h23
  3. [PC-MS] Code pour modifier la police d'impression
    Par sharcky dans le forum Cobol
    Réponses: 11
    Dernier message: 30/08/2007, 10h35
  4. [MySQL] Question code auto inscription formulaire
    Par dekovince dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 26/02/2007, 14h45
  5. [CODE] auto incrémentation ?
    Par Roi dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 25/09/2003, 15h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo