1

암호화 된 문자열, 해당 문자열에 대해서만 작성된 함수 및 해당 문자열에 대해서만 작성된 함수를 사용할 수있는 코드로 세 가지 퍼즐을 만들 수있는 방법이 있습니까? 해독 된 형태는 실제로 실행될 코드/명령어입니다). 세 번째이자 가장 중요한 것은 최종 기능은 기능 실행을 가능하게하는 환경이며, 환경 상태는 용인 할 수없는 것이어야합니다. 따라서 함수는 일치하는 문자열에서 한 번만 실행되고 하나의 환경 상태는 만료됩니다. 그것은 완벽한 시계 메커니즘이어야합니다. 단 하나의 조각 만 빠져서 "눈에 띄지 않게"만들 수 있어야합니다 (물론 모든 부분이 중요하기 때문에 "작동"에서와 같이 똑딱 거리지 않아야합니다).코드 난독 처리 및 런타임 동작 변경

여기서 스크립트 언어에 대해 말하고 있습니다. 여기에 eval과 같은 것이 있지만, 일반적인 기술로 적용 할 수 있습니다.

모든 종류의 메모리 상태와 변수를 기반으로하는 일종의 "도미노"효과를 사용하면 구조적이지만 숨겨진 "누수 효과"와 비슷한 것을 만들 수 있습니다.) 장소에 배치해야합니다. 결국에는 "코드 깔때기"로 이상한 도구를 사용하여 실행 흐름을 조정합니다.

나는 이와 비슷한 것을 알 수 없으므로 내 말은 읽을 수 있고 이해할 수있는 형식을 제공 할 수 있도록 만들어졌습니다.

내 질문에 대한 정확한 답변은 ... 가능합니까? 내가 얻을 수있는 도움이 있습니까? 어딘가에 어떤 아이디어로? 나는 그와 같은 효과를 가질 수있는 것을 지금 찾을 수 없기 때문에.

물론 아무도 내 코드에 관심이 없다거나 편집증에 시달리는 것처럼 말할 필요가 없기 때문에 그러한 것을 묻지 않아도됩니다. 그러나 그것이 여전히 이유가 될 수 있다고 생각하십시오. 아니,이 사실을 알고 싶어하는 이유가 분명합니다.

그리고 해결책이 시급한 필요성에 직면하고 있기 때문에 "토론 포럼이 아님을 분명히 명시했습니다"와 같은 결론에 도달하지 마십시오. 그리고 진지한 수학과 견고한 알고리즘 사고를 포함한 많은 것들에 대한 경험이 거의 없기 때문에 나는 도움을 요청합니다. 그래서 나는이 문제에 대해 어떤 생각을 할지를 고마워한다.

답변

1

이것은 근본적인 수준에서 본질적으로 불가능합니다.

누군가에게 정보 (코드)를 제공하려고합니다. 하나의 특정 상태에서 코드를 한 번만 실행할 수 있기를 원합니다 (잘 정의하지 않은 경우). 하지만 코드를 검사하거나 다른 상황에서 코드를 실행할 수 없도록해야합니다. 불가능한.

사람의 컴퓨터 (코드를 실행할)의 프로그램이 코드를 검사하여 코드를 실행할 수 있어야합니다. 해당 컴퓨터의 다른 프로그램도 코드를 검사 할 수 있습니다.

임의의 프로그램이 코드를 검사 할 수 없도록 코드를 암호화하여 제어 권한을 다시 얻을 수 있습니다. 그러나 코드를 실행하려는 프로그램은 여전히 ​​코드를 검사해야하므로 코드를 해독하는 데 필요한 정보를 어떻게 든 가져와야합니다. 사용자가 특정 용도로 사용할 정보 (암호 해독 키) (지정한 상황에서만 코드의 암호를 해독하고 실행하는 정보) (암호 해독 키)), 그리고 어떤 다른 사람을 위해 아닙니다.

더 흥미롭게도 코드를 확인하려는 환경의 부분에서 파생 된 해시 값으로 코드를 암호화 할 수 있습니다 (확인하려는 내용을 모른 채 정확하게 말할 수있는 방법은 없습니다). 그런 다음 사용자 (또는 사용자를 대신하여 코드를 실행하는 프로그램)가 코드를 검사하려고하는 경우 환경에서 해시 값을 유도하는 동일한 프로세스 (예 : )를 따라야합니다. 그러나 사용자는 해당 환경에서 해시 값을 수집하고 보관하여 필요할 때마다 코드를 검사 할 수 있습니다.

게다가 실제로이 올바른 환경을 보장하는지 확인할 수 있는지 잘 모르겠습니다. 프로그램이 자신의 비밀 부분을 해독하고 실행하기 전에 코드에서 스파이를 수정하지 않고 프로그램이 올바르게 실행되고 있는지 확인해야한다면 스파이가 암호화 된 항목을 쉽게 꺼낼 수 있습니다. 암호화되지 않은) 코드를 검사하여 환경을 확인하기 위해 어떤 계산이 수행되었는지 확인한 다음 실제로 존재하는 "올바른"환경을 기반으로 자신의 계산을 수행합니다.

결국 할 수있는 일은 일급 비밀 코드를 복구하는 과정을 더 짜증나게하므로 방해하지 않게됩니다. 어쨌든 대부분의 사람들은 코드를 보지 않아도됩니다. 그들은 단지 상관하지 않습니다. 남은 대부분의 소프트웨어는 사소한 저항을 포기할 것입니다. 그 후에도 여전히 노력하고있는 사람은 ... 항상 비밀 코드가 정말 귀중하고/재미있는 경우에 기회가 있습니다. 당신이하는 일을 무엇이든 돌아 다니게 될 충분히 동기가있는 사람들이있을 것입니다. 처음에는). 그래서 제 성향은 비밀 코드를 왜곡시키지 않고 간단하게 작은 노력을 기울이는 것입니다. 불가능하기 때문에 완전한 보안을 달성하는 것에 대해 걱정하지 마십시오.

0

symmetric encryption을 사용하여 코드를 간단하게 암호화 할 수 있습니다. 임의의 키를 사용하여 암호화 한 다음 해당 키를 컴퓨터에 저장 한 다음 코드가 실행될 때 메모리에서 해당 키를 삭제하는 부분을 암호화 된 코드에 포함시킵니다. 물론 키가 삭제되기 전에 누군가를 복사하여 나중에 메모리에 복원하는 것은 상대적으로 쉽지만, 어딘가에 넣을 수는 있지만 어쨌든 누군가가 컴퓨터를 이전 상태로 복원 할 수 있다고 생각합니다. backup 소프트웨어 사용).

+0

답변 해 주셔서 감사합니다. 정확히 당신이 게시물의 끝에 언급 한 것은 내 문제였습니다. 복구 할 수없는 상황을 만들 방법이 없습니까? 또는 정보를 자동으로 실행하고 그 자체가 컨텍스트 일 ​​때 정보를 종료 한 시점에서 다시 시작할 수 없습니다. – khael

0

@Ben, 재미있는 프리젠 테이션, 나는 내가 할 수있는 일과 수행 할 수없는 것을 이해 한 바로 그 순간부터 이것을 생각하고 있다고 생각합니다. 나는 네가 언급 할 수있는 모든 상황을 생각했다. 어쩌면 나는 할 수있는 한 두통만큼만 만들어야한다고 스스로를 제한해야합니다. 당신이 그 이름을 지었을 때 그 비밀 번호가있을뿐만 아니라 그것을 숨길 또 다른 의도가 있습니다. 그것은 겸손 함이없는 것을 용서합니다. 정말 재미있는 코드입니다. 나는 그 코드를보기 위해 그들을 필터링하고 싶습니다. , B를 거치지 않고 A에서 C로 천재가 걸리면 어떻게되는지 알아 내야합니다. 나는 나를 실망시킨 경험이 부족했지만 풀 수없는 문제입니다. 하지만 여전히 나는 그런 불가능한 상황을 항상 앞에두고 있으며, 나는 해결책을 찾기 위해 지옥을 일으킨다. 나는 그것을 잘 관리한다. 하지만 지금은 항복 할 수 없어요.

처음부터 해답을 알고있을 수도 있습니다. 아무리 시도해도 시도 할 수 없으며 물론 정상인지, 정확하지 않은지 이유를 쉽게 알아낼 수 있습니다. 귀하의 지식에 의존해야하며 귀하가 만드는 것에 한계가 있어야합니다. 그리고 그것을 염두에두고 분명히 누군가가 더 나은 방법이 있어야하며 분명히 당신을 극복하는 것보다 더 나은 사람이있을 것입니다. 이것이 적어도 나의 주관적으로 말하면, 그런 성가신. 그럼, 내 비밀 암호를 아는 사람들을 줄이기 위해 최선을 다할 것 같아. 결국 심지어 신은 위대한 퍼즐 제작자입니다.

어쨌든 나는 당신의 대답에 고맙게 생각합니다.

P.늦게 답변을 드려서 죄송합니다. 그러나 8 시간 동안 내 질문에 답변 할 수 없으므로 기다려야했고, 그 후에는 할 수있는 시간을 찾지 못했습니다.