আপনার প্রোগ্রামটি রূপান্তরিত হয়েছে কিনা তা সনাক্ত করুন


16

কোনও প্রোগ্রাম লিখুন যা ত্রুটি ছাড়াই শেষ হয়।

যদি কোনও একক বাইট অন্য কোনও বাইট দ্বারা প্রতিস্থাপিত হয় তবে প্রোগ্রামটি আউটপুট করে

CORRUPTED
  • আপনার উত্স কোডটি কোনও ফাইল থেকে পড়বেন না
  • আপনার প্রোগ্রামটি অন্য কোনও আউটপুট উত্পাদন করা উচিত নয়

এটি তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর w

সম্পাদনা: "কর্টেড নয়" প্রয়োজনীয়তা সরানো হয়েছে


বিকিরণ-কঠোরকরণের অনুরূপ অনেকগুলি প্রশ্ন রয়েছে, তবে আমি এর মতো বেশিরভাগ মতো কোনও পাইনি found
FryAmTheEggman

7
অবতীর্ণদের কাছে: আমি সন্দেহ করি এটি সম্ভব (যদি খুব কঠিন হয়), যদি আপনি সঠিক ভাষা চয়ন করেন। অসম্ভব ব্যতীত অন্য কোনও সমস্যা আছে বলে মনে না করে প্রশ্নটি বন্ধ বা মুছবেন না or

7
কী পরিবর্তন মানে কি? অন্য একটি বাইট দ্বারা প্রতিস্থাপিত?
ডেনিস

4
@ ais523 এফডাব্লুআইডাব্লু আমি চ্যালেঞ্জটিকে হ্রাস করে বলেছি কারণ তাড়াহুড়ো করে লেখা হয়েছে বলে নয়, কারণ আমি মনে করি এটি খুব কঠিন।
ডেনিস

5
এটি কিছুই অস্পষ্ট নয়, তবে এটি আরও পরিষ্কার করা যেতে পারে । কোনও পূর্ণ প্রোগ্রামের প্রয়োজন হলে আপনি স্পষ্ট করতে পারেন , একটি উদাহরণ প্রোগ্রাম যুক্ত করুন এবং সমস্ত সম্ভাব্য পরিবর্তনগুলি চিত্রিত করুন, একক বাইট বিকল্পগুলি কীভাবে কোনও ইউটিএফ -8 এনকোডযুক্ত ফাইলকে প্রভাবিত করবে তা উল্লেখ করুন, একটি স্ক্রিপ্ট যুক্ত করুন যা সাবমিশনগুলি পরীক্ষার জন্য ব্যবহার করা যেতে পারে, উল্লেখ করুন প্রোগ্রামটি ইনপুট ইত্যাদি গ্রহণ করা উচিত নয়
ডেনিস

উত্তর:


30

একটি পিয়ার ট্রি , 76 বাইট

$@='NOT ';print"$@CORRUPTED"__DATA__ =®®”print"$@CORRUPTED"__DATA__ =®®”Ê®›~

এই প্রোগ্রামটিতে কয়েকটি বিপথগামী অক্টেট রয়েছে যা বৈধ ইউটিএফ -8 নয়। যেমনটি, এটি উইন্ডোজ -১২২২ এর মতো দেখানো হয়েছে। (ডিফল্টরূপে, যদি একটি পিয়ার ট্রি একটি স্ট্রিং আক্ষরিকরূপে অ-এসসিআইআই অক্টেট দেখতে পায় বা এর মতো এটির একটি অস্বচ্ছ বস্তু হিসাবে বিবেচনা করে এবং এর অক্ষর কোডটি কী তা সম্পর্কে সচেতন হওয়ার বাইরে এটি বোঝার চেষ্টা না করে; এই আচরণ হতে পারে একটি এনকোডিং ঘোষণার মাধ্যমে পরিবর্তন হয়েছে তবে প্রোগ্রামটির একটি নেই So সুতরাং প্রোগ্রামটি যৌক্তিকভাবে "অনির্ধারিত ASCII- সামঞ্জস্যপূর্ণ চরিত্র সেট" এ রয়েছে All সমস্ত নন-এএসসিআইআই অক্টেট যে কোনওভাবেই মন্তব্যে রয়েছে, তাই এটি সত্যিকার অর্থে কিছু আসে না))

ব্যাখ্যা

একটি পিয়ার ট্রি প্রোগ্রামটি চেকসাম করে, দীর্ঘতম সাবস্ট্রিংয়ের সন্ধান করে যা একটি সিআরসি -32 রয়েছে 00000000। (যদি কোনও টাই থাকে, তবে এটি প্রথমে অষ্টবীক্ষণিকভাবে চয়ন করে)) তারপরে প্রোগ্রামটি শুরু করার সময় এটি ঘোরানো হবে। পরিশেষে, প্রোগ্রামটি পার্লের প্রায়শই সুপারস্টার হিসাবে এমন একটি ভাষা হিসাবে ব্যাখ্যা করা হবে যা পাইথনের মতো একইভাবে কাজ করতে পার্লের কিছু সংজ্ঞায়িত কিছু জিনিস সংজ্ঞায়িত করেছে (এবং কয়েকটি ছোটখাট পরিবর্তন সহ, যেমন printএকটি পিয়ার ট্রিতে একটি চূড়ান্ত নিউলাইন প্রিন্ট করে তবে পার্লে নয়)। এই প্রক্রিয়াটি (এবং সামগ্রিকভাবে ভাষা) এবং সমস্যার জন্য ডিজাইন করা হয়েছিল ; এটি পূর্বের নয়, তবে এটি অবশ্যই পরবর্তী।

এই প্রোগ্রামে, আমাদের দুটি উল্লেখযোগ্য সাবস্ট্রিং রয়েছে যা CRC-32 থেকে 00000000; পুরো প্রোগ্রামটি করে এবং তাই print"$@CORRUPTED"__DATA__ =®®নিজেই করে (যা দুইবার প্রদর্শিত হয়)। এর মতো, যদি প্রোগ্রামটি নিরবচ্ছিন্ন থাকে তবে সেটি সেট $@হয়ে যাবে NOT এবং তারপরে এটি মুদ্রণ করবে CORRUPTED। প্রোগ্রামটি যদি দুর্নীতিগ্রস্থ হয়, তবে সামগ্রিকভাবে প্রোগ্রামটির সিআরসি -32 মিলতে ব্যর্থ হবে, তবে সংক্ষিপ্ত অংশগুলির মধ্যে একটি নিরবচ্ছিন্ন থাকবে। প্রোগ্রামটির শুরুতে যে কোনও একটি ঘোরানো হলে তা কেবল মুদ্রণ করবে CORRUPTED, যেমন $@নাল স্ট্রিং হবে।

স্ট্রিংটি একবার মুদ্রিত __DATA__হয়ে গেলে প্রোগ্রামটির বাকি অংশটি রোধ করতে ব্যবহৃত হয়। (এটি লেখার ক্ষেত্রে এটি আমার মনকে অতিক্রম করে __END__যা পরিবর্তে ব্যবহার করা যেতে পারে, যা পরিষ্কারভাবে দুটি বাইট সংরক্ষণ করতে পারে But তবে আমি এখন এই সংস্করণটি পোস্ট করতে পারি, কারণ আমি এটি যাচাই করতে অনেক সময় ব্যয় করেছি, এবং একটি পরিবর্তিত সংস্করণ হতে হবে) সিআরসি পরিবর্তনের কারণে পুনরায় যাচাই করা হয়েছে; এবং "পেডলোড" গল্ফ করার জন্য আমি এখনও প্রচুর পরিশ্রম করি নি, তাই আমি দেখতে চাই যে একই সাথে আমি যুক্ত করতে পারি এমন মন্তব্যে কারওরও আরও উন্নতি হয়েছে কিনা। নোট করুন যে #কোনও চরিত্রটিকে নতুন লাইনে রূপান্তরিত করা হয়েছে এমন পরিস্থিতিতে কাজ করে না))

আপনি হয়ত ভাবছেন যে আমি কীভাবে আমার কোডের সিআরসি -32 প্রথম স্থানে নিয়ন্ত্রণ করতে পারি। এটি সিআরসি -32 সংজ্ঞায়িত পদ্ধতিটির উপর ভিত্তি করে মোটামুটি সহজ গাণিতিক কৌশল: আপনি কোডটির সিআরসি -32 নেন, এটি সামান্য-এন্ডিয়ান ক্রমে লিখুন (সাধারণত বৌদ্ধ ক্রমের বিপরীত যা সাধারণত সিআরসি -32 গণনা দ্বারা ব্যবহৃত হয়) প্রোগ্রাম), এবং এক্সওআর সহ 9D 0A D9 6D। তারপরে আপনি এটি প্রোগ্রামে সংযোজন করুন এবং আপনার একটি সিআরসি -32-এর 0 সহ একটি প্রোগ্রাম থাকবে (সম্ভবত সহজ উদাহরণ হিসাবে নাল স্ট্রিংটিতে 0 এর একটি সিআরসি -32 রয়েছে, সুতরাং 0 9D 0A D9 6Dএর একটি সিআরসি -32ও রয়েছে ।)

প্রতিপাদন

একটি পিয়ার ট্রি বেশিরভাগ প্রকারের মিউটেশনগুলি পরিচালনা করতে পারে তবে আমি ধরে নিচ্ছি "পরিবর্তিত" অর্থ "একটি স্বেচ্ছাসেবীর সাথে প্রতিস্থাপন"। এটি তাত্ত্বিকভাবে সম্ভব (যদিও এই সংক্ষেপে কোনও প্রোগ্রামে সম্ভাবনা নেই) যে কোথাও একটি হ্যাশ সংঘর্ষ হতে পারে যা ভুল প্রোগ্রামের দিকে পরিচালিত করতে পারে, সুতরাং আমাকে ব্রুট ফোর্সের মাধ্যমে পরীক্ষা করে দেখতে হয়েছিল যে সমস্ত সম্ভাব্য অষ্টেটের বিকল্পটি প্রোগ্রামটি সঠিকভাবে কাজ করতে ছাড়বে। এখানে আমি যাচ্ছি যাচাই স্ক্রিপ্ট (পার্ল লিখিত):

use 5.010;
use IPC::Run qw/run/;
use warnings;
use strict;
undef $/;
$| = 1;
my $program = <>;
for my $x (0 .. (length $program - 1)) {
    for my $a (0 .. 255) {
        print "$x $a    \r";
        my $p = $program;
        substr $p, $x, 1, chr $a;
        $p eq $program and next;
        alarm 4;
        run [$^X, '-M5.010', 'apeartree.pl'], '<', \$p, '>', \my $out, '2>', \my $err;
        if ($out ne "CORRUPTED\n") {
            print "Failed mutating $x to $a\n";
            print "Output: {{{\n$out}}}\n";
            print "Errors: {{{\n$err}}}\n";
            exit;
        }
    }
}

say "All OK!    ";

একটি এন- বিট সিআরসি এন বিটসের চেয়ে বেশি দীর্ঘ না হওয়া কোনও একক ত্রুটি সনাক্ত করবে। প্রদত্ত ক্ষেত্রে হ্যাশের সংঘর্ষগুলি অসম্ভব, নিষ্ঠুর-বলের যাচাইকরণের প্রয়োজন নেই।
রেইনার পি।

@ রেনারপ .: আমি সচেতন যে একটি মিউটেশনটি মূলত 0 টি মিলের সিআরসি থাকা অংশগুলির জন্য সিআরসিটিকে রোধ করবে। তবে সম্ভাবনা আছে যে এটি কোডের একটি নতুন স্ট্রিং প্রবর্তন করতে পারে যার ০ টি সিআরসি রয়েছে; নিষ্ঠুর-বাধ্য করার উদ্দেশ্য হ'ল গ্যারান্টি দেওয়া যা ঘটেনি that
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.