Code Injection funziona anche in C #!


15

Dato il seguente output del programma C # False, iniettare una riga di codice "dannoso" in modo tale che il programma venga emesso True.

class Program
{
    static void Main()
    {
        System.Console.Write("False");
        ;
    }
}

La tua risposta dovrebbe consistere in una stringa che sostituisce il secondo punto e virgola e causa l'output del programma True, il tutto Truee niente ma True(nemmeno una nuova riga). Deve farlo se stdout viene stampato sulla console e se stdout viene reindirizzato a un file.

Vince la risposta più breve.


Qual è il tuo criterio obiettivo vincente?
JB

@JB I puzzle hanno bisogno di un criterio vincente? Modifica.
Kendall Frey,

In gran parte sto reagendo all'osservazione del code-golf, ma il punto rimane: quale sarà la risposta accettata?
JB

@JB La risposta più breve è la risposta migliore.
Kendall Frey,

Beh, è code-golf, allora, no?
JB

Risposte:


17

52 caratteri

}static Program(){System.Console.Write(0<1);for(;;);

così il tutto diventa:

class Program
{
    static void Main()
    {
        System.Console.Write( "False" );
    }
    static Program()
    {
        System.Console.Write( 0 < 1 ); 
        for ( ; ; ) ;
    }
}

Ci scusiamo per aver modificato la domanda nel mezzo della tua risposta. Le newline non sono più consentite, dovrai utilizzarle Write.
Kendall Frey,

Ok, sono passato WriteLineaWrite
Danko Durbić il

1
Probabilmente potresti salvare alcuni byte sostituendo la tua uscita con for(;;);, nulla di ciò che ho visto richiede che il programma termini ...?
Joachim Isaksson,

@JoachimIsaksson Sì, soddisfa i requisiti specificati.
Kendall Frey,

4
}static Program(){System.Console.Write(0<1);for(;;);potrebbe sempre diventare}static Program(){for(System.Console.Write(0<1);;);
NPSF3000 il

7

C #, 51 caratteri

Console.Write("\b\b\b\b\b");Console.Write("True ");

Funzionerà solo su output standard


Prima cosa che ho provato, purtroppo non funzionerà a causa dell'iniziale WriteLine.
Vereos,

3
Ora è Write: / Non capisco come potremmo risolverlo se continua a cambiare ...
Vereos,

@Vereos Volevo rimuovere l'ambiguità di "newline o no newline".
Kendall Frey,

3
Non hai bisogno di 2 istanze di Console.Writee potresti usare al \rposto di 5 \bs. Console.Write("\rTrue ");
Brian S,

Non penso che soddisfi i criteri. In realtà genera prima False, che viene poi sovrascritto da True in seguito.
microbian

1

Puoi generalizzare la risposta di RamonBoza affinché funzioni ancora se stdout viene reindirizzato a un file.

Supponendo che il programma venga eseguito in Mono su Linux, con l'assembly Mono.Posix.dllcaricato:

if(Mono.Unix.Native.Syscall.isatty(1))
{
    Console.Write("\rTrue ");
}
else
{
    // Truncate the output file first
    Console.OpenStandardOutput().SetLength(0);
    Console.Write("True");
}

Dubito che funzioni su Windows, ma probabilmente c'è un equivalente a isatty().


1

83 ... WIP

Speravo che funzionasse, ma apparentemente "Falso" non viene internato come speravo nel mio compilatore

//}unsafe static Program(){fixed(char*f="False"){*(long*)f=0x65007500720054;*(f+4)=' ';}
}unsafe static Program(){fixed(char*f="False")for(int i=5;i-->0;)*(f+i)="True "[i];

ungolfed

class Program
{
    static void Main(string[] args)
    {
        Console.Write("False");
    }

    unsafe static Program()
    {
        fixed (char* f = "False") for (int i = 5; i-- > 0; ) *(f + i) = "True "[i];
    }
}

1
class Program
{
    static void Main()
    {
        System.Console.Write("False");

        System.Console.Clear(); System.Console.Write("True");

        Console.ReadLine();
    }
}

Questo non funzionerà se stdout viene reindirizzato.
Kendall Frey,

0

Non sono sicuro se questo è accettato.
La domanda non dice nulla sulle opzioni del compilatore, quindi presumo di poter cambiare il punto di ingresso dell'app.
55 caratteri, 3 in più rispetto alla risposta accettata

}class P{static void Main(){System.Console.Write(1>0);}

Pieno

class Program
{
    static void Main()
    {
        System.Console.Write("False");
    }
    class P
    {
        static void Main() { System.Console.Write(1 > 0); }
    }
}

Benvenuto nella community!
Erik the Outgolfer,

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Grazie. Questo è un sito fantastico !!!
George Vovos,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.