나는 이름 난독화를 연구했고 최근에는 문자열 암호화에 관한 몇 가지 내용을 읽었습니다.
난독화 보호 및 암호화 쉘에는 문자열 암호화 보호 기능이 있습니다.
일반적으로 문자열 암호화는 두 가지 범주로 나눌 수 있습니다.
첫 번째 범주는 난독화 보호 분야의 문자열 암호화 기술입니다. 주요 기능은 코드 실행 경로를 수정하는 것입니다.
대부분의 난독화 보호 도구에서 사용되는 문자열 암호화가 이 범주에 속합니다.
두 번째 범주는 암호화 셸의 문자열 암호화 기술입니다. 이 방법은 IL 코드를 수정하지 않고 메타데이터의 문자열을 직접 암호화합니다.
이 범주는 Remotesoft 및 maxtocode로 표시됩니다.
먼저 첫 번째 카테고리를 살펴보겠습니다. 암호화 구현은 대략 다음과 같습니다.
암호화 전:
MessageBox.Show("Hellow World!");
암호화 후:
MessageBox.Show(Helper.Decode("A34579dfbbeyu346563345/=="));
간단히 말하면, 원래 문자열을 사용하던 곳에서 문자열을 직접 사용하던 방식이 문자열을 간접적으로 사용하던 방식으로 변경됩니다.
여기서 보호 소프트웨어는 "Hellow World!" 문자열을 암호화하고 "A34579dfbbeyu346563345/==" 결과를 얻습니다.
Helper.Decode는 "A34579dfbbeyu346563345/=="를 "Hellow World!"로 복원하는 보호 소프트웨어에서 제공하는 암호 해독 기능입니다.
난독화 방지이기 때문에 디코딩된 코드를 분석하고 얻을 수 있습니다. 그런 다음 이 함수의 코드를 직접 사용하여 어셈블리의 모든 암호화된 문자열을 복원하는 작은 도구를 작성합니다. 문자열 대응표를 생성합니다. 코드 읽기 및 디버깅을 용이하게 합니다.
더 깊이 들어가면 문자열을 원래 어셈블리로 자동 복원할 수 있습니다.
위 예시의 IL 코드를 살펴보겠습니다.
암호화 전:
ldstr "안녕하세요!"
MessageBox.Show(string)을 호출합니다
.
ldstr "A34579dfbbeyu346563345/=="
호출 문자열 Helper.Decode(string)
MessageBox.Show(string) 호출을
은 실제로 매우 간단합니다. 우리는 이미 디코드 코드를 알고 있으며 문자열을 해독할 수 있습니다. 해당 문자열 테이블이 얻어집니다.
ldstr "A34579dfbbeyu346563345/=="
직접 변경
호출 문자열 Helper.Decode(string)
ldstr "Hellow World"
로 바꾸세요
. 정규식을 사용하여 검색하고 바꾸는 작은 도구를 작성하기만 하면 됩니다.
두 번째 유형의 문자열 암호화 보호:
구현은 메타데이터의 문자열 스트림을 직접 암호화하는 것입니다.
이러한 유형의 보호에는 결함이 있습니다. 프로그램이 실행된 후 메타데이터의 문자열 스트림이 해독되어 메모리에 완전히 복원됩니다. 이전 기사에서는 메타데이터 덤프를 소개했습니다. 여기서는 반복하지 않겠습니다.
첫 번째 유형의 문자열 암호화 보호에는 다른 형식이 있습니다. 예를 들어 Helper.Decode 함수는 기본 함수일 수 있습니다.
아니면 프로세스와 혼합됩니다.