멈출까요? (고무)


46

이것은 강도의 실입니다. 경찰의 실은 여기에 있습니다 .

당신의 도전은 경찰을 중단시키는 입력을 찾아 경찰의 제출을 ​​깨뜨리는 것입니다. 당신은 왜, 또는 하나 이상의 입력이 있거나 경찰이 의도 한 입력이 있으면 입력을 멈추게하는 모든 입력이 중지되는지 확인할 필요가 없습니다.

제출물에 금이 가면 의견에 해당 링크를 게시하거나 경찰의 게시물을 편집하십시오. 당신은 또한 경찰의 게시물에서 수정하기 위해 mod에 대한 제출을 플래그 할 수 있습니다. 또한이 스레드의 답변에 사용 된 입력과 경찰 게시물에 대한 링크를 게시하십시오. 가장 많이 제출 한 강도가 승리합니다.

여러 사람이 서로 다른 한 동일한 경찰 제출에 균열을 게시 할 수 있습니다.

(SE 코멘트에 중복 대답을 변환하는 경우에 투표 할 수 있습니다 이 기능 요청 )


크랙되지 않은 제출물을 찾고 계십니까?

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
다른 입력이 다른 입력을 의미합니까 (즉, 2로 끝나는 모든 입력이 경찰의 게시물을 크랙합니다-다른 사람들이 2로 끝나는 다른 번호를 게시 할 수 있습니까?) 또는 다른 입력 제품군 또는 다른 유형의 입력을 의미합니까?
Stephen

1
여러 사람이 같은 경찰의 제출에 균열을 게시 할 수 있습니다 ... 정의하십시오 다른 .
Dennis

답변:


49

Malbolge, 손잡이

온라인으로 사용해보십시오 ( Dennis 감사합니다 )

Windows 용 입력 : F_⌠1234567890

ISO-8559-1을 사용하는 Linux 기반 시스템에서 입력 : F_ô1234567890

Malbolge 프로그램이 작동하는 방식의 핵심은 Malbolge 인터프리터의 동작에 의존하여 33에서 126 사이의 명령어가 발생하면 무한 루프를 발생시키는 것입니다. 프로그램은 입력을 통해 사용자가 수정할 수 있도록 구성되었습니다 단일 지시.

나는 실행 초기에 프로그램 메모리 상태를 덤프하고 프로그램을 실행 하는 동안 실행될 op 코드 목록의 형태를 취하는 '정규화 된'소스 코드를 생성하도록 인터프리터를 수정했습니다 . 이 정보를 통해 프로그램이 13 개의 입력을 받았더라도 실제로는 1 차 및 3 차 입력 만 중요하다고 판단 할 수 있습니다.

정규화 된 코드와 메모리 덤프 (및 디버거 도움말 터치)를 통해 다음을 고안했습니다.

a = op (입력 1, 29524)

b = op (입력 3, a)

c = op (486, b)

d = op (c, 37)

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

e는 33에서 126 사이 여야합니다

op본 명세서에서 설명되는 소위 "tritwise"op "는 어디에 있습니까 ? 이 정보를 사용하여 가능한 입력 (0-255)을 반복하고 위의 기준에 맞는 모든 솔루션을 찾는 간단한 프로그램을 작성할 수 있습니다. 2219 가능한 솔루션을 찾았습니다. 일부 솔루션은 작동하지 않을 것입니다 (필수 문자를 입력 할 수 없음). 특히 위의 입력은 솔루션을 기반으로합니다.

(Input 1 = 70, Input 3 = 244)


경찰의 게시물에 금이 갔다고하는 담당자가 없습니다. 누군가 나를 위해 그렇게 할 수 있습니까?
KBRON111

4
PPCG에 오신 것을 환영합니다! 잘 했어! 나는이 균열로, 당신은 곧 충분한 담당자가있을 것이라고 생각합니다 :)
Stephen

1
나는 댓글을 달았습니다. 그렇습니다. 훌륭한 일입니다. 나는 Malbolge가 일주일 동안 지속될 것으로 기대하는 절반이었다!
Veedrac

6
잘 했어! TIO는 UTF-8을 사용하지만 Bash로 래핑하면 균열을 여전히 확인할 수 있습니다. tio.run/… 그런데 당신은 아무것도 필요하지 않은 것 같습니다 F_ô.
Dennis

1
이제 다시 잠을 잘 수 있습니다
Juan Tonina



11

파이썬, 사이퍼

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

a = A()
f(a)

우리는 평등을 재정 의하여 프로그램을 종료하는 데 필요한대로 정확하게 작동합니다.


난 그냥 정의한 수도있을 것 같군요 만 __eq__raise...
g.rocket

나는 단지 돌아 오는 것으로 제출하려고했다 0: p
Jonathan Allan

@JonathanAllan 어떻게 작동합니까?
g.rocket

1
확신 단지 class A:__eq__=lambda s,o:0f(A())작업을 수행합니다.
Jonathan Allan

1
아 그래, 부정이 필요해> _ <
Jonathan Allan



7

자바 스크립트 (Node.js), Adnan

[][]작업에 보인다. 내가 포함한 그들의 무리를 시도 null, undefined, NaN...

[] >= [] && [] <= [] && [] != [] true로 평가됩니다.

이야기의 교훈 : JavaScript는 이상 합니다.

온라인으로 사용해보십시오!


그렇습니다. 배열은 단지 객체입니다.
programmer5000

그리고 이러한 유형의 비교를 위해 객체가 문자열로 캐스트됩니다.
코너 오브라이언

7

자바 스크립트 (ES7), Arnauld

표준

"8e7" 해결책이다

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

var key = "8e7"

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

파헤 치다, 난도질하다

이 수를 계산할 필요가 없으며 length속성을 재정의 할 수 있습니다

이 세트 ~x/x.length**3!=-2962963false

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

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

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

운영자 우선 순위

~ 비트 단위 는 처음이 아닙니다

** exponentiation 둘째

/ division 제삼


6

배쉬, Veedrac

LD_TRACE_LOADED_OBJECTS

온라인으로 사용해보십시오!

로부터 ld.so(8)맨 :

LD_TRACE_LOADED_OBJECTS

(임의의 값으로) 설정하면 프로그램이 ldd(1)정상적으로 실행되는 대신에 의해 실행되는 것처럼 동적 종속성을 나열 합니다.


나는 이것이 더 오래 지속될 것이라고 생각했다! 잘했습니다.
Veedrac

1
@ Veedrac : bash를 지정했기 때문에 정적으로 링크 된 (예 : busybox?)를 찾을 가능성은 /bin/yes없지만 가능하면이 env var가 무시됩니다.
Peter Cordes

6

수학, 정환 민

Unevaluated@Throw@"hammertime"

이것이 의도 한 솔루션인지 여부는 알 수 없지만 #함수 내부 에서 참조 될 때까지 평가되지 않는 표현식을 전달 하므로 추가 평가를 수행하지 않고 함수에서 즉시 반환됩니다. 함수를 다음과 같이 변경하여 함수가 실제로 호출되기도합니다 (함수를 호출하기 전에 예외를 던지는 대신).

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

실제로 stop오류를 발생 시키기 전에를 인쇄합니다 .


빙고! (실제로 Unevaluated[Abort[]]갔지만 같은 것입니다.)
JungHwan Min


5

루비

exit

개행없이. 3.send('exit')반드시와 같지 5않지만 다음을 실행합니다 Kernel#exit.

SystemExit 예외를 발생시켜 Ruby 스크립트 종료를 시작합니다.

다음 exit과 같은 3 이유로 전화를 걸 수 있습니다 .

커널 모듈은 Object 클래스에 포함되어 있으므로 모든 Ruby 객체에서 [비공개 메소드] 메소드를 사용할 수 있습니다.

abort 또한 작동합니다 :

Kernel.exit (false)를 호출하여 실행을 즉시 종료합니다. msg가 제공되면 종료하기 전에 STDERR에 기록됩니다.


5

자바 스크립트 (Node.js) , programmer5000

벌써 금이 났지만 광산은 약간 다릅니다 :) 경찰에 대해 언급 할 충분한 담당자가 없습니다. 또한 첫 번째 게시물 인 서식을 수정하기 위해 자유롭게 편집하십시오.

주로 나는 __proto__던지는 함수와 동일하게 설정했습니다 . 프로토 타입에 대한 모질라 페이지를 살펴본 것입니다. 죄송합니다. 담당자는 링크를 게시 할 수 없습니다.

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

온라인으로 사용해보십시오!

편집 : 담당자가 있으므로 링크는 다음과 같습니다. Mozilla__proto__


경찰에 대해 언급 했어
Stephen

1
감사! 또한 ups에 대한 모든 감사합니다, 내가 지금 코멘트 할 수 있다고 생각합니다!
Haumed Rahmani

1
PPCG에 오신 것을 환영합니다 : D
Conor O'Brien


5

R, Jarko Dubbeldam

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

처음으로 무언가를 기증하기 때문에 내가 만든 형식의 실수를 외우십시오.

이것이 유효하다는 것을 확신하십시오. is.list ()를 다시 래핑하는 것입니다.


덧붙여서, 나는 원본에 대해 언급 할 담당자가 없으므로 손이 유효하다면 감사 할 것입니다.
CriminallyVulgar

당신을 위해 댓글을 달았습니다.
TheLethalCoder

의도 된 해결책은 아니지만 작동합니다. 잘 했어.
JAD

5

자바 스크립트, 프로그래머 5000

최대 문자열 길이

엔진이 지원하는 것보다 길이가 1보다 작은 문자열을 사용합니다. "h"이 문자열에 추가 하면 오류가 발생합니다. 온라인으로 사용해보십시오!

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

교차 출처 블록

@ jadkik94의 답변에서 크게 영감을 얻었 지만 모든 곳에서 작동합니다. 교차 출처 iframe을 생성 한 다음 해당 iframe을 전달합니다 .contentWindow. 교차 출처 안전으로 인해 함수가 값을 사용하려고하면 실패합니다.

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

원시 가치

다양한 .toString()답변- toPrimitive대신 사용 합니다. Javascript는 처리 방법을 모르는 기본 값으로 객체를 반환하므로 오류가 발생합니다. 온라인으로 사용해보십시오!

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

좋은 일이지만 여전히 의도 된 해결책은 아닙니다! 매우 영리한!
programmer5000

4

Node.js, Adnan

{}{}또는 2 개의 오브젝트가 입력된다. 나는 이것이 어떻게 작동하는지 이해조차하지 못한다.

다음은 JS의 놀라운 객체 비교 논리입니다.

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

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


그렇습니다, 그것은 의도 된 해결책이었습니다 :)
Adnan


4

자바 스크립트 (NOT node.js) , programmer5000

Setfrom의 고유 프로토 타입이 아니기 때문에 toString이없는 오브젝트를 작성하므로 추가 할 수 없습니다 Object.

입력:

new Set()

온라인으로 사용해보십시오!


이것은 아마도 의도 된 해결책 일 것입니다. 지금부터 머리 가방에
Stephen

죄송하지만 이것이 작동하지 않는 것 같습니다. 온라인으로 사용해보십시오!
Haumed Rahmani 1

@HaumedRahmani는 온라인 시도 버튼을 추가했습니다. 나는 바벨이 아닌 거미 원숭이를 사용했습니다.
Grant Davis

의도 된 해결책은 아니지만 좋은 일입니다!
programmer5000



4

파이썬 2,

__import__("os")._exit(0)

기본적으로 주석에 표시되는 내용.

온라인으로 사용해보십시오.


흥미롭게도 TIO에서는 시간이 초과되었습니다. (특히 winpty 파이썬 inputbad.py와 라인에 붙여 넣기와) Windows에서, 그것은 원하는 ... 그리고 그래, 당연한 내 schtict이 조금 "파이썬이 수행 후드 평가에서 입력"이용 된대로 종료를 수행합니다

@ Foon Hmm, TIO에서 잘 작동합니다. 답변 링크를 참조하십시오.
Veedrac

이상한 ... 나는 TIO 링크에서 플레이를 한 다음 입력을 입력하고 그것을 인식하지 못했을 것입니다.
Foon

나는 이것이 모든 파이썬 제출을
깨뜨릴 것이라고 확신한다

@enderland 그들이 당신의 입력을 평가할 때만, 대부분은 그렇지 않습니다.
Veedrac


4

파이썬 3, 사이퍼

재미있었습니다. 우리는해야 type(x) != str우리의 반환 값을 제어 할 필요가 있으므로, 체크 패스를 type(). __class__속성 을 재정의하고 확장하는 사용자 정의 객체로 확장해야합니다.이 객체 type__ne__메소드를 항상 false를 반환하는 것으로 대체합니다. 이렇게하면 형식 검사를 통과하지만 ostr이 아니기 때문에 검색이 실패 합니다.

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

사이트에 오신 것을 환영합니다! :)
DJMcMayhem

4

C #, TheLethalCoder

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

또는 다른 nullable 클래스입니다.



3

JS (ES6)

"   "

코드가 10보다 작은 문자는 작동해야합니다. tabSE가 공백으로 변환하는 위 의 문자를 사용했습니다 .



죄송합니다 :( 플러스 문자열 주위에 따옴표가 필요하다고 생각합니다.
Stephen

@ programmer5000, 그래서 나는 본다 :(
Shaggy

문제 없습니다, @StepHen; 게임의 본질. 따옴표를 암시 적으로 암시했지만 수정하겠습니다.
Shaggy

@Shaggy 나는 판결은 무엇인가,하지만 몰라 f(<tab>)유효한 구문 (빈 입력을)이며, 우리는 구별해야 할 것 f(1)그리고 f("1")어쨌든
스티븐



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.