2012-04-28 5 views
2

원래 32 비트 Exe 네이티브 코드 래퍼로 보호되는 메모리에로드 된 Pure C# 어셈블리 실행 파일의 덤프를 막을 수있는 방법이 있습니까?Packed .Net 실행 파일의 메모리 덤프 방지?

+0

동일한 문제가 있습니다. 해결책을 찾았습니까? –

답변

3

@ 하산은 메모리 덤프를 막을 수있는 방법이 없다고 말하고 있습니다. 그러나 여기에는 더 깊은 문제가 있다고 생각합니다. C# 어셈블리에 대해 "원래 은 32 비트 Exe 네이티브 코드 래퍼로을 보호했습니다."(강조 광산), C# 어셈블리 자체의 내용을 누군가가 검사하지 못하도록하려는 것 같습니다.

다른 사람이 어셈블리에 손을 대면 곧 열어서 더 자세히 알 수 있습니다. 예를 들어, 그들은 dotPeek 또는 ILSpy을 사용하여 C# 소스 코드로 디 컴파일 할 수 있습니다. obfuscator를 사용하면 이러한 도구를 사용하는 사람의 삶을 더 어렵게 만들 수 있지만 난독 화만이 지금까지 진행됩니다.

결론은 누군가 다른 사람이 사용할 수있게하면 손에서 벗어났습니다. 누군가 다른 사람이 귀하의 코드를 디 컴파일하여 토렌트 사이트에 게시 할 것입니다 (어쨌든 무료가 아닌 경우). 코드에 암호를 디 컴파일하고 일반 텍스트로 암호를 읽을 수 있으므로 코드에 암호 데이터베이스 암호를 넣지 마십시오. 서버에서이 코드를 실행하더라도 코드에 암호를 넣지 마십시오. 이유는 다른 SO 대답 here에 설명되어 있습니다.

N.B. 소프트웨어 배포를 시작하면 다른 사람이 실행 파일에 디버거를 부착하는 것을 막을 수있는 방법이 없으므로 런타임 정보를 검사하기 위해 메모리 덤프가 필요하지 않습니다.

2

메모리 덤프를 방지하는 어리석은 방법은 없습니다. secure strings에 값을 입력 할 수 있습니다. 누군가 메모리 덤프를 걸면 암호화 된 것입니다. 그들은 그것을 이해할 수 없을 것입니다.

0

보호 된 프로세스로 실행되는 Windows 드라이버를 작성하십시오. 이 드라이버를 통해서만 프로그램을 실행하고 보호 된 프로세스로 실행하십시오.

이렇게해도 바이러스 백신 프로그램도 프로그램 메모리를 검사 할 수 없습니다. 이는 보호 된 프로세스의 openprocess 또는 readprocessmemory를 호출하려고 시도한 것처럼 액세스가 거부 될 것입니다.

여기에서 가장 중요한 문제는 드라이버가 Windows 인증 드라이버 여야하며이를 달성하는 데 시간이 많이 걸리는 것입니다.

또한 보호 된 프로세스 드라이버가 프로그램을 호출했는지 확인하고 프로그램을 여는 데 실패하지 않았는지 확인하는 방법을 구현해야합니다. 이런 종류의 수표는 쉽게 제거 될 수 있습니다.