Será que vai parar? (Ladrões)


46

Este é o fio dos ladrões. A discussão dos policiais está aqui .

Seu desafio é quebrar a submissão de um policial, encontrando uma entrada que a interrompa. Você não precisa descobrir o porquê, ou todas as entradas que fazem com que pare se houver mais de uma, ou a entrada que o policial pretendeu, apenas uma entrada fará.

Depois de quebrar uma submissão, publique um link para ela em um comentário ou edite para a publicação da polícia. Você também pode sinalizar seu envio para um mod para editá-lo na postagem do policial. Além disso, poste a entrada usada e um link para a postagem do policial em uma resposta neste tópico. O assaltante que conseguir mais envios vence.

Várias pessoas podem postar rachaduras no mesmo envio de policial, desde que sejam diferentes.

(Se o SE converteu sua resposta duplicada em um comentário, você pode votar nesta solicitação de recurso )


Procurando envios sem rachaduras?

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>


2
Diferente significa entradas diferentes (por exemplo, todas as entradas terminadas em 2 quebram a postagem do policial - você pode pessoas diferentes postar números diferentes terminando em 2?) Ou famílias diferentes de entradas ou tipos diferentes de entradas?
Stephen

1
Várias pessoas podem postar rachaduras no mesmo envio de policial ... Defina diferente .
Dennis19 /

Respostas:


49

Malbolge, Maçaneta

Experimente online (Obrigado Dennis !)

Entrada para Windows: F_⌠1234567890

Entrada no sistema baseado em Linux usando ISO-8559-1: F_ô1234567890

O coração de como o programa Malbolge funcionou é que ele dependia de um comportamento do intérprete Malbolge que causa um loop infinito se encontrar alguma instrução que não esteja entre 33 e 126. O programa foi construído de forma que sua entrada permita modificar uma única instrução.

Modifiquei o intérprete para despejar o estado da memória do programa no início da execução e também produzir código fonte 'normalizado', que assume a forma de uma lista de códigos op que serão executados durante a execução do programa. Com essas informações, você pode (lentamente) determinar que, embora o programa tenha recebido 13 entradas, apenas a 1ª e a 3ª entradas realmente são importantes.

Examinando o código normalizado e o despejo de memória (e um toque na ajuda do depurador), criei o seguinte:

a = op (entrada 1, 29524)

b = op (entrada 3, a)

c = op (486, b)

d = op (c, 37)

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

e deve estar entre 33 e 126

Onde opestá o chamado tritwise "op" descrito na especificação. Usando essas informações, você pode escrever um programa simples que repete as entradas possíveis (0 a 255) e encontra todas as soluções que atendem aos critérios acima. Eu encontrei 2219 soluções possíveis, algumas das quais provavelmente não serão soluções funcionais (você não pode inserir os caracteres necessários). Especificamente, as entradas acima são baseadas na solução:

(Input 1 = 70, Input 3 = 244)


Não tenho o representante para comentar rachou a publicação da polícia. Alguém poderia fazer isso por mim?
KBRON111

4
Bem-vindo ao PPCG! Bom trabalho! Eu acho que com esse tipo de crack, em breve você vai ter rep suficiente :)
Stephen

1
Eu comentei. E sim, excelente trabalho; Eu meio que esperava que Malbolge durasse a semana!
Veedrac

6
Bom trabalho! O TIO usa UTF-8, mas envolvendo-o no Bash, seu crack ainda pode ser verificado. tio.run/… Você parece não precisar de nada F_ô, a propósito.
Dennis

1
Agora posso dormir novamente
Juan Tonina


13

JS (ES6), Juan Tonina

+0,-0

Demorou um pouco Object.ispara procurar. Basicamente, +0 === -0uma vez que os ===verifica como números e 0é finito, mas Object.is+0e -0como objetos diferentes. Policial muito esperto :)

Experimente online!


Ninja entendeu enquanto eu estava logando. Atire.
user3033745

Porra, resolvi mais rápido do que o tempo que passei pensando no código: 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)

Apenas redefinimos a igualdade para se comportar exatamente como necessário para que o programa seja encerrado.


Embora eu suponho que eu poderia ter definido __eq__a raise...
g.rocket

Eu estava prestes a enviar apenas retornando 0: p
Jonathan Allan

@JonathanAllan Como isso funciona?
g.rocket

1
Com certeza apenas class A:__eq__=lambda s,o:0e f(A())faz o trabalho.
Jonathan Allan

1
Ah sim, preciso da negação> _ <
Jonathan Allan


8

PHP, Sísifo

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

A função parse_str altera os espaços e outros caracteres para sublinhados. Se você colocar um [usado para delimitador de matriz sem fechar, ele será alterado para um sublinhado, mas terá o efeito de não converter os seguintes espaços (não sei por que).

Experimente online!


WTF ?! Isso é loucura ...
Veedrac

7

JavaScript (Node.js), Adnan

[]e []parece funcionar. Eu tentei um monte deles null, incluindo undefined, NaN...

[] >= [] && [] <= [] && [] != [] avalia como verdadeiro.

Moral da história: o JavaScript é estranho .

Experimente online!


Sim, matrizes são apenas objetos.
programmer5000

E os objetos são convertidos em cadeias para esses tipos de comparações.
Conor O'Brien

7

JavaScript (ES7), Arnauld

Padrão

"8e7" é solução

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

var key = "8e7"

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

Hack

Não há necessidade de calcular esse número, podemos redefinir a lengthpropriedade

Isso define ~x/x.length**3!=-2962963comofalse

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

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

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

Prioridade dos operadores

~ bit a bit não é o primeiro

** exponentiation segundo

/ division terceiro


6

Bash, Veedrac

LD_TRACE_LOADED_OBJECTS

Experimente online!

Na página de ld.so(8)manual:

LD_TRACE_LOADED_OBJECTS

Se definido (com qualquer valor), faz com que o programa liste suas dependências dinâmicas, como se executadas ldd(1), em vez de executadas normalmente.


Eu pensei que isso iria durar mais tempo! Excelente trabalho.
Veedrac

1
@Veedrac: Eu acho que desde que você especificou o bash, é improvável que você encontre um link estaticamente (por exemplo, busybox?) /bin/yes, Mas isso é possível, nesse caso, esse env var seria ignorado.
Peter Cordes

6

Jung , Mathematica, Jung

Unevaluated@Throw@"hammertime"

Não há pista se essa é a solução pretendida, mas ela passa em uma expressão que não é avaliada até ser referenciada como #dentro da função, o que fará com que ele retorne da função imediatamente sem fazer nenhuma avaliação adicional. Você pode ver que a função é realmente chamada (em vez de apenas lançar a exceção antes mesmo de invocar a função) alterando a função para:

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

O que realmente imprimirá o stopantes de gerar o erro.


Bingo! (Eu estava realmente indo para Unevaluated[Abort[]], mas mesma coisa.)
JungHwan Min


5

Rubi

exit

sem nova linha. 3.send('exit')certamente não é igual a 5, mas executa Kernel#exit:

Inicia o encerramento do script Ruby, levantando a exceção SystemExit

É possível chamar exitem 3 causa :

O módulo Kernel é incluído pela classe Object, portanto seus métodos estão disponíveis em todos os objetos Ruby [como métodos privados].

abort também funciona:

Encerre a execução imediatamente, efetivamente, chamando Kernel.exit (false). Se a mensagem for fornecida, ela será gravada no STDERR antes de terminar.


5

JavaScript (Node.js) , programador5000

Já estou rachado, mas o meu é um pouco diferente :) Não tenha representante suficiente para comentar na polícia. Também fique à vontade para editar para corrigir a formatação, meu primeiro post aqui.

Principalmente eu defino __proto__igual a uma função que lança. Retirado de olhar para a página Mozilla para proto. (Desculpe, representante baixo, não é possível postar um link.)

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

Experimente online!

EDIT: Tenho algum representante, então aqui está o link: Mozilla__proto__


Eu comentei o policial para você.
24417 Stephen

1
Obrigado! Também obrigado a todos pelos altos, acho que posso comentar agora!
Haumed Rahmani

1
Bem-vindo ao PPCG: D
Conor O'Brien


5

Jarko Dubbeldam R

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

Contribuindo pela primeira vez com algo, lembre-se de quaisquer erros que cometi no formato.

Certamente isso é válido. Apenas uma reorganização de is.list (), certo?


Aliás, eu não tenho o representante para comentar sobre o original, para que uma mão seja apreciada se for válida.
CriminallyVulgar

Comentou para você.
TheLethalCoder

Não é a solução pretendida, mas funciona. Bom trabalho.
JAD 27/07

5

Javascript, programador5000

Comprimento máximo da string

Usa uma string com um comprimento menor que o suportado pelo mecanismo. Ao adicionar "h"a essa cadeia, um erro é gerado. Experimente 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());

Bloco de origem cruzada

Fortemente inspirado na resposta de @ jadkik94 , mas funciona em qualquer lugar. Cria um iframe de origem cruzada e passa o .contentWindowiframe do mesmo. Isso falha quando a função tenta usar o valor devido à segurança de origem cruzada.

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

Valor primitivo

Variante das .toString()respostas - isso apenas usa toPrimitive. Ele retorna um objeto como o valor primitivo, que o Javascript não sabe como manipular (para gerar um erro). Experimente online!

f({
  [Symbol.toPrimitive](){return {}}
});

Bom trabalho, mas ainda não a solução pretendida! Muito esperto!
programmer5000

4

Node.js, Adnan

{}e {}ou quaisquer 2 objetos são as duas entradas. Eu nem entendo como isso funciona.

Aqui está a incrível lógica de comparação de objetos de JS:

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

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


Sim, que era a solução destinada :)
Adnan


4

Javascript (NOT node.js) , programmer5000

Isso não pode ser adicionado porque cria um objeto que não possui toString porque um novo Setnão possui protótipos inerentes de Object.

entrada:

new Set()

Experimente online!


Esta foi provavelmente a solução destina-se, eu vou manter isso no saco da minha cabeça a partir de agora: P
Stephen

Desculpe, isso não parece funcionar para mim? Experimente online!
Haumed Rahmani

@HaumedRahmani adicionou um botão try online. Eu usei macaco-aranha, não babel.
Grant Davis

Não é a solução pretendida, mas bom trabalho!
programmer5000



4

Python 2, Foon

__import__("os")._exit(0)

O que diz na lata, basicamente.

Experimente online.


Curiosamente, no TIO isso acaba com o tempo; no Windows (especificamente com winpty python inputbad.py e colando na linha), ele sai conforme o desejado ... e sim, não é de surpreender que meu schtict estivesse explorando o bit "entrada sob Python 2 faz avaliação sob o capô"
Foon

@Foon Hmm, está funcionando bem no TIO para mim. Veja o link na resposta.
Veedrac

Estranho ... Eu devo ter batido o jogo e, em seguida, digitado entrada no meu link TIO e não percebeu que
Foon

Eu tenho certeza que isso rachaduras cada submissão python ..
enderland

@enderland Somente se eles avaliarem sua opinião, o que a maioria deles não faz.
Veedrac


4

Python 3, Syphor

Isso foi divertido. Precisamos fazer a type(x) != strverificação passar, por isso precisamos controlar o valor de retorno de type(). Temos que substituir o __class__atributo e substituí-lo por um objeto personalizado, que se estende type, que __ne__substitui o método por um que sempre retorna falso. Isso faz com que seja aprovada na verificação de tipo, mas a pesquisa falhará porque onão é um str.

class m(type):
    def __ne__(a,b):
        return False
class c:pass
o=c()
o.__class__=m("",(c,),{})
f(o)

Bem vindo ao site! :)
DJMcMayhem

4

C #, TheLethalCoder

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

Ou qualquer outra classe anulável.



3

JS (ES6)

"   "

Qualquer caractere com um código menor que 10 deve funcionar; Eu usei um tabpersonagem acima, que SE converte em espaços.



Desculpe :( mais eu acho que você precisa de aspas em torno dele para que seja uma string
Stephen

@ programmer5000, então eu vejo :(
Shaggy

Não tem problema, @StepHen; natureza do jogo. Tomei as aspas para ser implícita, mas eu vou editá-las no.
Shaggy

@Shaggy Eu não sei o que a decisão é, mas f(<tab>)é válido sintaxe (entrada vazia) e nós teríamos que diferenciar f(1)e f("1")de qualquer maneira
Stephen



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.