.NET 코드는 디컴파일러를 통해 쉽게 복호화가 가능하다.
필자 역시 .NET을 이용하여 코드를 많이 작성하는데, 간혹 비밀키가 들어갔거나 암호화가 필요할 때 난독화를 항상 고민한다.
.NET 에서 사용할 수 있는 난독화 도구는 필자 기준으로 추천한다면, .NET기준 현재 유용한 도구는 Eazfuscator.NET이다. .NET 기준 디컴파일러로 가장 많이 손쉽게 이용되는 ILSPY를 통해 Eazfuscator.NET 을 이용하여 암호화 전/후를 비교해 보면 쉽게 차이를 알 수 있다.
ILSPY
https://github.com/icsharpcode/ILSpy/releases/tag/v6.2.1
만약 Hello World를 작성하면 아래와 같이 쉽게 코드를 확인 할 수 있다.
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에서 확인하기 바란다.
'.Net' 카테고리의 다른 글
.NET - STRING.FORMAT 입력 문자열의 형식이 잘못되었습니다. (0) | 2024.02.27 |
---|---|
.NET - Better Windows Event Log Conversion to JSON (0) | 2024.02.27 |
.NET - EXE에 모든 Dll, 리소스 포함하여 빌드하기 (0) | 2024.02.24 |
.NET/MVC - ActionLink 새창에서 열기 (0) | 2024.02.24 |
.NET/MVC - 기존 프로젝트에 WEB API 추가하기 (0) | 2024.02.24 |