// 기존 코드
private void CalcPayroll(SpecialList employeeGroup) {
while (employeeGroup.HasMore()) {
employee = employeeGroup.GetNext(true);
employee.UpdateSalary();
DistributeCheck(employee);
}
}
// 변경 코드
private void a(a b) {
while (b.a()) {
a = b.a(true);
a.a();
a(a);
}
}
- Map Output File
: 난독화 빌드시 식별자 변경에 따른 변경된 식별자와 고유 식별자 정보를 MAP 형태로 XML로 제공이 됩니다.
매핑된 MAP xml 파일이 필요성에 대해서는
Code Securit(Spear and Shield) : 04. Obfuscation
Design Tip And Notabilia 회차에서 다뤄볼 예정이니 잠시만 기다려주세요 : )
아직 나열 하지 않은 옵션들이 제법 많은데요 나머지 사항들은 유저 가이드를 통해 숙지 하시길 바랍니다.
이렇게 옵션을 활성화여 난하게 코드를 제 빌드가 가능한데요 실제 빌드를 통해서 어떻게 변겨잉 되었는지 확인 해보도록 하겠습니다.
[그림 1-3] Rename 적용된 어셈블러
위 그림을 보시면 네임스페이스와 일부 멤버변수(NameEng, NameKor)는 보존하였고 그외 Rename 한 흔적을 볼수 있습니다. [코드1]과 같이 간단한 코드이지만 만약 복잡한 코드라면 모든 부분이 a,b,c,d,e,f,g.....z 형태로 변경이 될수가 있는데요. 생각만해도 당혹스러울것 같습니다. 어떻게 본다면 네이밍 룰을 지키지 않고 코딩한것과 비슷한데요. a,b,c,d,e,f,g.....z 로 식별자가 변환된 코드를 본 여러분 라면 어떤 기분이 들까요?
Renaming 기능은 단순히 필드명에 대한 가독성을 떨어트리는 기능 뿐만아니라 심플한 식별자로 대체하기 때문에 실행 시간 또한 좀더 최적화 하며 1석 2조의 효과를 얻을수 있습니다. 다시 말씀 드리자면 프로그램 크기가 축소되고 실행속도가 빨라질 수 있습니다.
지금까지 Renaming 기능에 대해서 살펴보았는데요. 내용이 많아 짐에 따라 포스팅을 분리하게 되었습니다.
양해 말씀 드리며 다음 회차를 통해
Control Flow, String Encryption, Pruning 에 대해서 좋은 내용 전달 해도록 노력 하겠습니다.
참고 문헌
- Dotfuscator 4.0 : :
http://msdn.microsoft.com/ko-kr/library/ms227240.aspx
출처 :
http://blog.tobegin.net/45