Je travaille sur un exécutable Packer & J'ai fait compression & partie de chiffrement jusqu'à présent. Maintenant, je dois stocker stub/routine de décompression/décryptage dans le fichier compressé. Ma question est que ce bout sera écrit en code HEX ou je peux placer l'instruction d'assemblage directement? Si plus tard est possible, alors comment?Exécutable Packer (stub de décompression/décryptage)
Répondre
Vous devez avoir section avec la caractéristique de « lisible » & « inscriptible » & « contient le code » & « exécutable »
Address of Entry Point: 0x00019860
Section Header #1
Name: UPX0
Virtual Size: 0x00010000 (65536)
Virtual Address: 0x00001000
Size of Raw Data: 0x00000000 (0)
File Pointer to Raw Data: 0x00000400
File Pointer to Relocation Table: 0x00000000
File Pointer to Line Numbers: 0x00000000
Number of Relocations: 0
Number of Line Numbers: 0
Characteristics: 0xE0000080
Section contains uninitialized data.
Section is executable.
Section is readable.
Section is writeable.
Section Header #2
Name: UPX1
Virtual Size: 0x00009000 (36864)
Virtual Address: 0x00011000
Size of Raw Data: 0x00008A00 (35328)
File Pointer to Raw Data: 0x00000400
File Pointer to Relocation Table: 0x00000000
File Pointer to Line Numbers: 0x00000000
Number of Relocations: 0
Number of Line Numbers: 0
Characteristics: 0xE0000040
Section contains initialized data.
Section is executable.
Section is readable.
Section is writeable.
Section Header #3
Name: .rsrc
Virtual Size: 0x00001000 (4096)
Virtual Address: 0x0001A000
Size of Raw Data: 0x00000800 (2048)
File Pointer to Raw Data: 0x00008E00
File Pointer to Relocation Table: 0x00000000
File Pointer to Line Numbers: 0x00000000
Number of Relocations: 0
Number of Line Numbers: 0
Characteristics: 0xC0000040
Section contains initialized data.
Section is readable.
Section is writeable.
Juste en bref, UPX génère une section qui contient le code comprimé et le décompresseur routine et deuxième section qui n'est pas initialisée mais qui est autorisée à avoir une caractéristique accessible en écriture et exécutable. La routine de décompresseur décompresse le code à la section non initialisée et se poursuit avec l'exécution du point d'entrée originale ...
J'ai créé une nouvelle section pour le placement de bout qui a les caractéristiques RWE. Mais le problème n'est pas avec les sections. C'est ce qui devrait être le format de décompression/décryptage stub i.e il devrait être dans l'assemblage ou HEX (comme shellcode)? – rootFather
Est-ce différent? –
Je ne vois toujours pas la différence entre l'écriture comme binaire ou l'écriture comme instructions d'assemblage, qui sont ensuite compilées en binaire ... –
Création d'un paquet binaire de travail nécessite:
- modifier la géométrie du PE
- insérer votre code
En fonction de la taille de votre code, vous pouvez utiliser le remplissage de section ou ajouter votre propre section. Ensuite, pour insérer votre code - comme vous semblez préférer l'insertion ASM directe -, je suggère de rendre indépendant le code de décryptage EIP, puis de l'assembler avec quelque chose comme YASM comme code pur (-o
), et d'inclure code comme binaire assemblé directement.
J'ai écrit plusieurs mini-packers qui pourraient servir de référence de départ, car ils 'insèrent' du code assemblé.
Merci beaucoup Ange, cette suggestion a été utile. Oui, j'ai modifié la géométrie PE. J'ajoute également une nouvelle section pour cette partie de bout. Mais maintenant, le problème est que je compresse et crypte le fichier. Créer une nouvelle section où je vais placer ma partie tronçon, je crée un nouveau fichier PE en utilisant les informations d'en-tête du fichier d'entrée, appliquer des modifications au fichier nouvellement créé. Tout semble bien dans les en-têtes etcMais quand je cours le fichier je vois le message d'erreur "pas une application Win32 valide" .J'utilise Visual Studio 2010 et sans-incremental-linking.I ne peut pas comprendre quel est le problème? Peut-être que vous pouvez proposer une meilleure solution? – rootFather
cela pourrait avoir * beaucoup * de raisons (oublié d'augmenter SizeOfImage, ...?), Donc vous devriez essayer et ouvrir votre nouveau PE avec [pefile] (https://code.google.com/p/pefile/) et voyez ce que les avertissements vous disent. – Ange
J'ai augmenté le SizeOfImage.Can vous me dites si je le fais de la bonne manière i.e SizeOfImage = stubSection-> VirtualAddress + stubSection-> Misc.VirtualSize où stubSection est la dernière section.Si ce mode de calcul est faux, quelle est la bonne méthode pour augmenter SizeOfImage? J'ouvre aussi mon PE avec LordPE & PEiD mais ils ne disent aucun avertissement. Qu'est-ce qui pourrait éventuellement être d'autres raisons, MajorLinkerVersion, OSversion etc? – rootFather
- 1. Problème PE - avec un packer
- 2. PAR :: Packer: Comment afficher la notification de déballage à l'utilisateur?
- 3. Packer et Ansible SSH/Sudo
- 4. javascript/jquery: packer code/Obfuscator
- 5. Utiliser Packer AND YUI Compressor?
- 6. Comportement de Packer, compresseur YUI etc
- 7. Charger l'animation avec Texture Packer dans andengine
- 8. Plugin jQuery Validation: erreur Packer indéfinie?
- 9. BluetoothAdapter.getDefaultAdapter() throw RuntimeException: Stub!
- 10. Stub Méthodes natives PHP
- 11. maven groovy stub generation
- 12. Rhino Mocks - Stub Singleton
- 13. android webservice axis2 stub
- 14. PHPUnit: stub methods undefined
- 15. rspec stub out errors.add
- 16. Mole Stub et attributs
- 17. RSpec: Stub méthode privée
- 18. Groovy: stub tapé référence
- 19. Mock/constructeur Stub
- 20. fichiers stub XPCOM
- 21. rspec - stub méthodes incluses
- 22. Stub Net :: POP3.start
- 23. stub Rhino Expressions Mocks
- 24. OCMock - Stub/attendre/stopmocking
- 25. Comment créer View Stub?
- 26. Informations d'identification Packer et AWS: Echec de CryptProtectData
- 27. Génération de stub de services Web + android
- 28. Stub unique RMI vs beaucoup
- 29. make RMI Stub avec netBeans
- 30. Comment utiliser Grails WebService Stub?
Regardez la structure de certains exécutables compressés par UPX. Cela peut vous aider. –
Merci @ V-X J'ai analysé la source UPX mais clairement je ne pouvais pas comprendre quel est le format de stub (c'est-à-dire hex/assembly) et comment ils le placent. Une aide serait appréciée. – rootFather