Code Injection cũng hoạt động trong C #!


15

Đưa ra chương trình C # sau đây False, hãy nhập một dòng mã 'độc hại' để chương trình xuất ra True.

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

Câu trả lời của bạn nên bao gồm một chuỗi thay thế dấu chấm phẩy thứ hai và khiến chương trình xuất ra True, toàn bộ Truevà không có gì ngoài True(thậm chí không phải là một dòng mới). Nó phải làm điều này nếu thiết bị xuất chuẩn được in ra bàn điều khiển và nếu thiết bị xuất chuẩn được chuyển hướng đến một tệp.

Câu trả lời ngắn nhất sẽ thắng.


Tiêu chí chiến thắng mục tiêu của bạn là gì?
JB

@JB Câu đố có cần một tiêu chí chiến thắng không? Sẽ chỉnh sửa.
Kendall Frey

Tôi chủ yếu phản ứng với nhận xét về môn đánh gôn, nhưng quan điểm: đó sẽ là câu trả lời được chấp nhận?
JB

@JB Câu trả lời ngắn nhất là câu trả lời tốt nhất.
Kendall Frey

Chà, đó môn đánh gôn, phải không?
JB

Câu trả lời:


17

52 ký tự

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

vì vậy toàn bộ sự việc trở thành:

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

Xin lỗi vì đã chỉnh sửa câu hỏi ở giữa câu trả lời của bạn. Dòng mới không còn được cho phép, bạn sẽ phải sử dụng Write.
Kendall Frey

Ok, tôi đã đổi WriteLinethànhWrite
Danko Durbić

1
Bạn có thể có thể lưu một số byte bằng cách thay thế lối ra của bạn bằng for(;;);, không có gì tôi thấy yêu cầu chương trình chấm dứt ...?
Joachim Isaksson

@JoachimIsaksson Có, đáp ứng các yêu cầu theo quy định.
Kendall Frey

4
}static Program(){System.Console.Write(0<1);for(;;);luôn có thể trở thành}static Program(){for(System.Console.Write(0<1);;);
NPSF3000

7

C #, 51 ký tự

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

Sẽ chỉ hoạt động trên đầu ra tiêu chuẩn


Điều đầu tiên tôi đã thử, tiếc là nó không hoạt động vì ban đầu WriteLine.
Vereos

3
Bây giờ là Write: / Tôi không hiểu làm thế nào chúng ta có thể giải quyết vấn đề này nếu nó liên tục thay đổi ...
Vereos

@Vereos Tôi muốn xóa bỏ sự mơ hồ của 'dòng mới hoặc không có dòng mới'.
Kendall Frey

3
Bạn không cần 2 trường hợp Console.Writevà bạn có thể sử dụng \rthay vì 5 \bgiây. Console.Write("\rTrue ");
Brian S

Tôi không nghĩ rằng nó đáp ứng các tiêu chí. Nó thực sự xuất ra Sai trước, sau đó được ghi đè bằng True sau.
microbian

1

Bạn có thể khái quát câu trả lời của RamonBoza để vẫn hoạt động nếu thiết bị xuất chuẩn được chuyển hướng đến một tệp.

Giả sử chương trình chạy dưới Mono trên Linux, với hội đồng được Mono.Posix.dlltải:

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

Tôi nghi ngờ điều này hoạt động trên Windows, nhưng có lẽ tương đương với isatty().


1

83 ... WIP

Tôi đã hy vọng nó sẽ hoạt động, nhưng dường như "Sai" không được thực hiện như tôi hy vọng trong trình biên dịch của mình

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

vô dụng

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

Điều này sẽ không hoạt động nếu thiết bị xuất chuẩn được chuyển hướng.
Kendall Frey

0

Không chắc chắn nếu điều này được chấp nhận.
Câu hỏi không nói gì về các tùy chọn trình biên dịch nên tôi giả sử tôi có thể thay đổi điểm vào của ứng dụng.
55 ký tự, nhiều hơn 3 câu trả lời được chấp nhận

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

Đầy

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

Chào mừng đến với cộng đồng!
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Cảm ơn. Đây là một trang web tuyệt vời !!!
George Vovos
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.