Autor |
Beitrag |
Biarchiv
      
Beiträge: 688
|
Verfasst: So 06.04.03 18:16
Hallo,
Wer kann mir diesen Code von C ins Delphi übersetzen?
Das ist glaube eine C procedure bitte in eine Delphi procedure.
Vielen Dank.
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: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63:
| LPE_STD_CODE EnlargeHeader(PE_INFO *pe) { LPE_STD_CODE ret = LPE_HANDLEDERROR; HWND hErrDlg = GetActiveWindow(); DWORD dwHSize, dwBuff, i; IMAGE_SECTION_HEADER *pS; HANDLE hFile; void *pMem; DWORD dwMemSize;
// possible ? // if (pe->pNTh->OptionalHeader.SizeOfHeaders >= 0x1000) if ( GetRealSizeOfHeaders( pe->pMap ) >= 0x1000 ) { ShowError(hErrDlg, "The maximum SizeOfHeaders (0x1000) is already reached !"); goto Exit; }
// move the sections 0x200 bytes back dwHSize = GetRealSizeOfHeaders(pe->pMap); dwMemSize = pe->dwFileSize - dwHSize; pMem = m(dwMemSize); if (!pMem) { ret = LPE_NOMEMORY; goto Exit; } memcpy(pMem, (void*)((DWORD)pe->pMap + dwHSize), dwMemSize); pe->pNTh->OptionalHeader.SizeOfHeaders = dwHSize + 0x200; pS = pe->pSech; for (i = 0; i < pe->pNTh->FileHeader.NumberOfSections; i++) { if (pS->PointerToRawData) // Watcom C/C++ pS->PointerToRawData += 0x200; ++pS; }
UnloadPEFile(pe); // unmapped !!!
hFile = GetFileHandle(pe->cPath, GFH_OPENEXISTING_RW); SetFilePointer(hFile, dwHSize + 0x200, 0, FILE_BEGIN); WriteFile( hFile, pMem, dwMemSize, &dwBuff, NULL); CloseHandle(hFile); f(pMem); if (LoadPEFile(pe) != LPEF_SUCCESS) { HandleRemapError(hErrDlg); goto Exit; }
// refresh PE info dlg ShowPEBaseInfo(hPEEditor);
ret = LPE_OK;
Exit: return ret; } |
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: So 06.04.03 18:57
das wird dir nicht viel nützen, da einige Funktionen wie GetRealSizeOfHeaders, UnloadPEFile weder im API noch sonst wo zu finden sind. Die sind also auch zu übersetzen, nur wo ist der sourcecode?
Besser, welches Problem soll damit gelöst werden? So wie es aussieht, wird via MemoryMappedFiles eine PE-Exedatei analysiert. Da das PE-Format frei ist, sollte es kein Prob sein, es gleich in D umzusetzen.
grez
msch
|
|
Biarchiv 
      
Beiträge: 688
|
Verfasst: So 06.04.03 19:46
Hallo,
Der Sinn des Codes ist:
Er soll einen PEHeader von einer EXE vergrößern.
Also
SizeOfHeders auslesen + 200h / speichern
Alle Sektionen ermitteln und dort der RAWOffset + 200h / speichern
Am ende der letzen Sektion soll er nun 200h = 512 Bytes (alle 00h) einfügen.
Die Datei wird um 512 Bytes größer.
Wer könnte das in Delphi machen?
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mo 07.04.03 14:50
Hallo,
da ich mich mit PE-Header und so nicht auskenne wäre ich froh wenn Du mir erklären könntest was Deine Aufgabenstellung
Biarchiv hat folgendes geschrieben: | Er soll einen PEHeader von einer EXE vergrößern.
Also
SizeOfHeders auslesen + 200h / speichern
Alle Sektionen ermitteln und dort der RAWOffset + 200h / speichern
Am ende der letzen Sektion soll er nun 200h = 512 Bytes (alle 00h) einfügen. |
für einen Zweck erfüllen soll.
Dank Dir!
Gruß
Tino
|
|
Biarchiv 
      
Beiträge: 688
|
Verfasst: Mo 07.04.03 15:54
Hallo,
Ich habe einen EXE-Protector Lizenz der eine Sektion hinzufügt.
Der aber Platz benötigt im PEHeader.
Genau so geht es laut Coder:
Bekomme werte für SizeOfHeaders, addiere 200h dazu und trage den Wert wieder ein.
Bekomme den Wert wieviele Sektionen die EXE hat.
Bekomme von jeder Sektion den RAWOffset und addiere 200h dazu und speichere.
Dann nach der Letzten Sektion 200h Bytes (512 Bytes) einfügen.
Datei wird dadurch 512 Bytes größer.
|
|
Aya
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Mo 07.04.03 20:43
Biarchiv hat folgendes geschrieben: |
Ich habe einen EXE-Protector Lizenz der eine Sektion hinzufügt.
Der aber Platz benötigt im PEHeader.
|
Hä??
Erklär mal genauer für die Aya *grinst lieb*
Au'revoir,
Aya~
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|
Biarchiv 
      
Beiträge: 688
|
Verfasst: Mo 07.04.03 20:55
Hallo,
Ich habe einen EXE-Protector der beim Protecten eine Section in der EXE hinzufügt.
Allerdings wenn kein Platz im Header ist kann er nicht protecten.
Wenn ich aber SizeOfHeader selber vergröße kann er wieder protecten.
Manchen Compiler lassen keinen Platz
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Di 08.04.03 11:20
Sorry, das ich Dir nicht helfen kann. Aber von Deinen letzten beiden Beiträgen weiß ich immer noch nicht was das für einen Sinn macht. Vielleicht kannst Du mir mal erklären warum Du etwas in dieser Section hinzufügen willst ?!?! Mich interessiert das Thema nämlich auch!
Gruß
Tino
|
|
ShadowCaster
      
Beiträge: 312
|
Verfasst: Mo 02.06.03 10:35
@Biarchiv: Es reicht nicht, nur die SizeofHeaders zu vergrößern. Du musst noch einige andere Werte ändern. Ich arbeite gerade an einem PE-Explorer und werd ihn demnächst auf einer Homepage veröffentlichen. Der soll später diese Funktionalität auch haben. Also musst einfach mal was abwarten.
Die Homepage auf der er erscheinen wird ist www.digital-wings.de
|
|
Biarchiv 
      
Beiträge: 688
|
Verfasst: Mo 02.06.03 12:49
Hallo ShadowCaster,
Danke für Deine Antwort.
Okay da warte ich noch gerne.
Kann ich dann diesen Teil des Sources haben oder
ist Open-Source.
|
|
ShadowCaster
      
Beiträge: 312
|
Verfasst: Mo 02.06.03 12:51
Ich werd dir gern den Teil des Sources geben. Ansonsten ist das Programm allerdings kein OS
Ich bin zudem froh, dass sich in dem Forum doch noch einige Leute einfinden, die in diesem Bereich programmieren, denn solche Personen zu finden ist nicht gerade einfach 
|
|
Biarchiv 
      
Beiträge: 688
|
Verfasst: Mo 02.06.03 13:07
Hello ShadowCaster,
ja solche leute zu finden ist leider schwer.
Kenst du noch welche???
Wie gut kenst du dich aus?
Ich code gerade an einen PE-Protector und PE-Joiner.
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mo 02.06.03 13:25
Ich hab für meinen X-Spy auch geplant Infos über Module (Dlls und Exe) auszugeben. Bin momentan aber erst mit anderen Teilen beschäftigt, das kommt erst noch....
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
w3seek
      
Beiträge: 64
Win XP; Win 2k; Suse 9.0
D5 Std, D6 Personal
|
Verfasst: Mo 02.06.03 15:51
der Code uebersetzt nach delphi, alles was unbekannt ist hab ich entsprechend kommentiert:
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: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114:
| const LPE_HANDLEDERROR = 0; LPE_NOMEMORY = 1; LPE_OK = 2; LPEF_SUCCESS = 0; GFH_OPENEXISTING_RW = 0; var hPEEditor: HWND; type PIMAGE_SECTION_HEADER = ^IMAGE_SECTION_HEADER; LPE_STD_CODE = Cardinal; PPE_INFO = ^TPE_INFO; TPE_INFO = record pNTh: ^IMAGE_NT_HEADERS; pMap: Pointer; pSech: PIMAGE_SECTION_HEADER; dwFileSize: DWORD; cPath: String; end;
function GetRealSizeOfHeaders(Map: Pointer): Cardinal; begin end;
procedure ShowError(hWnd: HWND; const Msg: String); begin end;
procedure HandleRemapError(hWnd: HWND); begin end;
procedure UnloadPEFile(pe: PPE_INFO); begin end;
function LoadPEFile(pe: PPE_INFO): Cardinal; begin end;
function GetFileHandle(const Path: String; dwMode: DWORD): THandle; begin end;
procedure ShowPEBaseInfo(hPEEditor: HWND); begin end;
function EnlargeHeader(pe: PPE_INFO): LPE_STD_CODE; var hErrDlg: HWND; dwHSize, dwBuff, i: DWORD; pS: PIMAGE_SECTION_HEADER; hFile: THandle; pMem: Pointer; dwMemSize: DWORD; begin Result := LPE_HANDLEDERROR; hErrDlg := GetActiveWindow; if (GetRealSizeOfHeaders(pe^.pMap) >= $1000) then begin ShowError(hErrDlg, 'The maximum SizeOfHeaders (0x1000) is already reached !'); Exit; end;
dwHSize := GetRealSizeOfHeaders(pe^.pMap); dwMemSize := pe^.dwFileSize - dwHSize; GetMem(pMem, dwMemSize); if not Assigned(pMem) then begin Result := LPE_NOMEMORY; Exit; end; Move(Pointer(DWord(pe^.pMap) + dwHSize)^, pMem^, dwMemSize); pe^.pNTh^.OptionalHeader.SizeOfHeaders := dwHSize + $200; pS := pe^.pSech; for i := 0 to pe^.pNTh^.FileHeader.NumberOfSections - 1 do begin if pS^.PointerToRawData <> 0 then Inc(pS^.PointerToRawData, $200); Inc(pS); end; UnloadPEFile(pe); hFile := GetFileHandle(pe^.cPath, GFH_OPENEXISTING_RW); SetFilePointer(hFile, dwHSize + $200, nil, FILE_BEGIN); WriteFile(hFile, pMem^, dwMemSize, dwBuff, nil); CloseHandle(hFile); FreeMem(pMem); if LoadPEFile(pe) <> LPEF_SUCCESS then begin HandleRemapError(hErrDlg); Exit; end; ShowPEBaseInfo(hPEEditor); Result := LPE_OK; end; |
|
|
ShadowCaster
      
Beiträge: 312
|
Verfasst: Mo 02.06.03 17:22
So Biarchiv. Ich konnte dir das Ding leider heute nicht übersetzen aus Zeitmangel. Aber da war ja schon jemand so nett  Was den PE-Explorer angeht, so komm ich sehr gut vorran und falls ich einige Fehler noch beheben kann, werd ich hier morgen mal die erste Version des sehr kleinen Programms veröffentlichen. News gibts dann immer im Forum oder auf der Homepage, wie ihr wollt. Natürlich wird es nicht bei einem PE-Explorer bleiben. Das Programm soll noch ziemlich erweitert werden und ich hab da noch so einiges geplant.
Also bis dann
Gruß
Shadow
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Mo 02.06.03 17:31
ShadowCaster hat folgendes geschrieben: | PE-Explorer |
Soll der so was ähnliches werden, wie der PE-Viewer
_________________ Ist Zeit wirklich Geld?
|
|
ShadowCaster
      
Beiträge: 312
|
Verfasst: Di 03.06.03 09:30
Ja, nur da sind noch einige Features mehr geplant wie Disassembler und Hexeditor, Hexcalculator, etc. Man soll auch PE-Files reparieren können, das Proggie soll Checksummen berechnen können, Sektionen und Recourcen extrahieren bzw. hinzufügen, etc. Das Ding soll das ultimative Helptool im Umgang mit Executables werden. Bis auf einen kleinen Bug ist der PE-Explorer jetzt fertig. Ich werd ihn nochmal überarbeiten und dann heut im Forum schonmal zum Downlaod bereitstellen. Die neuen Versionen gibt es dann auf meiner Homepage die nächsten Tage und Wochen.
|
|