문제

나는 프로그래머입니다.저는 약 5년 동안 다양한 언어로 프로그래밍한 경험이 있습니다.나는 내 코드 속도, 내 코드를 사용하는 메모리 최적화, 좋은 코딩 스타일 등에 대해 걱정했습니다.하지만 내 코드가 얼마나 안전한지 생각해 본 적이 없습니다.그래서 해커가 무엇을 할 수 있는지 알아보기 위해 코드를 분해했습니다.내 코드를 해독하는 것이 쉬울까요?그리고 나는 그것이다는 것을 보았습니다!보관하고 있으니까 아주 편해요

  1. 문자열로 된 일련 번호
  2. 암호화-복호화 코드도

따라서 누군가가 어셈블러에 대한 최소한의 지식을 갖고 있다면 그는 간단한 디스어셈블러만 사용할 수 있으며 10-20분 동안 디버깅하면 내 코드가 깨집니다!!!메모장으로 exe를 열어도 가능할 것 같아요!:-)

그래서 제가 묻는 내용은 다음과 같습니다.

  1. 그런 종류의 보안 정보를 어디에 저장해야 합니까?
  2. 보안 코드를 전달하는 일반적인 전략은 무엇입니까?
도움이 되었습니까?

해결책

가장 먼저 깨달아야 할 것은 코드가 할 수있는 일이 있기 때문에 결정된 리버스가 보호 체계를 크래킹하는 것을 방해하지 않을 것이라는 점입니다. Reverser는 결국 그것을 복제하는 방법을 찾을 것입니다. 어떤 종류의 신뢰할 수있는 보호를 달성 할 수있는 유일한 방법은 배송 된 프로그램이 멍청한 클라이언트에 지나지 않고 Reverser가 액세스 할 수없는 일부 서버에서 소프트웨어의 잔인한 것을 갖는 것입니다.

그 길에서 당신은 확실히 그것을 만들 수 있습니다 더 어렵다 보호를 중단하기 위해 반전이 될 것입니다. 난처 이것을 달성하는 첫 번째 단계입니다. 난독터를 사용한 경험은 없지만 일부에 대한 제안을 찾을 수 있다고 확신합니다. 또한 C/C ++와 같은 하위 레벨 언어를 사용하는 경우 전체 최적화로 코드를 컴파일하고 모든 디버깅 기호를 제거하면 적절한 양의 난독 화가됩니다.

나는 읽었다 이 기사 몇 년 전, 그러나 나는 여전히 그것이 오늘날 기술이 유지되고 있다고 생각합니다. 그것은 스파이로 (Spyro)라는 비디오 게임의 개발자 중 한 명이 불법 복제를 예방하는 데 사용한 일련의 기술에 대해 이야기합니다. 그들은 릴리스가 끝난 후 3 개월이 지나도 금이 간 버전을 사용할 수있게되었다고 주장합니다.

다른 팁

불법 복제가 우려되는 경우 취할 수 있는 방법은 많습니다.코드 보안을 더욱 엄격하게 만드는 것(난독화, 라이센스 코드, 소프트웨어를 특정 PC에 바인딩, 하드웨어/동글 보호 등)이 하나이지만 명심해야 할 점은 다음과 같습니다. 모든 충분히 재능 있는 사람이 방해를 받으면 소프트웨어 조각이 깨질 수 있습니다.

또 다른 접근 방식은 소프트웨어의 가격 모델을 고려하는 것입니다.복사본 하나에 1000달러를 청구하면 누군가가 그것을 해독하려고 시도할 큰 인센티브가 있습니다.5달러만 청구한다면 왜 누군가가 그것을 해독하려고 애쓰겠습니까?

그래서 필요한 것은 균형이다.가장 기본적인 보호라도 일반 사람들이 무심코 복제하는 것을 막을 수 있습니다.그 외에도 간단한 기술(난독화 및 라이센스 코드)과 합리적인 가격 전략은 크래킹할 가치가 없도록 만들어 대부분의 크래커를 막아낼 것입니다.그 후에는 구현하는 데 많은 노력/비용이 소요되는 훨씬 더 정교한 기술(소프트웨어를 실행하려면 동글/CD가 있어야 하며 온라인 라이선싱 시스템에 로그인한 후에만 소프트웨어를 실행할 수 있음)에 들어가기 시작합니다. 실제 고객을 짜증나게 할 위험이 크게 증가합니다(하프 라이프를 구매했는데 게임을 플레이할 수 없게 되었을 때 모든 사람이 얼마나 짜증을 냈는지 기억하시나요?) - 인기 있는 주류 제품(예:보호해야 할 막대한 수익원) 아마도 그렇게 많은 노력을 기울일 필요가 없을 것입니다.

웹 앱으로 만드십시오.

당신이 통제하고 있는지 확인하는 외부 서비스가 없으면 일반적으로 잘 보호되지 않습니다. 대신 고객을 신뢰하고 최소한의 저작권 보호를 제공하십시오. Joel Spolsky의 어딘가에 이것에 관한 기사 나 팟 캐스트가 있다고 확신합니다 ... 여기에 또 다른 관련 질문.

그것이 도움이 될지 모르겠지만 Windows는 암호화 된 정보를 검색하고 저장하는 메커니즘을 제공하며 필요한 경우 적용당 에이 스토리지를 소금 할 수 있습니다. Data Protection API (Data Protection API).DPAPI)

이것은 기계 나 사용자 수준에 있지만 직렬을 저장하고 아마도 일부 키는 애플리케이션에 숨겨져있는 것보다 낫습니까?

어떤 종류의 안전에 대해 이야기하고 있습니까? 사용자 데이터를 잘 보호한다는 관점에서 보안? 그렇다면 실제 암호화를 연구하고 활용하십시오 기존의 라이브러리 데이터를 암호화합니다. Win32 API는 이것에 꽤 좋습니다.

그러나 크래커가 응용 프로그램을 훔치는 것을 막는 것에 대해 이야기하고 있다면? 많은 방법이 있지만 포기합니다. 그들은 크래커를 느리게하고 멈추지 않습니다.

먼저 코드가 안전 해야하는 내용을 정의해야합니다.

당신은 리버스 엔지니어링에 대해 걱정하는 것 같습니다. 사용자는 지불하지 않고 라이센스 코드를 생성하는 사용자가 걱정되는 것 같습니다. 이것을 더 어렵게하기 위해 코드와 주요 정보를 다양한 방식으로 난독화할 수 있습니다. 또한 리버스 엔지니어가 코드를 밟고 정보를 명확하게 보지 못하도록 디버거 사용을 더욱 어렵게 만드는 기술도 있습니다. 그러나 이것은 역 엔지니어링만이 다소 어려워 지지만 불가능하지 않습니다.

또 다른 일반적인 보안 위협은 예를 들어 버퍼 오버플로를 통한 원치 않는 코드 실행입니다.

이 작업을 수행하는 간단한 기술은 모든 코드를 XOR로 만드는 것입니다. 필요할 때 XOR은 다시 XOR입니다. 그러나 이것은 조립에 대한 타고난 지식이 필요합니다 ... 확실하지 않지만 시도해 볼 수 있습니다.

void (*encryptionFunctn)(void);
void hideEncryptnFunctn(void)
{
    volatile char * i;
    while(*i!=0xC0) // 0xC0 is the opcode for ret
    {
        *i++^=0x45; // or any other code
    }
}

해커가 코드를 보는 것을 방지하려면 Obfuscator를 사용해야합니다. Obfuscator는 다양한 기술을 사용하여 난독 화 코드를 이해하기가 매우 어렵습니다. 사용 된 일부 기술은 문자열 암호화, 기호 이름 바꾸기, 제어 흐름 난독 화 등입니다. 암호화 오염기 또한 외부 방법 호출 숨기기, 반사 방지, 방지 방지 등이 있습니다.

목표는 해커의 길에서 가능한 많은 장애물을 세우는 것입니다.

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