Autor Beitrag
tomycat
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 265
Erhaltene Danke: 1



BeitragVerfasst: Mi 29.12.21 15:29 
Hallo zusammen,

Der Code von :
Password Discovery and Patching by Disassembling

ausblenden volle Höhe 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 ********  
  
//neu
char passwd[ ]="PASSWORD";  
  
#pragma data_seg ()  
#pragma comment(linker, "/SECTION:.Secure,RWS")  
//neu ende



int main ()  
{  
  
int count=0;  
char buff [SIZE]=" ";  
//char passwd[ ]="PASSWORD";  

    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 user profile iconTh69: Topic aus Andere .NET-Sprachen verschoben am Mi 29.12.2021 um 14:38
Moderiert von user profile iconTh69: URL-Titel hinzugefügt.
Moderiert von user profile iconTh69: Code-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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
ausblenden 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. ;-)

Für diesen Beitrag haben gedankt: tomycat
tomycat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 265
Erhaltene Danke: 1



BeitragVerfasst: 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 user profile iconTh69: Code-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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?

Für diesen Beitrag haben gedankt: tomycat
tomycat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 265
Erhaltene Danke: 1



BeitragVerfasst: Sa 01.01.22 19:30 
letzte Frage:
ausblenden 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 user profile iconTh69: Code-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 02.01.22 10:21 
Das liegt am vorherigen fgets.
Da wird bei Eingabe über die Konsole noch das Zeilenendezeichen (Newline) in buff enthalten sein.
Kannst du umstellen auf
ausblenden Quelltext
1:
scanf("%s", buff);					

sofern keine Whitespaces (Leerzeichen, Zeilenende, ...) eingelesen werden sollen, ansonsten
ausblenden Quelltext
1:
scanf("^[\n]", buff);					

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).

Für diesen Beitrag haben gedankt: tomycat