Dotfuscator를 사용하여 만든 응용 프로그램 난독 처리(Visaul Studio 2022 버전)
요약
.NET 시리즈 프레임워크를 기반으로 하는 응용 프로그램은 공통 중간 언어라고 하는 언어로 만들어지므로 디스어셈블리 도구 등을 사용하여 원본 소스 코드에 가까운 형식으로 읽을 수 있습니다. 이 섹션에서는 Visual Studio와 함께 제공되는 난독 화기 도구인 Dotfuscator의 무료 버전을 사용하여 클래스 및 메서드 이름을 쉽게 읽을 수 없는 형식으로 난독 화하는 방법에 대해 설명합니다.
Visual Studio 2022를 사용하여 설명되지만 다른 버전의 Dotfuscator에서도 사용할 수 있습니다.
운영 환경
- 비주얼 스튜디오
-
- 비주얼 스튜디오 2022
도트퓨세이터 소개
Dotfuscator는 .NET 프레임 워크 제품군 (이하 .NET이라고 함)으로 작성된 응용 프로그램에 대해 디스 어셈블 할 때 소스 코드를 읽기 어렵게 만드는 난독 화 도구입니다. Dotfuscator는 무료 및 유료로 Visual Studio와 함께 제공됩니다.
무료 버전은 많은 기능이 제한되거나 Visual Studio가 시작되지 않는 한 사용할 수 없지만 Visual Studio가 설치되어 있는 한 누구나 사용할 수 있습니다. 유료 버전에는 무료 버전에서 찾을 수없는 많은 강력한 난독 화 기능이 있지만 일반 대중이 감당하기 어려운 가격으로 제공됩니다.
Dotfuscator는 버전에 따라 기능, 가격 및 에디션이 다르므로 자세한 내용은 다음 홈페이지를 참조하십시오.
분해에 관하여
NET으로 작성된 응용 프로그램은 원래 소스 코드를 쉽게 디스 어셈블하고 읽을 수 있다고 앞에서 언급했지만 실제로 일어나는 일은 다음 그림과 같이 .exe 파일 (또는 .dll 파일)을 디스 어셈블하면 네임 스페이스, 클래스 이름, 메서드 이름 등과 같은 원래 소스 코드를 거의 재현 할 수 있다는 것입니다.
난독 화해야하는 프로그램 유형
주로 지정되지 않은 사용자에게 배포되고 실행되는 프로그램에 적용됩니다. 예를 들어, 데스크톱 응용 프로그램. 반대로 프로그램 파일에 직접 액세스하는 데 어려움이 있는 웹 응용 프로그램은 난독화에 덜 중요합니다.
이번에는 데스크톱 응용 프로그램인 WPF의 프로젝트를 살펴봅니다.
도트퓨세이터 설치
이 응용 프로그램은 Visual Studio 2022와 함께 제공되지만 표준 설치에는 포함되어 있지 않습니다 (일부 과거 Visual Studios에서는 처음부터 설치 될 수 있음).
Dotfuscator를 추가하려면, Visaul Studio를 시작하고 도구에서 도구 및 기능 가져오기를 선택합니다.
위의 탭에서 "개별 구성 요소"를 선택하고 "코드 도구"그룹에서 "선점 보호 - Dotfuscator"를 확인한 다음 오른쪽 하단에있는 설치 버튼을 클릭하십시오. 이렇게 하면 Visual Studio 콘솔을 닫습니다.
난독화 절차
이러한 이름을 혼동하고 난독 화시키는 단계를 설명합니다.
Visual Studio에서 응용 프로그램.exe 만들고 파일을 빌드한 다음 을 클릭합니다. dll 파일을 만듭니다. 지금까지 이것은 일반 응용 프로그램을 만드는 것과 같습니다. 만드는 앱은 릴리스 빌드에서 만든 앱을 위한 것이어야 합니다. (일반적으로 디버그에 게시하지 않기 때문입니다.)
.exe 또는 .dll을 만든 후 Visual Studio 메뉴에서 도구를 선택한 다음 선점 보호 - Dotfuscator 커뮤니티를 선택합니다.
등록 화면이 표시되지만 필수는 아니므로 불필요한 경우 취소 버튼을 그대로 클릭하십시오.
상태를 유지하고 확인 단추를 클릭합니다.
도트퓨세이터가 시작됩니다. 응용 프로그램은 자체적으로 작동하므로 현재 열려 있는 프로젝트와 관련이 없는 파일을 난독화할 수 있습니다. (응용 프로그램 자체의 무료 버전의 경우 Visual Studio가 시작되었다고 가정합니다.) )
이 기사에서는 기본값으로 빌드 된 .NET 6.0 WPF 응용 프로그램 프로젝트를 샘플로 난독 화합니다.
왼쪽 목록에서 "입력"을 선택하고 "+"버튼을 클릭하십시오.
난독 화 할 프로그램 파일을 선택하십시오. .NET Framework로 작성된 응용 프로그램은 종종 .exe 난독 화하지만 .NET 및 .NET Core에서는 프로그램이 엔터티.dll는 경우가 많습니다. NET WPF 응용 프로그램에도 .dll 엔터티가 있으므로 .dll을 선택합니다.
목록에 추가됩니다. 여러 DLL로 구성된 경우 둘 이상을 추가합니다.
대상 파일을 추가 한 후 도구 모음에서 "빌드"버튼을 클릭하십시오.
난독 화 된 프로젝트 파일을 저장할 위치를 묻는 메시지가 표시되므로 지정하십시오. 위치는 임의적일 수 있지만 난독 화 된 프로그램의 출력 위치 일 수도 있습니다. 입력을 저장하고 다시 난독 화하려는 경우이 난독 화 프로젝트 파일을 엽니 다. 확장자는 "입니다. xml".
빌드가 시작되고 아래 메시지에 "빌드 완료"가 표시되면 성공적으로 완료되었음을 나타냅니다. 화면에는 빌드 로그와 난독 화 된 클래스 및 변수 목록이 표시됩니다.
왼쪽 목록에서 "결과"를 선택하여 클래스 및 메서드 이름이 어떻게 변경되었는지에 대한 세부 정보를 확인하십시오.
오른쪽의 트리에 있는 클래스 이름과 메서드 이름(예: "->")은 난독화 뒤의 이름입니다. 클래스 이름이나 메서드 이름을 이와 같이 의미없는 이름으로 변경하면 소스 코드의 내용이 디스어셈블되어도 읽기 어렵게 만들 수 있습니다.
난독 화 된 프로그램은 프로젝트 파일을 저장 한 위치의 "Dotfuscated"라는 폴더에 저장됩니다.
Map.xml는 난독화 결과 파일이므로 안전하게 삭제할 수 있습니다.
.NET 6.0 WPF는 DLL만으로는 시작할 수 없으므로 빌드 시 생성된 "XXXX.exe" 및 "XXXX.runtimeconfig.json"을 동일한 폴더에 복사하고 시작합니다. 정상적으로 시작할 수 있다면 당분간은 아무런 문제가 없습니다. 시작할 수 없으면 파일이 누락되었거나 난독 화로 인해 일관성이없는 프로그램을 만들 수 있습니다.
실제로 난독 화 된 프로그램을 분석하면 난독 화의 흔적을 볼 수 있습니다. 아래 그림의 첫 번째 시트는 난독 화 전이고 두 번째 시트는 난독 화 후입니다.
.NET 라이브러리에 정의된 클래스 이름은 프레임워크로 존재하기 때문에 이름을 변경할 수 없습니다.
이번에는 생성 된 기본 프로젝트를 그대로 난독 화했기 때문에 거의 난독 화되지 않은 이미지가 있다고 생각하지만 프로젝트가 클수록 고유 한 클래스가 증가하기 때문에 난독 화의 효과가 분명해진다고 생각합니다.
또한 이번에는 무료 버전에 절차를 포함했지만 유료 버전은보다 복잡한 난독 화를 허용하고 분해 자체를 방지합니다. 그러나 난독 화는 다양한 부작용과 발생할 가능성이 있으므로 난독 화를 수행 할 때 설계 초기부터 제대로 작동하는지 여부를 고려하면서 난독 화해야합니다.
난독화 제외
난독 화하지 않으려는 클래스 또는 속성 이름이 있으면 제외 할 수 있습니다.
어셈블리가 로드되는 동안 화면 왼쪽에서 이름 바꾸기 > 제외를 선택합니다. 어셈블리의 내용이 표시되기 때문에 난독 화하고 싶지 않은 내용을 확인합니다.
세분화 된 수준에서 난독 화를 제외 할 수는 있지만 네임 스페이스 기준으로 조정하는 것이 더 쉽다고 생각합니다.
라이브러리 모드
입력 어셈블리를 선택하면 "라이브러리 모드"가 선택되어 있음을 알 수 있습니다.
"라이브러리 모드"는 다른 프로그램에서 호출 할 수있는 DLL에 연결하는 것입니다. 이 옵션을 선택하면 다른 프로그램에서 호출하는 공용 클래스 및 속성이 난독 화에서 제외됩니다.
그러나 일반적으로 다른 프로그램에서 생성 적으로 호출되는 라이브러리를 노출하는 것은 드물며 단독으로 작동하는 응용 프로그램에 난독 화되는 경우가 많기 때문에이 검사를 기본적으로 제거하는 것이 좋습니다.
단일 파일 .exe의 난독화(확인되지 않음)
Visual Studio 2022에서 이 항목에 대한 조사는 현재 확인되지 않았습니다.
아마도 MSBuild로 난독 화 될 것이지만 현재 정보가 부족하기 때문에 보류 중입니다.