Entwickler-Ecke
Alle Sprachen - Alle Plattformen - C: rdata, data und eine Variable verstecken
tomycat - Mi 29.12.21 15:29
Titel: C: rdata, data und eine Variable verstecken
Hallo zusammen,
Der Code von :
Password Discovery and Patching by Disassembling [
https://www.c-sharpcorner.com/UploadFile/ajyadav123/password-discovery-and-patching-by-disassembling/]
C++-Quelltext
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:
| #include "stdafx.h"
#include <stdio.h> #include <string.h> #define SIZE 100 #define PASSWORD ******** char passwd[ ]="PASSWORD"; #pragma data_seg () #pragma comment(linker, "/SECTION:.Secure,RWS")
int main () { int count=0; char buff [SIZE]=" ";
printf ("\nWelcome to Console!!\n[You may have only 3 unsuccessful login attempts!]\n"); for (;;) { printf ("\Attempt =%d",count+1); printf ("\nEnter the Password:"); fgets (&buff [0], SIZE,stdin); if (strcmp(&buff[0] , &passwd[0])) { printf ("Invalid Password: Try Again\n"); } else { break; } if (++count>2) { printf ("\nAccess Denied"); return -1; } } printf ("Congratulations!!: Valid Credentials\n"); } |
1.Frage:
Warum brauche ich jetzt plötzlich ->>
#include "stdafx.h"?
2.Frage:
Der Original Quellcode hat keine Gänsefüsschen ->>
char passwd[ ]="PASSWORD";
Warum?
3.Frage:
Mit
dumpbin meinprog.exe
habe einen
rdata und eine
data Block, wo nach orientiert sich der Compiler?
4.Frage
Nach der Änderung mit NEU, siehe Quellcode von oben, soll ein neuer Block entstehen ->>
#pragma comment(linker, "/SECTION:.Secure,RWS")
Er ist nicht mit
dumpbin meinprog.exe zu sehen.
Moderiert von Th69: Topic aus Andere .NET-Sprachen verschoben am Mi 29.12.2021 um 14:38
Moderiert von Th69: URL-Titel hinzugefügt.
Moderiert von Th69: Code-Tags hinzugefügt
Th69 - Mi 29.12.21 15:53
Hallo,
zu 1.: Das ist beim Visual Studio Compiler (MSVC) der vorkompilierte Header. Kannst die Zeile löschen, wenn du ihn nicht nutzt.
zu 2.: In Zeile 5 (Listing 1 des Originalcodes) sollen diese stehen, also
Quelltext
1:
| #define PASSWORD "********" |
Bei
char passwd[ ]="PASSWORD"; würde dieses ja nicht durch das Makro ersetzt werden.
zu 3.: Deine Frage verstehe ich nicht ganz - das ist einfach der Unterschied von Konstanten/Literalen (
.rdata) zu Variablen (
.data).
zu 4.: Dir fehlt noch die wichtige Zeile
#pragma data_seg (".Secure") vor dem Passwort. ;-)
tomycat - Mi 29.12.21 22:29
thx,
zu 2.
Im Originalen Quellcode ist das ohne Gänsefüsschen und Visual Studio unterstreicht das rot. Mit Gänsefüsschen ist das kein Problem.Warum?
zu 3.
Komisch ist, dass fast der gleiche Quellcode ein
rdata erstellt wird und bei einem anderen Quellcode keinen. Der fast das gleiche macht.
Deswegen meine Frage, welche Variablen komme in
rdata und welche in
data?
Moderiert von Th69: Code-Tags hinzugefügt
Th69 - Do 30.12.21 11:34
Weil mit Gänsefüßchen nun mal ein String-Literal erzeugt wird. :gruebel:
Der Autor hat einfach sein Passwort für den Artikel durch Sternchen ersetzt (und dabei auch die Gänsefüßchen gelöscht).
Alle String-Literale sollten im .rdata-Bereich erscheinen. Welcher Code erzeugt denn keinen?
tomycat - Sa 01.01.22 19:30
letzte Frage:
C++-Quelltext
1:
| if (strcmp(&buff[0] , &passwd[0])) |
Warum geht der Code nicht?
buff ist
PASSWORD und
passwd ist
PASSWORD. Der Befehl
strcmp vergleicht und sagt trotzdem falsch?
Moderiert von Th69: Code-Tags hinzugefügt
Th69 - So 02.01.22 10:21
Das liegt am vorherigen
fgets [
https://de.cppreference.com/w/c/io/fgets].
Da wird bei Eingabe über die Konsole noch das Zeilenendezeichen (Newline) in
buff enthalten sein.
Kannst du umstellen auf
sofern keine Whitespaces (Leerzeichen, Zeilenende, ...) eingelesen werden sollen, ansonsten
welches nur (ausschließlich) bis zum Zeilenendezeichen liest.
Hinweis: Die Längenbeschränkung des Puffers ist dabei aber nicht berücksichtigt (aber zum Testen bei max. 100 Zeichen reicht es wohl).
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!