Czy to się zatrzyma? (Rabusie)

46

To wątek złodziei. Wątek gliniarzy jest tutaj .

Twoim wyzwaniem jest złamanie poddaństwa gliniarza poprzez znalezienie danych, które go zatrzymają. Nie musisz dowiedzieć się, dlaczego, lub wszystkie dane, które powodują zatrzymanie, jeśli jest więcej niż jedno lub dane wejściowe, których zamierzał policjant, wystarczy jedno wejście.

Po złamaniu zgłoszenia opublikuj link do niego w komentarzu lub edytuj w poście gliniarza. Możesz także oflagować swoje zgłoszenie w celu zmodyfikowania go w poście gliniarza. Opublikuj również użyte dane wejściowe i link do postu gliniarza w odpowiedzi w tym wątku. Złodziej, który złamie najwięcej zgłoszeń, wygrywa.

Wiele osób może publikować pęknięcia w tym samym zgłoszeniu gliny, o ile są one różne.

(Jeśli SE przekonwertowało duplikat odpowiedzi na komentarz, możesz zagłosować na tę prośbę o funkcję )


Szukasz nieskradzionych zgłoszeń?

fetch("https://api.stackexchange.com/2.2/questions/135363/answers?order=desc&sort=activity&site=codegolf&filter=!.Fjs-H6J36vlFcdkRGfButLhYEngU&key=kAc8QIHB*IqJDUFcjEF1KA((&pagesize=100").then(x=>x.json()).then(data=>{var res = data.items.filter(i=>!i.body_markdown.toLowerCase().includes("cracked")).map(x=>{const matched = /^ ?##? ?(?:(?:(?:\[|<a href ?= ?".*?">)([^\]]+)(?:\]|<\/a>)(?:[\(\[][a-z0-9/:\.]+[\]\)])?)|([^, ]+)).*[^\d](\d+) ?\[?(?:(?:byte|block|codel)s?)(?:\](?:\(.+\))?)? ?(?:\(?(?!no[nt][ -]competing)\)?)?/gim.exec(x.body_markdown);if(!matched){return;}return {link: x.link, lang: matched[1] || matched[2], owner: x.owner}}).filter(Boolean).forEach(ans=>{var tr = document.createElement("tr");var add = (lang, link)=>{var td = document.createElement("td");var a = document.createElement("a");a.innerText = lang;a.href = link;td.appendChild(a);tr.appendChild(td);};add(ans.lang, ans.link);add(ans.owner.display_name, ans.owner.link);document.querySelector("tbody").appendChild(tr);});});
<html><body><h1>Uncracked Submissions</h1><table><thead><tr><th>Language</th><th>Author</th></tr></thead><tbody></tbody></table></body></html>

programmer5000
źródło
2
Czy różne oznaczają różne dane wejściowe (powiedzmy, że wszystkie dane kończące się na 2 łamią słupek gliniarza - czy różni ludzie mogą umieszczać różne liczby kończące się na 2?) Lub różne rodziny danych wejściowych, czy różne typy danych wejściowych?
Stephen
1
Wiele osób może publikować pęknięcia w tym samym zgłoszeniu gliny ... Proszę zdefiniować inaczej .
Dennis
@NoOneIsHere codegolf.meta.stackexchange.com/q/13437/58826
programmer5000

Odpowiedzi:

49

Malbolge, Klamka

Wypróbuj online (Dzięki Dennis !)

Dane wejściowe dla systemu Windows: F_⌠1234567890

Dane wejściowe w systemie Linux przy użyciu ISO-8559-1: F_ô1234567890

Sedno działania programu Malbolge polega na tym, że zależało ono od zachowania interpretera Malbolge, który powoduje nieskończoną pętlę, jeśli napotka dowolną instrukcję, która nie zawiera się w przedziale od 33 do 126. Program został skonstruowany w taki sposób, że dane wejściowe umożliwiają modyfikację pojedyncza instrukcja.

Zmodyfikowałem interpreter, aby zrzucił stan pamięci programu na początku wykonywania, a także wygenerował „znormalizowany” kod źródłowy, który ma postać listy kodów operacyjnych, które będą uruchamiane podczas wykonywania programu. Dzięki tym informacjom można (powoli) stwierdzić, że mimo że program pobierał 13 danych wejściowych, tylko 1 i 3 dane wejściowe miały znaczenie.

Przeglądając znormalizowany zrzut kodu i pamięci (i odrobinę pomocy debuggera) opracowałem:

a = op (wejście 1, 29524)

b = op (wejście 3, a)

c = op (486, b)

d = op (c, 37)

e = d / 4 + d% 3 * 3 ^ 9

e musi wynosić od 33 do 126

Gdzie opjest tak zwane tritwise „op”, które jest opisane w specyfikacji. Korzystając z tych informacji, możesz napisać prosty program, który iteruje możliwe dane wejściowe (od 0 do 255) i znajduje wszystkie rozwiązania spełniające powyższe kryteria. Znalazłem 2219 możliwych rozwiązań, z których niektóre prawdopodobnie nie będą działały (nie można wprowadzić wymaganych znaków). W szczególności powyższe dane wejściowe są oparte na rozwiązaniu:

(Input 1 = 70, Input 3 = 244)

KBRON111
źródło
Nie mam przedstawiciela, który skomentował post na glinie. Czy ktoś mógłby to dla mnie zrobić?
KBRON111
4
Witamy w PPCG! Dobra robota! Myślę, że dzięki temu crackowi wkrótce będziesz miał wystarczającą liczbę powtórzeń :)
Stephen
1
Skomentowałem przez. I tak, świetna robota; Spodziewałem się, że Malbolge przetrwa tydzień!
Veedrac
6
Dobra robota! TIO używa UTF-8, ale po zawinięciu go w Bash, twój crack może zostać zweryfikowany. tio.run/… Nawiasem mówiąc , nie potrzebujesz niczego F_ô.
Dennis
1
Teraz mogę znów spać
Juan Tonina
16

JavaScript (w przeglądarce)

document.all

Zaskakujące jest to fałsz

Edycja: dlaczego document.allfałsz ?

Juan Tonina
źródło
4
Nie wiem co powiedzieć.
Dennis
3
Aaa ... javascript, w którym wszystko jest dziwne
Juan Tonina
1
Tak! To jedyna poprawna odpowiedź tutaj!
tsh
13

JS (ES6), Juan Tonina

+0,-0

Trochę szukałem, Object.isżeby znaleźć. Zasadniczo, +0 === -0ponieważ ===sprawdza je jako liczby i 0jest skończone, ale Object.iswidzi +0i -0jako różne obiekty. Bardzo sprytny policjant :)

Wypróbuj online!

Stephen
źródło
Ninja go dostała, kiedy się logowałem. Strzelaj.
user3033745,
Cholera, rozwiązany szybciej niż czas spędzony na myśleniu o kodzie: D
Juan Tonina
11

Python, Siphor

class A:
    i = True
    def __eq__(self, a):
        self.i = not self.i
        return self.i

a = A()
f(a)

Po prostu redefiniujemy równość, aby zachowywać się dokładnie tak, jak jest to wymagane do zakończenia programu.

g. gniazdo
źródło
Choć przypuszczam, że mogło tak zdefiniowane __eq__, aby raise...
g.rocket
Już miałem się poddać, właśnie wracając 0: p
Jonathan Allan
@JonathanAllan Jak to działa?
g.rocket
1
Jestem pewien, że po prostu class A:__eq__=lambda s,o:0i f(A())działa.
Jonathan Allan
1
Ach tak, potrzebuję negacji> _ <
Jonathan Allan
8

PHP, Syzyf

(-0[0)> deal with it=1

Funkcja parse_str zmienia spacje i inne znaki na podkreślenia. Jeśli wstawisz [używany do ogranicznika Array bez zamykania, zmienia on znak podkreślenia, ale powoduje to, że nie tłumaczy następujących spacji (nie wiem dlaczego).

Wypróbuj online!

Vicente Gallur Valero
źródło
WTF ?! To szalone ...
Veedrac
7

JavaScript (Node.js), Adnan

[]i []wydaje się, że działa. Próbowałem kilka z nich w tym null, undefined, NaN...

[] >= [] && [] <= [] && [] != [] ocenia na prawdę.

Morał tej historii: JavaScript jest dziwny .

Wypróbuj online!

całkowicie ludzki
źródło
Tak, tablice to tylko obiekty.
programmer5000
Obiekty są rzutowane na ciągi dla tego rodzaju porównań.
Conor O'Brien
7

JavaScript (ES7), Arnauld

Standard

"8e7" jest rozwiązaniem

var crack_me = (x=0)=>{for(;~x/x.length**3!=-2962963;);}

var key = "8e7"

crack_me(key)
console.log("stopped :)")

Włamać się

Nie trzeba obliczać tej liczby, możemy ponownie zdefiniować lengthwłaściwość

Ustawia się ~x/x.length**3!=-2962963nafalse

var crack_me = (x=0)=>{for(;~x/x.length**3!=-2962963;);}

var key = {toString:()=>"2962962",length:"1"}

crack_me(key)
console.log("stopped :)")

Priorytet operatorów

~ bitowe nie jest pierwsze

** exponentiation druga

/ division trzeci

Евгений Новиков
źródło
6

Bash, Veedrac

LD_TRACE_LOADED_OBJECTS

Wypróbuj online!

Z strony ld.so(8)podręcznika:

LD_TRACE_LOADED_OBJECTS

Jeśli jest ustawiony (na dowolną wartość), powoduje, że program wyświetla listę jego dynamicznych zależności, tak jakby działał ldd(1), zamiast normalnie działać.

Syzyf
źródło
Myślałem, że to potrwa dłużej! Wspaniała robota.
Veedrac
1
@Veedrac: Wydaje mi się, że skoro podałeś bash, jest mało prawdopodobne, abyś znalazł statycznie link (np. Busybox?) /bin/yes, Ale jest to możliwe, w takim przypadku ta zmienna env zostanie zignorowana.
Peter Cordes
6

Mathematica, JungHwan Min

Unevaluated@Throw@"hammertime"

Nie ma pojęcia, czy jest to zamierzone rozwiązanie, ale przechodzi ono do wyrażenia, które nie jest oceniane, dopóki nie zostanie określone jako #wewnątrz funkcji, co spowoduje, że natychmiast powróci z funkcji bez dokonywania dalszej oceny. Możesz zobaczyć, że funkcja jest faktycznie wywoływana (zamiast po prostu zgłosić wyjątek przed nawet wywołaniem funkcji), zmieniając funkcję na:

#0[Print@"stop";#;$IterationLimit=∞]&

Które rzeczywiście wydrukują stopprzed zgłoszeniem błędu.

Martin Ender
źródło
Bingo! (Właściwie to chciałem Unevaluated[Abort[]], ale to samo.)
JungHwan Min
5

Retina , PunPun1000

11111

Wypróbuj online!

Każde wejście z ns, w 1 którym suma dzielników n + 1 jest równa n + 1, powinno działać.

Kritixi Lithos
źródło
Miło widzieć, że ktoś dostaje zamierzone rozwiązanie
PunPun1000,
5

Rubin

exit

bez nowej linii. 3.send('exit')na pewno nie jest równy 5, ale wykonuje Kernel#exit:

Inicjuje zakończenie skryptu Ruby, zgłaszając wyjątek SystemExit

Jest to możliwe, aby zadzwonić exitna 3 ponieważ :

Moduł jądra jest zawarty w klasie Object, więc jego metody są dostępne w każdym obiekcie Ruby [jako metody prywatne].

abort działa również:

Natychmiast zakończ działanie, wywołując Kernel.exit (false). Jeśli podano msg, jest ono zapisywane do STDERR przed zakończeniem.

Eric Duminil
źródło
5

JavaScript (Node.js) , programmer5000

Już pęknięty, ale mój jest nieco inny :) Nie mam wystarczającej liczby przedstawicieli, aby komentować w policji. Mogę również edytować, aby naprawić formatowanie, mój pierwszy post tutaj.

Głównie ustawiam __proto__równą funkcji, która rzuca. Zaczerpnięte z patrzenia na stronę Mozilli w poszukiwaniu proto. (Przepraszam, niski przedstawiciel, nie mogę opublikować linku).

x = {}
let No = function () { throw 'halted' }
x.__proto__ = new No()
f = x=>{while(x.__proto__);}

Wypróbuj online!

EDYCJA: Mam trochę przedstawicieli, więc oto link: Mozilla__proto__

Haumed Rahmani
źródło
Skomentowałem dla ciebie gliniarza.
Stephen
1
Dzięki! Również dziękuję wszystkim za wzloty, chyba mogę to teraz skomentować!
Haumed Rahmani
1
Witamy w PPCG: D
Conor O'Brien
5

R, Jarko Dubbeldam

function(x)if(is.list(x))return(1)

Przyłącz się po raz pierwszy, więc odrzuć błędy, które popełniłem w formacie.

Jestem pewien, że jest to poprawne. Tylko przepisanie is.list (), prawda?

Kryminalnie Wulgarne
źródło
Nawiasem mówiąc, nie mam przedstawiciela, który mógłby komentować oryginał, więc ręka byłaby mile widziana, gdyby była ważna.
CriminallyVulgar
Skomentowałem dla ciebie.
TheLethalCoder
Nie jest to zamierzone rozwiązanie, ale działa. Dobra robota.
JAD
5

JavaScript, programator 5000

Maksymalna długość łańcucha

Używa łańcucha o długości mniejszej niż to, co obsługuje Twój silnik. Podczas dodawania "h"do tego ciągu zgłaszany jest błąd. Wypróbuj online!

function getAlmostMaxLenStr() {
  var prevBases = [];
  var base = "a";
  try {
    while(true) {
      prevBases.push(base);
      base += base;
    }
  } catch(e) {}
  for (var i = prevBases.length-1; i>=0; --i) {
    try {
      base += prevBases[i];
    } catch (e) {}
  }
  return base;
}
f(getAlmostMaxLenStr());

Blok pochodzenia krzyżowego

Mocno zainspirowany odpowiedzią @ jadkik94 , ale działa wszędzie. Tworzy iframe krzyżowego pochodzenia, a następnie przekazuje .contentWindowwymieniony iframe. Nie udaje się to, gdy funkcja próbuje użyć wartości ze względu na bezpieczeństwo krzyżowe.

let f=x=>{
  try {
    console.log(x+"h"); // we don't want to lock up your browser, do we ;)
  } catch (e) { console.log("Halted!\n",e); }
}
let iframe=document.createElement("iframe");
const url = location.host.indexOf("google") === -1 ? "https://google.com" : "https://stackexchange.com";
iframe.src=url;
iframe.onload=a=>f(iframe.contentWindow);
document.body.appendChild(iframe);

Wartość pierwotna

Wariant .toString()odpowiedzi - to po prostu wykorzystuje toPrimitivezamiast tego. Zwraca obiekt jako prymitywną wartość, której JavaScript nie wie, jak sobie z tym poradzić (więc generuje błąd). Wypróbuj online!

f({
  [Symbol.toPrimitive](){return {}}
});
Birjolaxew
źródło
Dobra robota, ale wciąż nie jest to zamierzone rozwiązanie! Bardzo mądry!
programator5000
4

Node.js, Adnan

{}i {}lub dowolne 2 obiekty są dwoma wejściami. Nawet nie rozumiem, jak to działa.

Oto niesamowita logika porównywania obiektów JS:

console.log({} == {});
console.log({} === {});
console.log({} > {});
console.log({} < {});
console.log(!!{});

console.log({} >= {});
console.log({} <= {});

programmer5000
źródło
Tak, to było zamierzone rozwiązanie :)
Adnan
4

JavaScript (węzeł Babel) , Conor O'Brien

(Repost, przypadkowo umieszczony w glinach.) Nie wiem, co było zamierzone, ale pozytywne dziesiętne, które nie są ogromne, wydają się działać.

Wydaje mi się też, że nadal nie mogę komentować w glinach.

f(0.1)
console.log('done')

Wypróbuj online!

Haumed Rahmani
źródło
Zapomniałem też o tym, dobrze.
Conor O'Brien
4

JavaScript (NIE node.js) , programmer5000

Nie można tego dodać, ponieważ tworzy obiekt, który nie ma funkcji toString, ponieważ nowy Setnie wiąże się z prototypami z Object.

Wejście:

new Set()

Wypróbuj online!

Grant Davis
źródło
To prawdopodobnie było zamierzone rozwiązanie, odtąd będę to trzymał w głowie: P
Stephen
Przepraszam, że to nie działa dla mnie? Wypróbuj online!
Haumed Rahmani,
@HaumedRahmani dodał przycisk spróbuj online. Użyłem pająka, a nie babla.
Grant Davis,
Nie zamierzone rozwiązanie, ale dobra robota!
programista
4

Bash 4.2, Dennis

PATH=1

Wyraźnie nie jest to zamierzone rozwiązanie, ponieważ działa również na nowszą wersję bash.

Wypróbuj online.

Veedrac
źródło
4

Python 2, Foon

__import__("os")._exit(0)

Zasadniczo to, co jest napisane na puszce.

Wypróbuj online.

Veedrac
źródło
Co ciekawe, w TIO czas mi się wydłużył; pod Windows (konkretnie z Winpty Python inputbad.py i wklejaniem w linii), kończy się zgodnie z oczekiwaniami ... i tak, nic dziwnego, że mój schtict wykorzystał bit „wejście pod Pythonem 2 ewaluuje pod maską”
Foon
@ Foon Hmm, dla mnie działa dobrze w TIO. Zobacz link w odpowiedzi.
Veedrac
Dziwne ... Musiałem uderzyć w grę, a potem napisać na moim linku TIO i nie zdawałem sobie z tego sprawy
Foon,
Jestem prawie pewien, że to łamie każde zgłoszenie do Pythona ..
Enderland
@enderland Tylko jeśli ocenią twój wkład, czego większość z nich nie.
Veedrac
4

Python 3, Siphor

To było fajne. Musimy wykonać type(x) != strsprawdzenie, więc musimy kontrolować wartość zwracaną type(). Musimy przesłonić __class__atrybut i zastąpić go niestandardowym obiektem, który rozszerza się type, a __ne__metoda zastępowana jest metodą, która zawsze zwraca wartość false. To sprawia, że ​​przechodzi sprawdzanie typu, ale wyszukiwanie się nie powiedzie, ponieważ onie jest to str.

class m(type):
    def __ne__(a,b):
        return False
class c:pass
o=c()
o.__class__=m("",(c,),{})
f(o)
ebopalisesy
źródło
Witamy na stronie! :)
DJMcMayhem
4

C #, TheLethalCoder

System.Nullable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]

Lub jakakolwiek inna zerowalna klasa.

Luc
źródło
3

Siatkówka oka

Nowa linia, po której następuje utwór 1. Znalazłem to od razu.


1

Wypróbuj online

mbomb007
źródło
Ninja'd o minutę
Kritixi Lithos
@Cowsquack Pytanie mówi, że dozwolone są wielokrotne pęknięcia dla tego samego stanowiska gliniarza.
mbomb007
Wiedziałem, że powinienem usunąć
nowy wiersz
3

JS (ES6)

"   "

Każdy znak o kodzie mniejszym niż 10 powinien działać; Użyłem tabpowyższej postaci, którą SE zamienia na spacje.

Kudłaty
źródło
Ninja'd
programista
Przepraszam :( plus myślę, że potrzebujesz ciągłego cudzysłowu, aby był to ciąg
Stephen
@ programmer5000, więc widzę :(
Shaggy
Nie ma problemu, @StepHen; charakter gry. Zacytowałem cytaty, ale będę je edytować.
Kudłaty,
@Shaggy Nie wiem co to orzeczenie, ale f(<tab>)jest prawidłowa składnia (pusty wejście) i musielibyśmy rozróżniać f(1)i f("1")tak czy owak
Stephen
3

JavaScript (ES6), programmer5000

"\0"

Wypróbuj online!

Warunek był !x||x>="\n". Każdy pojedynczy znak w tabeli ASCII z kodem mniejszym niż \nbędzie działać.

Stephen
źródło
Tak, myślałem, że to było to, nie byłem pewien ...
tuskiomi
3

cQuents, Step Hen

Wszystko po czym następuje spacja i dodatnia liczba całkowita. Spacja oddziela dane wejściowe, a dodatkowe dane wejściowe stają się liczbą terminów na dane wyjściowe.

Wypróbuj online!

PurkkaKoodari
źródło
Właśnie miałem opublikować a 1! Ty ninja'd mnie: /
Pan Xcoder
@ Mr.Xcoder Napisałem to na telefonie komórkowym, mając nadzieję, że nikt mnie nie ninja: P
PurkkaKoodari
3

MATL , Luis Mendo (nie zamierzone rozwiązanie)

Puste wejście zatrzymuje program i generuje następujący błąd:

input: odczyt wprowadzania danych użytkownika nie powiódł się!

Wypróbuj online!

Pan Xcoder
źródło