본문 바로가기
Security

.NET - 코드 난독화

by 올엠 2020. 12. 7.
728x90
반응형

.NET 코드는 디컴파일러를 통해 쉽게 복호화가 가능하다.

필자 역시 .NET을 이용하여 코드를 많이 작성하는데, 간혹 비밀키가 들어갔거나 암호화가 필요할 때 난독화를 항상 고민한다.

.NET 에서 사용할 수 있는 난독화 도구는 필자 기준으로 추천한다면, .NET기준 현재 유용한 도구는 Eazfuscator.NET이다. .NET 기준 디컴파일러로 가장 많이 손쉽게 이용되는 ILSPY를 통해 Eazfuscator.NET 을 이용하여 암호화 전/후를 비교해 보면 쉽게 차이를 알 수 있다.

ILSPY

https://github.com/icsharpcode/ILSpy/releases/tag/v6.2.1

 

Release ILSpy 6.2.1 · icsharpcode/ILSpy

This is a bugfix release. #2177: PDB Generation is confused by enhanced using statements #2183: Incorrect version in binding redirect for AvalonEdit #2174: Some compilers produce display class cto...

github.com

Eazfuscator.NET 

https://www.gapotchenko.com/eazfuscator.net

먼저 난독화를 확인할 도구는 Eazfuscator.NET이다. 본도구는 상용 솔류션 답게 설치부터 사용이 매우 쉽다.

난독화를 적용하면 아래와 같이 대부분의 코드를 식별하는 것이 어렵다.

사용법 역시 설치 이후 보호하고자 하는 프로젝트를 마우스로 방패 마크에 드래그엔 드롭을 통해 손쉽게 이용이 가능하다.

 

 

비용은 싱글 유저 기준으로 40만원 정도이기 때문에 평가판을 통해 테스트 한후 이상이 없다면 구매하는 것을 추천한다.

평가판으로 빌드한 경우 빌드일 기준 7일 사용이 가능하므로 주의해야 한다.

 

 

만약 보호를 위해 무료버전을 사용하고자 한다면 다음 도구를 이용할 수 있다.

Obfuscar 

만약 보호를 위해 무료버전을 사용하고자 한다면 다음 도구를 이용할 수 있다.

난독화화 도구중 Obfuscar는 오픈소스로 활발하게 업데이트가 이루어지고 있어 버그나 개선이 잘 이루어지고 있다고 할 수 있다.

위와 같이 설치한 이후 프로그램 빌드를 진행한다. 빌드후 obfuscar.xml 파일을 빌드 디렉토리에 생성하고, 

내용을 테스트를 위해 다음과 같이 입력한다.

아래 값에서 InPath 값이 중요한데, 빌드된 파일의 경로를 입력해 주어야 한다.

Module file 이름이 hello.dll인 이유는 현재 예제 프로젝트가 hello.dll이 빌드되는 파일이기 때문이다.

<?xml version='1.0'?>
<Obfuscator>
	<Var name="InPath" value=".\bin\Release\netcoreapp3.1" />
	<Var name="OutPath" value=".\Obfuscator_Output" />
	<Var name="HidePrivateApi" value="true" />

	<Module file="$(InPath)\hello.dll" />
</Obfuscator>

그후 프로젝트이 Build Events에서 아래 내용을 추가하자.

"$(Obfuscar)" obfuscar.xml

그리고 빌드를 진행하면, 빌드이후 Obfuscar가 난독화를 정상적으로 진행하는 것을 확인할 수 있다.

 

만약 Visual Studio를 사용하지 않고 난독화를 하고자 한다. obfuscar.xml을 파일을 빌드한 경로로 복사한다.

그리고, InPath를 현재 경로를 의미하는 . 으로 변경하자.

<?xml version='1.0'?>
<Obfuscator>
	<Var name="InPath" value="." />
	<Var name="OutPath" value=".\Obfuscator_Output" />
	<Var name="HidePrivateApi" value="true" />

	<Module file="$(InPath)\hello.dll" />
</Obfuscator>

 

2.2.29 버전에서 .NET core 3.1 도 지원해 주는 것을 확인하였다.

빌드는 .Nuget 기준으로 \packages\obfuscar\2.2.29\tools\ 에 위치하기 때문에 다음과 같은 명령을 이용해서 난독화 할 수 있다. C:\Users\singl\ 은 필자의 유저 경로 이기 때문에 사용자 마다 다르다.

C:\Users\singl\.nuget\packages\obfuscar\2.2.29\tools\Obfuscar.Console.exe obfuscar.xml

난독화를 적용한 파일을 확인해 보면, 코드 분석이 어려워지는 것을 알 수 있다.

 

 

예제에서는 하나의 옵션만 사용했는데, 이외에도 사용 가능한 추천 옵션은 아래와 같다.

<?xml version='1.0'?>
<Obfuscator>
  <Var name="KeepPublicApi" value="false" />
  <Var name="HidePrivateApi" value="true" />
  <Var name="RenameProperties" value="true" />
  <Var name="RenameEvents" value="true" />
  <Var name="RenameFields" value="true" />
  <Var name="UseUnicodeNames" value="true" />
  <Var name="HideStrings" value="true" />
  <Var name="OptimizeMethods" value="true" />
  <Var name="SuppressIldasm" value="true" />
  <Module file="$(InPath)\MyApplication.exe" />
</Obfuscator>

세부적인 옵션과 그외 옵션에 대해서는 https://docs.obfuscar.com/getting-started/configuration.html#table-of-settings에서 확인하기 바란다.

 

 

반응형

댓글0