문제

는 몇 가지 방법이 있을 obfuscate C 기반 실행파일이나 라이브러리를 방지하 디컴파일?

도움이 되었습니까?

해결책

아뇨. 더 많이 만들 수 있습니다 어려운 디 컴파일하지만 당신은 할 수 없습니다 예방하다 그것. 저의 조언은 시간 낭비를 멈추고 대신 끊임없이 개선하는 기능을 갖춘 환상적인 제품을 제공하는 데 집중하는 것입니다.

그러면 사람들은 기꺼이 지불 할 것입니다.

당신의 주요 문제는 코드를 설교 할 수없는 유일한 방법은 그것을 실행할 수 없게 만드는 것입니다. PC에로드 할 수있는 것은 금이 갈 수 있습니다. 재미, 이익 또는 명성을 위해 리버스 엔지니어링을하는 사람들은 일반적으로 매우 그것을 잘하고 실제로 당신이 그들을 시도하고 멈추기 위해하는 일에 의해 가장 적은 비트가 아닙니다.

그들은 당신이 그것을 이해하는 일보다 훨씬 더 쉽게 코드를 해독하는 도구에 액세스 할 수 있습니다 :-) 소프트웨어가 구매할 가치가 있음을 전 세계에 설득하고 불법 복제를 전환 할 수있는 기회로 볼 수 있습니다. 진정한 사용자에게 "도둑".

예를 들어, 알아보십시오 그들은 당신의 소프트웨어에 대한 비용을 지불하지 않고 그것을 고치려고 노력합니다. 당신은 사람들의 100%를 결코 변환하지 않을 것입니다.

실행되는 일련의 기사를 확인하십시오 TechDirt CWF+RTB와 관련하여 (팬과 연결하는 이유와 구매해야 할 이유). 소프트웨어 산업에 적용 할 수있는 많은 포인트를 발견했습니다.

다른 팁

쉬운 방법:사 packer/cryptor/난독 제품입니다.일부는 비용과에서 사용되는 게임,일부 되지 않습니다.구글에 의해 그들의 유행어 같은"복사본을 보호",등등.

수있는 가장 빠른 방법입니다!:팩 UPX 후기 헤더가 어딘가에 그래서 그것은 여전히 로드 메모리에서 실행되지만,upx 유틸리티가 실패하고 오류(해보 필드 버전).95%것을 포기하는 경우 upx 유틸리티가 실패합니다.

하드 방법:자신의 packer.

아,나는 잊었:

실시 쉬운 방법:그냥 배로 그것입니다.습니다-당신이 무엇이든 사람들이 아직도 할 수 있 리버스 엔지니어의 코드입니다.는 노력 양 당신이 그것에서만 제한하는 방법은 많은 그것을 반대로 할 수 있습니다.

완전한 최적화로 컴파일하십시오.

"난독 화 된 실행 파일"은 의미가 없습니다. 하드웨어는 코드를 실행할 수있는 코드를 "이해"할 수 있어야하며 하드웨어가 이해할 수 있으며 역 엔지니어링 인간은 이해할 수 있습니다. 당신이 할 수있는 가장 많은 것은 이해하기가 더 지루하게 만들 것이지만, 아마도 많지는 않지만 비용이들 것입니다.

더 힘들게하려면? 확신하는. 제발 그렇게하지 마십시오.

그것을 막기 위해? 아니요. 바이너리를 실행하려는 모든 시스템에는 소프트웨어가 필요합니다. 그리고 그들은 그것을 소집 할 수 있고, 당신의 가려진 바이너리가 어떻게 해석되는지 볼 수 있습니다.

컴파일 된 바이너리에 대해 말하면 할 수있는 일이 많지 않다고 생각합니다. upx 또는 관련 도구)는 반전 될 수 있기 때문에 많은 것을 만들지 않습니다.

새 코드 작성에 대해 이야기하면 시도하십시오 자체 모디핑 C 코드 아마도 응용 프로그램을 다시 엔지니어링하는 가장 어려운 방법 일 것입니다.

최적화 컴파일러로 C 코드를 컴파일하면 원래 소스 코드 또는 원격으로 유사한 내용을 복원 할 수 없습니다. 요즘 인기있는 Java 또는 .NET Oppuscators보다 훨씬 안전합니다. 더 작게 만들고 릴리스 전에 기호 이름을 숨기려면 실행 파일을 제거하십시오. 그러나 이것은 또한 디버깅을 만듭니다 (언제 응용 프로그램이 충돌합니다) 거의 불가능합니다.

그럼에도 불구하고 누군가가 실제로 당신의 소프트웨어를 해킹하고 싶다면, 그는 어셈블리 수준, 아마도 로더 소프트웨어 나 기타 속임수를 사용하여 자신을 막기 위해 무엇을 시도하고 해야하는지에 관계없이 그렇게 할 것입니다. 많은 회사들이 시도했지만 아무도 성공하지 못했습니다. 이와 같은 해킹을 사용하면 애플리케이션이 충돌하거나 Windows의 내장 디버거를 충돌시킬 수 있으므로 최종 사용자가 좌절합니다.

대신 프로그램을 개선 해야하는 동안 난독 화에 대한 생각을 낭비하지 마십시오.

분해 (더 이상 gotos) 및 둘 다 난독 화 연습 (유량) 및 이론 (구별 가능성 난독 화)은 활발한 연구 영역이므로 도구, 기술 및 전문 지식 만 솔루션이 없습니다. 코드가 절제되지 않기를 원한다면 웹 앱을 만들고 민감한 코드 서버를 넣으십시오. 그러나 누군가에게 바이너리를주는 모델을 고수한다면, 보안과 성과 사이에 당신이 만들고 싶은 트레이드 오프를 현명하게 판단해야합니다. 난독 화는 비용이 많이 들지만 여전히 완벽하지 않습니다. 몇 가지 옵션

  • UPX 이외의 패커를 사용하십시오 (UPX는 많은 Linux 배포판에 설치되어 있습니다). 성능 비용은 낮으며 대부분의 사람들은 정적 분석을 위해 바이너리를 수동으로 포장하는 기술이 없습니다. 그러나 경험이 풍부한 반전의 경우 포장 풀기 비용은 중요하지 않습니다.
  • C 소스-소스 난독 화를위한 풍부한 기능을 갖춘 다각화 된 가상화기/난독자인 Tigress를 확인하십시오. 더 나은 성능을 보려면지지 변환, 제어 흐름 평평한, 기능 병합/분할, 리터럴 인코딩에 의존합니다.
  • 더 큰 보호를 원한다면 Tigress의 주요 변환과 같은 가상화, 지팅 등을 확인하십시오. 그러나 이러한 변환을 사용하면 사용자가 더 비싸고 사용자가 느리게 줄 수 있습니다.

Barak et al의 블랙 박스 난독 화의 불가능성에 대한 주요 연구에 낙담하지 마십시오. 그는 많은 실용적이고 가치있는 난독화물의 불가능한 것이 아니라 블랙 박스 난독 기초의 불가능성 만 증명합니다. (블랙 박스 난독 화이 프로그램의 내부 작업은 완전히 이해할 수 없습니다) 또한 해적들에 의해 낙담하지 마십시오. 제품이 좋은 경우 제품을 구매하는 지점을 항상 만드는 사람들이 항상 있습니다.

상업적 이익이있는 경우 코드를 난독 화하는 이유는 무엇입니까? 솔직히 말해서, 상업 코드가 충분히 최적화되고 난독 화되고 작동한다고 가정 해 봅시다. 그런 다음 모든 창피한 일의 어머니가 일어 났다고 가정 해 글리치가 발생하는 곳과 복제하기 어려운 디버그 버그 목록에 영원히 붙어 있습니다 ...

예를 들어, 스택 트레이스를 찾으려고 노력하면 더 많은 머리카락을 잃어 버린 다음 wtf가 그곳에서 작동하기 위해 분리 된 코드를 알아 내려고 노력하면 끝없는 스파게티 루프가 있습니다. 요컨대,하지 마십시오!

글리치를 디버깅하려고 노력하는 데 돈을 잃게 될 것입니다 ... 메모리 덤프를 읽고 난독 화 된 코드에서 해결하기 위해 훌륭한 어셈블러 전문가가되어야합니다. 당신의 아름다운 제품을 작동시키고 판매하십시오 ... 물론, 코드를 리버스 엔지니어링하여 손을 깰 시간이 많이 있습니다 ...

원리를 따르는 비밀은 - 자주 출시되고 자주 출시됩니다, 당신이 자주 출시 될 때, 이런 식으로 최신 기능은 크래커가 그것을 분해하고 운동하는 데 걸리는 시간이 더 최신 상태 일 것입니다! Linux 소스 코드를 살펴보면 패치가 들어오고 출시됩니다. 해당 원칙을 염두에두면 훨씬 더 빠른 속도로 더 많은 기능을 갖춘 새 버전을 공개하여 승리합니다!

조금 더 어려운 일을하는 한 가지 방법은 포장하는 것입니다. upx 바이너리를 포장하여 상자 밖으로 디 컴파일하기가 더 어려워집니다. 기술적으로 포장을 풀고 디 컴파일 할 수는 있지만 막대를 조금 올릴 수 있습니다. 바닐라 사용자 운영 체제에서 실행한다고 가정하면 불쾌한 트릭을 사용하지 않고 분해를 방지하기 위해 할 수있는 일이 많지 않습니다.

정말로 뒤죽박죽을 원한다면 별도의 프로그램이 필요합니다. 개발자는 가장 깨끗하고 가장 읽기 쉬운 형태로 코드를 작성합니다. 컴파일 후 오염을 수행하기 위해 별도의 응용 프로그램을 실행합니다. 이러한 응용 프로그램을 약 $ 100K에 구입할 수 있습니다.

당신의 의도가 코드가 반전되는 엔지니어링을 중지하려는 경우, 아마도 작동 할 것입니다. 당신의 의도가 누군가가 보안을 깨뜨리는 것을 막는 것이라면 난독 화 혼자서 결정된 공격자를 막을 수는 없습니다. 어느 시점에서 예/아니오 결정은 코드를 찾거나 우회하기 위해 코드를 이해할 필요가 없습니다.

난독 화 코드를 생성하도록 수정 된 작은 C 컴파일러 : http://blogs.conus.info/node/58

여기에서 답변에 대한 이론적 지원을 제공하려면 : 2001 년에 바라크 등 알. 프로그램 난독 화이라는 것을 증명했다 일반적으로 불가능합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top