A injeção de código também funciona em C #!


15

Dada a saída do programa C # a seguir False, injete uma linha de código 'maliciosa', de forma que o programa saia True.

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

Sua resposta deve consistir em uma sequência que substitua o segundo ponto e vírgula e faz com que o programa produza Trueo todo Truee nada além de True(nem mesmo uma nova linha). Isso deve ser feito se stdout for impresso no console e se stdout for redirecionado para um arquivo.

A resposta mais curta vence.


Qual é o seu critério de vitória objetivo?
JB

@JB Os quebra-cabeças precisam de um critério de vitória? Irá editar.
Kendall Frey

Estou reagindo principalmente à observação do código de golfe, mas o ponto permanece: qual será a resposta aceita?
JB

@JB A resposta mais curta é a melhor resposta.
Kendall Frey

Bem, é código-golfe, então, não é?
JB

Respostas:


17

52 caracteres

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

então a coisa toda se torna:

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

Desculpe por editar a pergunta no meio da sua resposta. Novas linhas não são mais permitidas, você precisará usar Write.
Kendall Frey #

Ok, eu mudei WriteLineparaWrite
Danko Durbić

1
Você provavelmente poderia salvar alguns bytes substituindo sua saída por for(;;);nada que eu tenha visto requer que o programa seja encerrado ...?
Joachim Isaksson

@JoachimIsaksson Sim, isso atende aos requisitos conforme especificado.
Kendall Frey

4
}static Program(){System.Console.Write(0<1);for(;;);sempre poderia se tornar}static Program(){for(System.Console.Write(0<1);;);
NPSF3000

7

C #, 51 caracteres

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

Funcionará apenas na saída padrão


A primeira coisa que tentei, infelizmente, não funcionará por causa da inicial WriteLine.
Vereos

3
Agora é Write: / Eu não entendo como iríamos conseguir resolver este se continua a mudar ...
Vereos

@Vereos Eu queria remover a ambiguidade de 'nova linha ou nenhuma nova linha'.
Kendall Frey

3
Você não precisa de duas instâncias de Console.Writee pode usar em \rvez de 5 \bs. Console.Write("\rTrue ");
Brian S

Eu não acho que ele atende aos critérios. Na verdade, ele gera primeiro False, que é substituído por True mais tarde.
microbian

1

Você pode generalizar a resposta do RamonBoza para continuar funcionando se o stdout for redirecionado para um arquivo.

Supondo que o programa seja executado em Mono no Linux, com o assembly Mono.Posix.dllcarregado:

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

Duvido que isso funcione no Windows, mas provavelmente existe um equivalente isatty().


1

83 ... WIP

Eu estava esperando que isso funcionasse, mas aparentemente "False" não está sendo internado como eu esperava no meu compilador

//}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];

destroçado

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();
    }
}

Isso não funcionará se o stdout for redirecionado.
Kendall Frey

0

Não tenho certeza se isso é aceito.
A pergunta não diz nada sobre as opções do compilador, portanto, presumo que posso alterar o ponto de entrada do aplicativo.
55 caracteres, 3 a mais que a resposta aceita

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

Cheio

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

Bem-vindo à comunidade!
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Obrigado. Este é um site fantastico!!!
George Vovos
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.