C#과 같은 Managed code(GC) 언어는 바이너리(exe, dll) 리버스 엔지니어링을 통하면 개발 소스와 거의 동일한 결과물(code)을 얻을 수 있다. 이러한 역공학을 쉽게 지원하는 툴은 대표적으로 ILSpy와 dotPeek 등이 있다. C# 언어에 문제가 있어서 역공학이 쉽다는 말이 아니고 Managed code(GC, ARC)의 언어(Java, Python etc)의 특징이다.
Database 연결 문자열과 같은 보안에 취약한 소스를 보호하기 위해 난독화(Obfuscation:리버스 엔지니어링을 적용하지 못하게 만드는 기술) 프로그램을 사용한다. 난독화한 바이너리는 디컴파일러를 하여도 원래의 소스 코드는 보이지 않고 읽기 어려운 소스 코드로 나타난다. 대표적은 난독화 프로그램은 상용인 Eazfuscator, Skater와 무료로 사용할 수 있는 ConfuserEx, obfuscar 등이 있다.
위의 이미지는 ConfuserEx를 실행했을 때의 화면이며, obfuscar는 콘솔프로그램으로써 아래의 절차에 따라 난독화를 진행한다.
obfuscar 사용법
nuget.org에서 Download package 파일(obfuscar.x.x.x.nupkg)을 다운로드 후 압축 해제(7-zip 추천)하고 이 중에서 ‘Obfuscar.Console.exe’ 콘솔 프로그램을 이용한다.
Obfuscar.Console.exe config.xml
<?xml version='1.0'?>
<Obfuscator>
<Var name="InPath" value=".\" />
<Var name="OutPath" value=".\output" />
<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)\xxx.dll" />
</Obfuscator>