숨겨진 반전 (Cops 'Thread)


35

이것은 강도의 실이 여기 에서 찾을 수 있는 퍼즐 입니다.

당신의 작업은 두 개의 프로그램 (또는 함수)을 작성하여 서로의 아나그램 이며 하나 는 다른 것의 왼쪽 을 수행합니다 . 이러한 프로그램은 원하는만큼 정수 또는 복소수를 받아들이고 출력 할 수 있습니다 . 숫자를 문자 포인트 또는 다른 합리적인 수단으로 선택하면 답에 그렇게하고 있음을 표시해야합니다. 함수의 도메인을 제한하기로 선택한 경우 답변에 제한된 도메인을 표시해야합니다.

그런 다음 강도를 찾기 위해 왼쪽 역을 숨기고 답의 형태로 첫 번째 프로그램을 제시합니다.

표시된 프로그램은 주입 기능을 구현해야합니다 (그렇지 않으면 숨겨진 응답이 존재하지 않습니다).

일주일 동안 답이 깨지지 않으면 숨겨진 답을 밝히고 안전하다고 표시 할 수 있습니다 . 안전한 답변은 강도에 의해 금이 갈 수 없으며 무기한 금이 간 것입니다.

목표는 가장 짧은 크랙되지 않은 답변을 바이트 단위로 만드는 것입니다.

입력에 하나를 추가하는 다음 파이썬 프로그램을 보여줄 수 있습니다.

lambda x:~-x

해결책은 다음과 같습니다.

lambda x:-~x

입력에서 하나를 뺍니다.


허수 / 복소수를 가질 수 있습니까?
Stewie Griffin

@stewie 당신이 그렇게 표시한다면
Wheat Wizard

1
분석은 문자를 바꾸거나 바이트를 바꾸는 것으로 정의됩니까 (1 바이트 문자 집합을 사용하지 않는 언어)?

1. " 그러면 프로그램 중 하나를 발표 할 것"은 어떤 것을 제시 할 것인지 선택할 수있는 것처럼 보이지만 문장은 " 왼쪽 역으로 숨겨져 있습니다 " 라는 문장을 계속합니다 . 이는 특정한 것을 제시해야 함을 의미합니다. 무엇 이니? 2. 질문은 구체적으로 " 프로그램 "을 나타내며 기능을 허용하지 않는 것으로 보이지만 예제는 프로그램이 아니라 기능입니다. 무엇 이니?
피터 테일러

대문자 사용이 중요합니까?
Kritixi Lithos

답변:


12

파이썬 3, 80 바이트 ( 크랙 )

bhmq = int(input())
print(bhmq ** 2)
(1 or [(sqrt),(specification+of*integerr)])

도메인 : 양의 정수 함수는 단지 숫자의 제곱입니다. 역함수뿐만 아니라 stdin에 입력, stdout에 출력. 파이썬은 여기에서 세 번째 줄을 무시합니다. 문법적으로 유효하고 1은 이미 진실한 값이기 때문에 파이썬은 '또는'의 올바른 부분이 잘 정의되어 있는지조차 보지 못합니다.

강도는 0이 아닌 모든 제곱에서 부동 소수점없이 정수 값을 인쇄하여 올바르게 작동하는 sqrt 함수를 작성해야합니다 (따라서 입력 '4'출력은 '2.0'이 아닌 '2'또는 '2 \ n'이어야 함) 또는 '2.0 \ n').


1
난이게 좋아.
밀 마법사

3
ppcg에 오신 것을 환영합니다! 좋은 첫 포스트!
Rɪᴋᴇʀ

1
그 균열에 대해 신경 쓰지 마라. 그래도 질문은 여전히 ​​유효합니다.
orlp

1
도전 규칙에 따라이 제한을 적용 할 수 있다면 '아니요'라고 말하고 싶습니다.
Wolfram


11

파이썬 3, 46 바이트, 크랙

lambda x:x*(1999888577766665//844333333222200)

입력을 두 배로합니다.


3
경찰과 강도에서 '파이썬'은 어떻게 작동합니까? 답변을 공격 할 임의의 버전을 선택할 수 있습니까?
orlp

아, 이것은 구체적 으로 파이썬 3 입니다. 죄송합니다. /플로트 분할도 마찬가지 입니다.
Lynn

3
글쎄, 당신은이 도전이 내 시간 가치가 없다는 것을 증명했습니다. 계속합니다.
mbomb007


11

금이 간 7 , 9 바이트

이 프로그램은 인쇄 할 수없는 문자로 가득 차 있으므로 16 진 덤프가 있습니다.

00000000: 2573 dc01 7e13 dcb6 1f                   %s..~....

참고 : 음수를 입력 할 수없는 숫자 입력 루틴을 사용하므로이 제출은 음이 아닌 정수로만 제한됩니다.

문제에 대한 한 가지 문제 는 코드에 대한 설명을 작성하지 않기 때문입니다. 반면에, 이것은 내가 여기서 문제에 갈 필요가 없다는 것을 의미합니다.

특히 압축 표기법으로는 읽기가 어렵 기 때문에 언어로 7을 선택했으며 8 비트 청크로 작성된 프로그램을 이동하는 데 어려움을 겪어야하는 사람이 왜 인지 모르겠습니다 . 3 비트 인코딩 행운을 빕니다!

설명

이제 프로그램이 깨졌습니다 (불행히도 무자비한 힘으로;이 짧은 해결책에서는 항상 위험합니다). 내가 무엇을 얻고 있는지 설명 할 수도 있습니다. 이것은 실제로 프로그램을 읽음으로써 상당히 해결할 수있었습니다. 나는 그것을 훨씬 더 어렵게 만들 수 있었지만, 무차별 대입 균열이있을 때 나쁜 생각처럼 느껴졌습니다.

보다 자연스러운 인코딩으로 프로그램을 표현하는 것으로 시작하겠습니다. ; 평소와 같이, 굵은 숫자는 (프로그램에서 표현할 수있는 모든있는 즉시 실행 명령을 표시 6하고 7있지만 25, unbolded 번호가 탈출 등가물 (대표하지 않습니다) 05원래 프로그램에서 표현할 수있는 모두를, 메모를 그것은 0탈출 한 6것이고 1탈출 한 것입니다 7) :

112 7 1 7 34,002 77 023 67 13303

그것은 기본적으로 원래 스택을 나타냅니다 단지 리터럴 있다고 7 프로그램 소스 평균에서 사용할 수있는 명령 세트는 (아무 것도 그냥 탈출 명령을 수행 할 수 없다 67). 따라서 프로그램이 가장 먼저 할 일은 많은 것들을 스택에 밀어 넣는 것입니다. 다음은 프로그램 실행 후 스택이 어떻게 보이는지 보여줍니다 ( |7과 같이 스택 요소를 분리 함).

772 | 7 | 34662 | 023 | 73363

그런 다음 최종 스택 요소가 복사되어 실행되는 코드가됩니다 (스택에 남아 있음). 그것이 일어날 때, 이것은 코드의 유일한 부분입니다; 다른 모든 것은 단지 데이터입니다. 번역 내용은 다음과 같습니다.

73363 
7       빈 요소를 스택에 밀어 넣습니다.
  3      상단 스택 요소를 출력하고 아래에있는 요소를 버립니다.
 73      조합 된 효과 : 상단 스택 요소를 버립니다.
   3     상단 스택 요소를 버리고 아래에 요소를 버립니다.
    6    상단 스택 요소를 탈출 한 다음 3 아래 요소에 추가하십시오   . 상단 스택 요소를 출력하고 아래
     요소를 삭제하십시오.

다시 말해, 이것은 대부분 많은 I / O 명령어 일뿐입니다. 이것을 자세히 분석해 봅시다 :

  • 7373363스택 위에 있는 것을 버립니다 .
  • 3를 출력 023하고를 삭제합니다 34662. 따라서 34662주석이 다른 버전의 프로그램에 필요한 바이트를 저장하는 데 사용 된 주석 임을 알 수 있습니다 . 023출력시 수행 할 작업 은 I / O 형식 0 (정수)을 선택한 다음 23구현에 정수를 입력하도록 요청하는 지시문입니다 (7에서 입력을 요청하는 특정 코드를 출력하여 입력합니다). 입력은 아래에 스택 요소를 복사하여 수행됩니다. 예를 들어 입력 정수가 10이면 다음 스택 요소 (현재 7)가됩니다 7777777777. 따라서 우리는 사용자의 입력을 10 진수로 받아들이지 만 단항으로 저장됩니다.
  • 6상단 스택 요소를 이스케이프 처리합니다 (각 인스턴스를 변경 7합니다 1; 이것은 전체로 구성된 문자열 7이 이스케이프되는 방식입니다 772). 따라서 우리의 데이터는 이제 다음과 같습니다 7721111111111.
  • 마지막으로, 3해당 스택 요소를 출력하고 기본 초기 스택의 일부인 빈 스택 요소를 팝합니다. 그 값의 개수 고려하여 산출된다 1(S) 및 7(S)을, 그리고 숫자 감산 0들 및 6들. ( 2가장 중간에는 무시됩니다. 문자열의 끝에 있으면 무시하지 않고 후행 줄 바꿈이되지만 PPCG 규칙은이를 신경 쓰지 않습니다.) 따라서 출력은 원래입니다 입력 플러스 2.

이 시점에서 스택에는 유용하지 않으며 프로그램에는 아무것도 없으므로 프로그램이 종료됩니다.

이것을 어떻게 되돌 립니까? 11to 를 변경하는 것은 간단한 일 00이므로 입력에 2를 더하는 대신 2를 낮추는 문자를 추가합니다. 프로그램에는 008 개의 8 진수 가 편리하게 숨겨져 있으므로 8 진수와 바이트가 서로 정렬되므로 11시작시 간단히 8 진수로 바꿉니다 .



참고 사항 : 코드를 설명 할 필요는 없지만 프로그램의 기능을 아는 것이 좋습니다.
GB

@ GB : 프로그램에 대한 전체 설명 (균열 작동 방법에 대한 설명 포함)을 제공했습니다.


6

파이썬 2, 83 바이트, 크랙

#((()))****+,,---/2289;==oppppppqqqqqw~~
lambda n:pow(n,65537,10998167423251438693)

이것은 내 다른 대답과 비슷합니다. 그러나 이것은 64 비트 RSA를 사용하며 암호화 적으로 매우 약합니다. 이 답변을 빼낼 수 있다면 충분한 시간이 주어지면 이론적으로 다른 것을 빼낼 수도 있습니다.



5

Python 2, 47 바이트, 크랙

lambda x:x**2or (iron() and saxifrage.extend())

이 기능의 도메인은 {x ∈ ℤ | x> 0}. 입력의 제곱입니다.


nmjcman101 은 의도 된 해결책을 찾았습니다.

lambda x:sorted(a**2for a in range(x)).index(x)


1
Haha, 만들어진 함수 호출을 좋아합니다
FlipTack

1
재미, 나는 내가 남긴 분류 된 아나그램에 붙어있어!
nmjcman101

5

자바 스크립트 (ES6), 46 바이트, 크랙

x=>Math.log(x+(+String(t=985921996597669)[5]))

이 함수는 음수가 아닌 ln(x+1)위치를 반환합니다 x.

용법

(x=>Math.log(x+(+String(t=985921996597669)[5])))(5)

참고 : 부동 소수점 숫자의 특성으로 인해 f(g(x))정확히 같지 않을 수 있습니다 x. 예:f(g(4))=3.9999999999999996


깨진. 정말 재미있었습니다 :-)
ETHproductions


4

Processing.js, 59 바이트, 크랙 됨!

float igetuwebaoli(int p){return p*(((17*-4*-3)))+0+0;}//,,

이 함수는 입력에 204( 17*-4*-3=204)를 곱합니다 . int를 입력으로 받아 float를 출력합니다. 예상 한대로, 역은 입력을로 나눕니다 204.

processing-js에 대한 온라인 인터프리터는 여기 에서 찾을 수 있습니다 .




4

Emigna 에서 크래킹 한 JavaScript (ES6), 15 바이트

t=>(!!0+~~t+~0)

이 함수는를 반환합니다 n-1.


다음과 같이 테스트 할 수 있습니다.

(t=>(!!0+~~t+~0))(6)

깨진

내 의도 된 솔루션은 Emigna의 균열과 약간 다릅니다.

t=>t+(+!!~~~00)



4

J , 29 바이트 ( 마일 크랙 )

5#.[:,(3 5&#:(-$]-)7)#.inv"0]

이것은 입력 으로 양의 정수 를 취하는 동사이며 다음을 수행합니다.

  1. 베이스 2와 4로 변환합니다.
  2. base-4 표현을 0으로 채워서 base-2 표현과 같은 길이를 갖습니다.
  3. 두 표현을 연결하십시오 (기본 2).
  4. 연결을 기본 5 표현으로 해석하고 정수로 변환하십시오.

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

내 솔루션

논리는 균열에서와 거의 동일합니다. 순위의 결합은 "많은 다른 장소에 갇혀 (그리고 나는 그것이 불필요한 제거하는 데 사용할 수 있습니다 03) 정말 솔루션에서 아무것도하지 않기 때문에.

(7-5)#.[:(]-:&#$,)5#.inv"0 3]

나는 J를 이해하지 못하지만 실험에 따르면 실제로 2와 4의 정수를 취하고 4의 끝에 0을 더하여 길이를 동일하게 한 다음 연결합니다. 이 0은 의도 된 것입니까?
Wolfram

@Wolfram 0은 의도 된 것입니다. 그것이 바로 "동시"로 말하려는 것입니다. 그렇지 않으면 가역적이라고 생각하지 않습니다.
Zgarb

@Wolfram 더 명확한 설명을 추가했습니다.
Zgarb


4

처리 (java), 59 바이트, SAFE

float igetuwebaoli(int p){return p*(((17*-4*-3)))+0+0;}//,,

이 함수는 입력에 204( 17*-4*-3=204)를 곱합니다 . int를 입력으로 받아 float를 출력합니다. 예상 한대로, 역은 입력을로 나눕니다 204. 참고 : 두 프로그램 모두 int를 입력으로 사용하고 float를 출력합니다.

이 답변은 다른 답변이 Processing.js로 작성된 것을 제외하고는 다른 답변과 정확히 동일합니다. 덜 장황한 Java 사촌 인 Processing-java를 만나보십시오. processing.org 에서 Processing을 다운로드 할 수 있습니다 .

균열

float ap(int i){return i*pow(blue(get(0,0)),-1);}//++7*4*-3

이 프로그램은 인수를로 나눕니다 204. 그러나 어떻게? 함수 안으로 들어가 보자.

i *                              //multiply i by
         blue( get(0, 0) )       //this (evaluates to 204)
    pow(                  , -1)  //raises to the -1 power (ie its reciprocal)

간단한 충분하지만, 어떻게 blue( get(0, 0) )204? 이것이이 제출의 핵심입니다. 우선 (처리 스케치에서 항상 열리는 창의 왼쪽 상단 모서리)에 get(0,0)위치한 픽셀의 색상을 가져옵니다 (0,0). 다음 blue()으로 해당 픽셀의 파랑 값을 얻습니다 204.!

이 제출물을 완성하기 위해 나는에서 얻은 색상의 다른 속성을 인쇄하여 실험했습니다 get(0,0). 나는 빨강, 녹색, 파랑, 알파 값이 있다는 것을 발견 204, 204, 204255각각. 이로부터 나는이 번호로 간단한 작업을하기로 결정 하고이 게시물로 끝났습니다.


나는 Kotlin 이 덜 장황한 Java 사촌 이라고 생각했습니다 ! 나는 C 언어의 언어가 꽤
크다는

나는 당신이 그것을 믿었다, 아무도 당신의 게시물을 깨뜨리지 않았고 그것은 일주일이 지났습니다.
마일

3

Ilmari Karonen에 의해 크랙 된 JavaScript (ES6), 63 바이트

x=>eval(atob`eCp4KzEvLyAgfXBModLS4TvEn4wp1iys9YRRKC85KLIhNMC=`)

atob말도 안되는 시간 . 이 함수는 음수가 아닌 x*x+1위치를 반환합니다 x.

용법

(x=>eval(atob`eCp4KzEvLyAgfXBModLS4TvEn4wp1iys9YRRKC85KLIhNMC=`))(5)

예정된

x=>eval(atob`Lyp5fMRwICAgKi9NYXRoLnBvdyh4LTEsMC41KS8veCp4KzE=`)

잠재적 인 솔루션이 많지만 주요 문자가 바이트 순서를 버려서 더 어려워지기를 바랐습니다. 시스트 라atob



챌린지 코드를 의도 한 솔루션으로 실수로 다시 게시 했습니까? :)
Ilmari Karonen

@IlmariKaronen 감사합니다, 복사 / 붙여 넣기를 가르쳐 줄 것입니다 ... lol yeah right : P
SLuck49


2

Sp3000에 의해 크랙 된 Python 2, 225 바이트

#((()))****+,,---/000555666888;==oppppppqqqqqw~~
lambda n:pow(n,65537,9273089718324971160906816222280219512637222672577602579509954532420895497077475973192045191331307498433055746131266769952623190481881511473086869829441397)

이 함수의 도메인은 [0, n)이며, 여기서 n은 위의 큰 숫자입니다. 예,이 기능은이 도메인에서 되돌릴 수 없습니다. 그리고 내가 엉망이 아니라면이 대답을 깨는 것은 512 비트 RSA를 깨는 것만 큼 어렵습니다.


1
무차별 강제 (Brute-Forcing) 필요한 상수에 대한 대략적인 분석이 이미 있으므로 무차별 강제 RSA보다 훨씬 쉽습니다. 반면에 실제로는 관리하기가 여전히 어려울 수 있습니다.


5
@KritixiLithos 내 답변에는 무작위 화, 해시 또는 내장 암호화 코드가 포함되어 있지 않습니다. 말 그대로 하나의 모듈 식 지수입니다.
orlp

2
귀하의 답변은 의도적으로 해결하기 어려운 것으로 알려진 문제를 목표로하므로 메타 게시물과 일치합니다 (특히 RSA를 직접 언급하기 때문에). 메타 허점으로도 스크립트가 여전히 다운 보트를받을 자격이 있다고 생각합니다.
Christoph


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