소스 코드 레벨에서의 난독 화가 난독 자보다 더 효과적입니까?

StackOverflow https://stackoverflow.com/questions/413415

  •  03-07-2019
  •  | 
  •  

문제

내로부터 배우기 마지막 질문, 대부분 회원 이름 프로젝트 출력에 포함 된 것 같습니다.

디 컴파일러를보고 있습니다 9rays, 도롱뇽, 밀림, 많은 난독 화 기술이 이미 패배 한 것으로 보이며, 이것은 특히 무서운 주장이 있습니다.

Obfuscators가 주입 한 문자열 암호화를 자동으로 제거합니다 도롱뇽

수동도 마찬가지입니다. 소스 코드 레벨보다 더 효과적입니다 컴파일 후 / 미드 컴파일이 거품이 든다.

도움이 되었습니까?

해결책

소스 코드를 난독 화하는 것은 유지 보수 측면에서 자체 피할 것입니다.

프로젝트가 너무 '비밀'이라면 두 가지 선택이 있다고 생각합니다.

  • 제어하는 서버에 서비스 뒤에 '비밀'독점 코드를 배치하십시오.

  • C/C ++와 같은 컴파일하기 쉽지 않으므로 언어로 코딩하십시오.

다른 팁

어쩌면 논란의 여지가 있지만 유지 가능성을 파괴 할 것입니다.

이것이 정말 그만한 가치가 있습니까?

실제로 이것은 단지 내려진다 모호함을 통한 보안, 즉, 그것은 전혀 보안이 아닙니다. 그것은 단지 불편 함입니다. 당신은 모든 당사자가 충분히 관심이 있다고 가정하면서 일해야합니다. ~ 할 것이다 코드가 액세스 할 수있는 경우 코드를 디 컴파일하십시오. 사악한 haxxors에 대해 약간 더 많은 시간이 소요되도록 스스로에게 영향을 줄 수있는 고통의 가치가 없습니다. 액세스의 실제 보안 문제를 처리하십시오.

사람들이 말했듯이 난독 화는 막대를 올리는 것입니다. 어셈블리를 난독 화하면 호기심이 많지만 약간 동기 부여 된 사람이 리버스 엔지니어링을 막을 수없는 캐주얼 개발자를 막을 수 있습니다.

막대를 조금 더 높이려면 많은 난독 화 도구를 사용하면 인쇄 할 수없는 문자를 멤버 이름으로 사용할 수 있습니다. 반사판 자체를 사용하여보십시오. 이것은 훨씬 더 많은 사람들을 막을 것이고, 나는 그것을 이해하기 위해 난독 화 된 코드를 살펴볼 수도 있지만, 그것을 읽을 수 없다면, 나는 그것을 IL에 버리고 모든 회원을 수동으로 바꾸는 고통을 겪지 않을 것입니다. 내가 그렇게 많은 시간을 낭비하는 동기는 없습니다.

그러나 어떤 사람들의 경우 동기 부여가 있으므로 비즈니스 요구 사항이 Nesseceing이면 다른 단계로 가야합니다. 그러나 컴퓨터가 그것을 읽을 수 있다면 무엇을하든, 그것을 읽을 수있는 사람도있을 것입니다. 목표는 그것을 읽을 수 있거나 그것을 읽도록 동기를 부여하는 사람들의 수를 줄이는 것입니다.

반사기 브레이크를 만들기 위해 사용할 수있는 몇 가지 트릭도 있습니다 (일부 경우에는 선제 적 브레이크 리플렉터의 offuscator가 있지만 여전히 IL을 읽을 수 있습니다). 난처한 도구 개발자와 한 번 흥미로운 대화를 나누었고 정의를 할 수는 없지만 코드 점프를 역동적으로 점프하여 반사판을 완전히 깨뜨릴 수있는 방법이있었습니다. 예를 들어, 당신의 함수의 한 순간은 당신은 함수의 중간으로 점프 할 것입니다. b. 이 원인은 오류가 발생하여 실제로 오류를 구현하지 않았지만 깔끔한 아이디어를 구현하지 못했습니다.

Annakata가 맞습니다. 실제로 당신이 할 수있는 일은 사람이 소프트웨어를 리버스 엔지니어링하기가 더 어렵고 비용이 많이 드는 것입니다.

우리 회사는 리버스 엔지니어링을 위해 가능한 한 어려워지기를 원하는 몇 가지 영역을 확인했습니다. 예를 들어 당사 파일은 계층 구조의 각 개체가 자체 저장하고 올바른 버전을 다시 읽는 이진 형식입니다. 이것은 사람이 파일을 읽는 것을 의미합니다. 파일을 읽기 위해 작성한 코드에서 전체 계층 구조를 복제 할 수 있습니다. 또한 작업 파일의 많은 정보는 상점 표준 파일의 해당 비트없이 유용합니다. 따라서 작업 파일의 말을 이해하려면 작업을 두 번해야합니다.

여러 중요한 영역 (동글 보호, 금속 절단 기계와의 통신)은 Win32dll에 있습니다. 이는 소프트웨어를 역 엔지니어링하기 위해 어셈블리와 다른 DLLS 서명을 복제하는 DLL을 만드는 방법을 알아야한다는 것을 의미합니다. 또한 CAM 소프트웨어를 사용한 우리의 디자인은 커팅 머신과 상호 작용한다는 것입니다 (항상 교환중인 정보)

몇 시간부터 우리는 기계 만 다루려고 노력하는 경쟁자에 대해 들었을 때 전자 제품을 자신의 작업으로 교체하여 작업을 마치기 위해 상처를 입었습니다. 이를 위해 큰 돈.

우리가 취한 단계의 일부는 경쟁의 기계 및 소프트웨어를 다루려고 노력하는 우리 자신의 경험을 기반으로했습니다. 우리는 그 경험을 가져 와서 설정을 조정하는 방법을 배웠습니다. 물론 우리는 역 엔지니어링을 물리 칠 목적으로 신뢰성이나 유지 보수를 희생하지 않는다는 점에서 제한이 있습니다.

귀하의 경우, 귀하는 소프트웨어의 일부가 귀하의 경쟁 업체에 어떤 관심을 갖고 있는지 스스로에게 물어보고 그곳에서 진행해야합니다. 수직 시장 개발자 (기계 제어, 전문 회계 등) 인 경우 소프트웨어 제어를 위해 USB 동글을 사용하는 것이 좋습니다.

그렇지 않으면 일련 번호 시스템을 사용하고 사람들이 소프트웨어를 해적하여 비즈니스 모델로 구축 할 수 있습니다. 일련 번호 체계의 목적은 상대적으로 무관심하고 인과 적 복사를 방해하고 사본이 어디에서 왔는지 추적 할 수있는 원격 기회를 제공한다는 것입니다.

문제는 당신이 그것을하기 위해 가독성을 희생하는 것입니다. 당신의 프로젝트가 그 성스러운 보호가 신성하다면, 나는 두 가지를 가정하는 것이 안전하다고 생각합니다.

  1. 이 프로젝트는 가독성의 히트가 당신을 엉덩이에 물기 위해 돌아올만큼 충분히 큽니다.
  2. 리버스 엔지니어링을 원하는 사람들은 어쨌든 그렇게 할 것입니다. 회원 이름을 읽는 대신 (회원 이름을 읽는 대신) 일이 무엇을하는지 결정하는 데 약간 더 큰 지능이 필요합니다.

코드 수준의 난독 화를 고려하고 있다고 경고합니다. 당신도 자신을 위해 코드를 난독하게하지 않겠습니까? 다시 작업하려고하는 방법은 무엇입니까? 유지 관리를 위해서는이 작업을 수행해서는 안됩니다.

그러나 이것을 고려하십시오 : -

프로젝트를 열고 프로젝트의 모든 문자열/변수 이름을 영리하게 난독 화하는 스크립트/앱이 있다고 가정하고 나중에 원래 코드가 별도의 위치에 안전하게 손대지 않은 상태에서 컴파일했습니다.

이제 그것은 몇 가지 아이디어입니다.

실제로 코드 수준 난독 화는입니다 덜 안전합니다 Obfuscators가 할 수있는 것보다. 이는 주로 Obfuscator가 언어 컴파일러가 허용하지 않는 엄격한 CLI 구현 세부 사항을 활용할 수 있기 때문입니다. 예를 들어, 개인 필드는 모두 같은 이름을 갖는 것이 합법적이지만,이를 수행 할 수있는 컴파일러는 없습니다.

다음과 같은 기술을 사용할 수 있습니다. http://g.palem.in/secureassembly.html 이것을 사용하면 .NET으로 작성하지만 .NET 실행 파일에 C ++ 실행 가능에 포함됩니다.

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