J'ai trouvé un outil pour réparer la table d'import here, mais comment PE est-il exécutable sans importer la table construite en premier lieu en c/C++?comment construire un exécutable sans importer table en c/C++?
4
A
Répondre
7
N'utilisez simplement pas CRT et n'utilisez aucune fonction importée.
#pragma comment(linker, "/entry:start")
int start()
{
return 42;
}
Pour utiliser les fonctions WinAPI, trouver la base kernel32, l'analyse syntaxique est le répertoire d'exportation et trouver la fonction LoadLibrary() (vous devriez déjà avoir quelque chose comme GetProcAddress() pour LoadLibrary())
Cela peut ressemble ceci:
// compile as console application, "release" configuration with /MT /GS-
#include <Windows.h>
#pragma comment(linker, "/entry:start")
void start()
{
HMODULE kernel32base = *(HMODULE*)(*(DWORD*)(*(DWORD*)(*(DWORD*)(*(DWORD*)(__readfsdword(0x30) + 0x0C) + 0x14))) + 0x10);
DWORD base = (DWORD)kernel32base;
IMAGE_NT_HEADERS* pe = PIMAGE_NT_HEADERS(base + PIMAGE_DOS_HEADER(base)->e_lfanew);
IMAGE_EXPORT_DIRECTORY* exportDir = PIMAGE_EXPORT_DIRECTORY(base + pe->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
DWORD* namePtr = (DWORD*)(base + exportDir->AddressOfNames);
WORD* ordPtr = (WORD*)(base + exportDir->AddressOfNameOrdinals);
for(; strcmp((const char*)(base + *namePtr), "GetProcAddress"); ++namePtr, ++ordPtr)
;
DWORD funcRVA = *(DWORD*)(base + exportDir->AddressOfFunctions + *ordPtr * 4);
typedef FARPROC (WINAPI *GetProcAddress_t)(HMODULE, const char*);
GetProcAddress_t GetProcAddress = (GetProcAddress_t)(base + funcRVA);
HANDLE (WINAPI *GetStdHandle)(DWORD);
*(FARPROC*)&GetStdHandle = GetProcAddress(kernel32base, "GetStdHandle");
HANDLE stdout = GetStdHandle(STD_OUTPUT_HANDLE);
BOOL (WINAPI *WriteFile)(HANDLE, LPCVOID, DWORD, LPDWORD, LPOVERLAPPED);
*(FARPROC*)&WriteFile = GetProcAddress(kernel32base, "WriteFile");
const char* greeting = "Hello world!\n";
DWORD written;
WriteFile(stdout, greeting, strlen(greeting), &written, NULL);
}
0
dépouiller les importations de module exécutable existant, vous devez analyser ce répertoire est des importations pour obtenir ses importations, puis générer et ajouter un code pour obtenir ces importations, puis supprimer le répertoire des importations.
Questions connexes
- 1. Construire un exécutable Linux en utilisant GCC
- 2. Comment importer une fonction de libc6 dans un exécutable ELF?
- 3. Comment construire un projet PyQT?
- 4. En utilisant Maven 1.x sans plugins supplémentaires, comment quelqu'un construit un fichier exécutable?
- 5. Comment ouvrir un fichier binaire exécutable sans l'exécuter dans ollydbg?
- 6. Comment démarrer le débogueur Xcode pour un projet sans exécutable?
- 7. Est-ce que Solaris cc est incorporé dans un fichier exécutable différent pour différentes compilations?
- 8. Importer un module python sans l'extension .py
- 9. Comment exécuter un exécutable en utilisant Lua?
- 10. Comment faire un programme exécutable en Java?
- 11. Est-il possible de construire un projet MsTest dans un exécutable autonome? Comment?
- 12. jQuery Construire une table
- 13. Comment importer Excel vers Datagrid sans OleDB?
- 14. Construire ImmutableSortedSet sans avertissements
- 15. Importer depuis un module avec le même nom qu'un fichier exécutable en Python
- 16. importer depuis un fichier en javascript
- 17. Comment construire une table complexe en utilisant CSS?
- 18. comment importer en csv
- 19. rails, Comment construire une table dans helper en utilisant content_tag?
- 20. Comment renommer un exécutable VB6?
- 21. Comment construire un exécutable linux dans CentOS 5 et l'exécuter sur RedHat 9?
- 22. Convertir .jar en un exécutable OSX?
- 23. Comment construire une table de caractères
- 24. Comment importer un fichier CSV?
- 25. importer un tableau en python
- 26. Un seul exécutable pour 32 et 64 bits (sans WOW64)
- 27. Lancer un exécutable sans modifier HKLM ou PATH
- 28. Comment ajouter un manifeste à un exécutable en utilisant mt.exe?
- 29. Comment supprimer cc, bcc dans MailComposerViewController?
- 30. Possible d'appeler un script exécutable Thor sans appeler thor?
Bien sûr, c'est comment construire à partir de la méthode source. – Abyx
Pouvez-vous fournir un exemple de bonjour dans son intégralité? – ollydbg
@ollydbg C'est plutôt complet pour MSVC. Compilez-le comme "release" avec/MT/GS- et il n'aura aucune importation. – Abyx