어떤 파일이 DLL 입니까? 무슨 소용이 있습니까?
1. 동적 링크 라이브러리
동적 링크 라이브러리 (전체 이름: 동적 링크 라이브러리, 약어: DLL) 는 응용 프로그램에 확장 기능을 제공합니다. 응용 프로그램에서 DLL 파일을 호출하려면 "동적 링크" 가 필요합니다. 프로그래밍 관점에서 응용 프로그램은 호출하기 전에 DLL 파일에서 내보낸 API 함수를 알아야 합니다. DLL 파일 자체는 실행할 수 없으며 응용 프로그램 호출이 필요하다는 것을 알 수 있습니다. 다만 DLL 파일은 런타임 시 응용 프로그램의 메모리 모듈에 삽입해야 하므로 DLL 파일을 삭제할 수 없습니다. 이는 Windows 의 내부 메커니즘 때문입니다. 실행 중인 프로그램을 닫을 수 없습니다. 그래서 DLL 뒷문이 탄생했습니다!
2.DLL 백도어 원리 및 특성
백도어 기능을 구현하는 코드를 DLL 파일로 작성한 다음 EXE 파일에 삽입하여 실행할 수 있도록 합니다. 이렇게 하면 프로세스를 차지하거나 해당 PID 번호가 없어도 작업 관리자에서 숨길 수 있습니다. DLL 파일 자체와 EXE 파일은 크게 다르지 않지만 프로그램 (EXE) 에 의해 호출되어 DLL 파일을 실행해야 합니다. DLL 파일을 실행하려면 EXE 파일을 로드해야 하지만, EXE 는 DLL 파일을 로드하려면 DLL 파일의 포털 함수 (DLL 파일의 내보내기 함수) 를 알아야 합니다. 따라서 DLL 파일 작성 표준에 따라 EXE 는 EXE 의 mian () 과 같이 DLL 파일의 DLLMain () 을 로드 조건으로 실행해야 합니다. DLL 백도어를 만드는 두 가지 기본 방법이 있습니다. 1) DLL 파일의 모든 기능을 구현합니다. 2) DLL 을 시작 파일로 만들고 필요한 경우 일반 EXE 백도어를 시작합니다.
일반적인 쓰기 방법:
(1) DLL 파일이 하나만 있습니다.
이 뒷문은 간단합니다. 스스로에게 DLL 파일을 만들어 Rundll32.exe 를 사용하여 레지스트리 Run 키 값 또는 시스템에 의해 자동으로 로드될 수 있는 다른 곳에서 자동으로 시작됩니다. Rundll32.exe 란 무엇입니까? 구 밍은 "32 비트 DLL 파일 실행" 이라고 생각합니다. 이 기능은 DLL 파일에서 내부 함수를 실행하여 프로세스 중에 Rundll32.exe 만 있고 DLL 백도어 프로세스는 없으므로 프로세스가 숨겨집니다. 시스템에서 여러 RunDLL32.exe 를 볼 경우 당황하지 마십시오. 이는 얼마나 많은 dll 파일이 Rundll32.exe 로 시작되었는지 보여줍니다. 물론 RunDLL32.exe 가 실행하는 dll 파일은 무엇입니까? 시스템이 자동으로 로드되는 곳에서 찾을 수 있습니다.
이제 Rundll32.exe 파일을 소개하겠습니다. 즉, 명령줄을 통해 동적 링크 라이브러리를 호출하는 기능이 있습니다. 시스템에 "16 비트 DLL 파일 실행" 을 의미하는 Rundll.exe 파일도 있습니다. 여기 주의하세요. Rundll32.exe 가 사용하는 함수 프로토타입을 살펴 보겠습니다.
Void 콜백 함수 이름 (
HWND hwnd,
HINSTANCE hinst,
LPTSTR lpCmdLine,
Int nCmdShow
);
명령줄 아래의 사용 방법은 Rundll32.exe dllname, 함수 이름 [arguments] 입니다.
DLLname 은 실행할 DLL 의 파일 이름입니다. Functionname 은 이전에 실행할 DLL 파일의 특정 파생 함수입니다. [Arguments] 는 파생 함수의 구체적인 매개 변수입니다.
(2) 시스템에서 DLL 파일을 교체합니다
이런 껍데기는 위에 있는 것보다 약간 고급스럽습니다. 뒷문 기능을 구현하는 코드를 시스템과 일치하는 DLL 파일로 만들고 원본 DLL 파일의 이름을 바꿉니다. 응용 프로그램이 원본 DLL 파일을 요청하면 DLL 백도어 프로그램은 전달 기능을 시작하고 매개변수를 원본 DLL 파일로 전달합니다. 클라이언트와 같은 특별한 요청이 발생하면 DLL 백도어 시작, 시작, 실행 이러한 백도어의 경우 DLL 파일에서 모든 작업을 수행하는 것이 가장 안전하지만 많은 프로그래밍 지식이 필요하기 때문에 작성하기가 매우 어렵습니다. 따라서 이러한 백도어는 일반적으로 DLL 파일을 "시작" 파일로 만들어 클라이언트 요청과 같은 특수한 상황에서 일반 EXE 백도어를 시작합니다. 클라이언트가 연결을 마치면 EXE 백도어를 중지하면 다음 클라이언트 연결이 시작될 때까지 DLL 파일이 "휴면" 상태로 들어갑니다. 그러나 Microsoft 의' 디지털 서명' 과' 파일 복구' 기능이 출시됨에 따라 이런 뒷문은 점차 미미해졌다.
힌트:
WINNT/system32 디렉토리에는 몇 가지 중요한 EXE 파일을 포함한 많은 DLL 파일이 들어 있는 dllcache 폴더가 있습니다. DLL 파일이 불법적으로 수정되면 수정된 DLL 파일이 여기에서 복구됩니다. DLL 파일을 수정하려면 먼저 DLLcache 디렉토리에서 같은 이름의 dll 파일을 삭제하거나 이름을 바꿔야 합니다. 그렇지 않으면 시스템이 자동으로 복구됩니다.
(3) 동적 임베디드 시스템
이것은 DLL 뒷문에서 가장 일반적으로 사용되는 방법입니다. 이는 DLL 파일을 실행 중인 시스템 프로세스에 포함시키는 것을 의미합니다. Windows 시스템에서 각 프로세스에는 자체 전용 메모리 공간이 있지만 프로세스의 전용 메모리 공간으로 동적 임베딩을 수행하는 다양한 방법이 있습니다. 시스템의 핵심 프로세스가 종결될 수 없기 때문에 이런 뒷문은 매우 은밀하여 조사하기가 매우 어렵다. 일반적인 동적 포함은 "후크 API", "전역 후크", "원격 스레드" 등입니다.
원격 스레드 기술은 한 프로세스에서 원격 스레드를 만들어 프로세스에 들어가는 메모리 주소 공간입니다. EXE 캐리어 (또는 Rundll32.exe) 가 삽입된 프로세스에서 원격 스레드를 만들고 DLL 파일을 실행하도록 명령하면 DLL 백도어가 일시 중지되고 실행되므로 새 프로세스가 생성되지 않습니다. DLL 백도어를 중지하려면 DLL 백도어 연결 프로세스를 중지해야 합니다. 그러나 시스템의 일부 주요 프로세스에 연결되어 있으면 종료할 수 없습니다. 시스템 프로세스를 종료하면 Windows 가 즉시 종료됩니다! ! !
3.DLL 백도어 시작 기능
EXE 는 DLL 뒷문을 작동시키는 운반체로서 필수적이며 매우 중요합니다. 이를 로더라고 합니다. 로더가 없으면 DLL 뒷문은 어떻게 작동합니까? 그래서 좋은 DLL 뒷문은 자신의 로더를 살해당하지 않도록 보호하기 위해 최선을 다할 것이다. Loader 는 Dell 백도어를 위해 특별히 작성된 EXE 파일이 될 수 있는 여러 가지 방법이 있습니다. 시스템과 함께 제공된 Rundll32.exe 일 수도 있습니다. RunDLL32.exe 가 중지된 경우에도 dll 백도어 바디가 계속 존재합니다. 372 1 인터넷 실명이 그 예입니다.' 진짜' 뒷문은 아니지만.
둘째, DLL 의 정리
이 섹션에서는 잘 알려진 세 가지 DLL 백도어인 "SvchostDLL.dll", "BITS.dll" 및 "QoServer.dll" 을 예로 들어 설명합니다. 수동 제거 방법을 자세히 설명합니다. 여러분 모두 이 세 가지 DLL 뒷문을 청소하는 방법을 다 보시면, 역삼, 융통성 있게 운용할 수 있습니다. DLL 의 뒷문을 두려워하지 마세요. (데이비드 아셀, Northern Exposure (미국 TV 드라마), 성공명언) 실제로 DLL 뒷문을 수동으로 지우는 것은 비교적 간단하다. 단지 레지스트리에 글을 쓰는 것뿐이다. 구체적으로 어떻게 하는지 아래를 보세요.
1, 포트 백도어 없음
이 프로그램은 로컬 시스템 권한을 가진 셸 (프로그램 도움말 참조) 뿐 아니라 "클론 계정 감지", "터미널 서비스 설치" 와 같은 다양한 기능을 지원하는 강력한 Shell 백도어 프로그램입니다. Windows2000/xp/2003 과 같은 시스템에서 사용할 수 있습니다. Svchost.exe 는 프로그램을 시작하는 데 사용됩니다. 평소 포트를 열지 않으면 반접할 수 있습니다 (가장 큰 특징은 오). 이 기능은 _blank "> 가 있는 방화벽 호스트에게 완벽합니다.
정리 방법을 소개하기 전에 svchost.exe 의 주요 서비스에 대해 간단히 소개하겠습니다.
서비스로서의 숙주, Svchost 는 어떤 기능도 구현하지 않는다. Svchost 를 사용하여 서비스를 시작해야 하는 경우 서비스는 Svchost 를 가리키는 DLL 로 구현됩니다. 따라서 서비스를 시작할 때 svchost 는 서비스 DLL 을 호출하여 시작 목적을 달성합니다. Svchost 를 사용하여 서비스를 시작하는 DLL 파일은 레지스트리의 매개변수에 의해 결정됩니다. 시작할 서비스 아래에는 parameters 하위 항목이 있습니다. 여기서 ServiceDll 은 서비스를 담당하는 Dll 파일을 나타내며, 이 DLL 파일은 서비스 작업 처리를 지원하기 위해 ServiceMain () 함수를 내보내야 합니다.
하하! 위의 이론을 보면 좀 혼란스럽지 않아요. (거의 잠이 들 뻔했어요.) 서두르지 마세요. 구체적인 내용을 봅시다. HKEY _ local _ machine system 의 현재 제어 서비스인 sRPCSS 아래에서 키 값이% systemroot% system32RPCSS.dll 인 Parameters 의 1 차 하위 구성요소를 볼 수 있습니다. 즉, RpcSs 서비스가 시작될 때 Svchost 는 WINNTsystem32 디렉토리에서 rpcss.dll 을 호출합니다.
레지스트리의 HKEY _ local _ machine 소프트웨어인 Microsoft windows ntcurrentversionSvchost 는 Svchost 가 시작한 그룹과 그룹 내 서비스를 저장합니다. 이 중 netsvcs 그룹이 가장 많은 서비스를 제공합니다. Svchost 를 사용하여 서비스를 시작하려면 서비스 이름이 HKEY _ local _ machine software Microsoft windows ntcurrentversionsvchost 아래에 나타납니다. 이를 수행하는 방법에는 네 가지가 있습니다.
1, 새 그룹 추가, 그룹에 서비스 이름 추가.
2. 기존 그룹에 서비스명을 추가합니다.
3. 기존 그룹의 서비스명을 직접 사용합니다. 이 컴퓨터에는 서비스가 설치되어 있지 않습니다.
4. 기존 그룹의 기존 서비스를 수정하고 해당 ServiceDll 을 자신의 Dll 뒷문으로 가리킵니다.
내가 테스트한 포트 없는 뒷문이 사용하는 세 번째 방법.
네, 위의 원리를 보고 싶습니다. 당신은 우리가 포트 없는 뒷문을 지우는 방법을 분명히 생각할 수 있을 것입니다. (데이비드 아셀, Northern Exposure (미국 TV 드라마), 포트 없는 뒷문명언) 맞습니다. 레지스트리의 Svchost 키 아래에서 글을 쓰는 것입니다. 좋아, 이제 시작 하자.
참고: 이 문서에서는 청소 방법만 소개하므로 여기서는 사용 방법을 생략합니다.
백도어 로더는 SvchostDLL.dll 을 Svchost 프로세스에 삽입합니다. 따라서 먼저 Windows 최적기에서 Windows Process Management 2.5 를 열고 Svchost 프로세스의 모듈 정보를 확인합니다. SvchostDLL.dll 이 Svchost 프로세스에 삽입되었습니다. "기존 그룹 중 하나의 서비스 이름을 직접 사용하지만 기본적으로 서비스가 설치되어 있지 않다" 는 힌트에 따라 "관리 도구" 에 새로운 서비스인 "서비스" 가 있을 것이라고 단정할 수 있다. 서비스 이름은 IPRIP, Svchost 에서 시작, -k netsvcs 는 이 서비스가 netsvcs 서비스 그룹에 포함되어 있음을 증명했습니다.
서비스를 중지하고 레지스트리 편집기 (시작-실행-레지스트리 편집) 를 열고 HKEY _ local _ machine system control setup SiPrep 으로 이동하여 매개변수 하위 항목을 확인해 보겠습니다. 프로그램 키의 키 값 SvcHostDLL.exe 는 로더입니다. 뒷문 ServiceDll C 의 키 값: WINNTsystem32svchostDLL. Dll 은 호출되는 dll 파일이고, 바로 뒷문의 DLL 파일입니다. 이제 IPR 1 차 하위 구성요소를 삭제 (또는 SC 로 삭제) 한 다음 HKEY _ 로컬 _ 기계 소프트웨어 Microsoft windows ntcurrentversionsvchost 로 이동하여 netsvcs 서비스 그룹을 편집하고 4900 70 0072 00 6900 70 0000000 을 삭제합니다. 그런 다음 종료하고 다시 시작합니다. 재부팅 후 WINNTsystem32 디렉토리에서 백도어 파일을 삭제합니다.
2, BITS.dll
이것은 영형의 작품이자 SvchostDLL.dll 의 원리와 거의 같지만, 여기에 소개된 네 번째 방법, 즉 "기존 그룹의 기존 서비스를 수정하여 자신의 DLL 뒷문을 가리키는 서비스" 를 사용한다. (알버트 아인슈타인, Northern Exposure (미국 TV 드라마), Northern Exposure (미국 TV 드라마), 예술명언) 즉, 뒷문은 기존 서비스를 수정하여 원래 서비스의 DLL 을 자체 (즉, BITS.dll) 로 가리켜 자동 로드 목적을 달성합니다. 둘째, 뒷문에는 자체 로더가 없으며 시스템과 함께 제공된 Rundll32.exe 를 사용하여 로드됩니다. Windows 프로세스를 사용하여 2.5 를 관리합시다. 그림 7 에서 bits.dll 이 Svchost 프로세스에 삽입되었음을 알 수 있습니다.
자, 이제 구체적인 제거 방법을 살펴보겠습니다. 뒷문은 기존 서비스를 수정하는 것이기 때문에 어떤 서비스를 수정해도 알 수 없기 때문에 레지스트리에서 bits.dll 을 검색한 후 마지막으로 HKEY _ local _ machine system currentcontrolsetservicesrasauto 에서 bits 를 검색했습니다 그림 8 과 같이 Parameters 의 하위 항목 아래에 있는 ServiceDll 을 보면 키 값은 C:WINNTsystem32bits.dll 입니다. 원래 뒷문은 RasAuto 서비스의 원래 DLL 파일을 bits.dll 로 교체하여 자동 로드를 가능하게 했습니다. 원인을 쉽게 알 수 있다. 이제 ServiceDll 의 키 값을 RasAuto 서비스의 원본 Dll 파일인% systemroot% system32Rasauto 로 변경하겠습니다. 종료하고 다시 시작합니다. 그런 다음 WINNTsystem32 디렉토리에서 bits.dll 을 삭제합니다.
3, 블랙 여왕
NOIR-QUEEN 은 DLL 백도어&; 트로이 목마 프로그램, 서버가 시스템의 Lsass.exe 프로세스에 DLL 파일로 삽입됩니다. Lsass.exe 는 시스템의 핵심 프로세스이므로 종료할 수 없습니다. 제거 방법을 소개하기 전에 먼저 Lsass.exe 프로세스를 소개하겠습니다.
이는 Winlogon 서비스를 사용하는 권한이 있는 사용자를 위한 프로세스를 생성하는 로컬 보안 권한 부여 서비스입니다. 인증이 성공하면 Lsass 는 초기 셸을 시작하는 사용자의 포털 토큰을 생성합니다. 다른 사용자가 시작한 프로세스는 이 토큰을 상속합니다.
위의 소개에서 시스템에 대한 Lsass 의 중요성을 알 수 있습니다. 그러면 어떻게 제거할까요? 아래를 보세요.
백도어 설치가 성공하면 QoSserver 라는 서비스가 서비스에 추가되고 QoSserver.dll 백도어 파일이 Lsass 프로세스에 삽입되므로 프로세스를 숨기고 자동으로 시작할 수 있습니다 (그림 9 참조). 이제 레지스트리를 열고 HKEY _ local _ machine system 의 현재 제어 설정 서비스인 sQosserver 로 들어가 Qosserver 키를 직접 제거한 다음 재부팅합니다. 재부팅 후 서비스 목록에 도착하면 QoS 서버 서비스가 아직 있지만 시작되지 않았음을 알 수 있습니다. 범주는 자동이므로 사용 안 함으로 변경하겠습니다. 그리고 위를 보면, AppCPI 라는 서비스가 있습니다. 그 실행 프로그램은 1 1 과 같이 QoSserver.exe 를 가리키고 있습니다. 레지스트리를 다시 열고, HKEY _ local _ machinersystemcurrentcontrolsetserviceAppCPI 로 들어가, appcpi 키를 삭제하고, 다시 시작하고, QoS 서버를 삭제하고, 마지막으로 winnt system 을 삭제합니다
이 뒷문은 내가 3 시간 넘게 고민하다가 N 번을 다시 시작했다. 그 이유는 QoSserver 서비스가 제거된 후에도 뒷문이 여전히 실행 중이며 서비스 목록에 있는 QoSserver 서비스가 "부활" 되었기 때문입니다. 나중에 그 이유를 알게 되었습니다. qoss server 서비스를 삭제하고 재부팅한 후, Lsass 프로세스에 삽입된 QoSserver.dll 파일이 qoss server 서비스를 복구하고 또 다른 서비스 AppCPI 를 생성했습니다. 따라서 뒷문을 지우려면 레지스트리에서 AppCPI 서비스를 삭제해야 합니다. 현재 뒷문의 방호 조치가 정말 버클이라는 것을 알 수 있다.
참고: QoSserver 서비스를 삭제하고 다시 시작한 후 복구된 QoSserver 의 시작 범주를 비활성화로 변경해야 합니다. 그렇지 않으면 AppCPI 서비스를 삭제해도 QoSserver 서비스가 다시 실행됩니다.
셋째, DLL 예방
위의 예를 보면, 모든 사람들이 DLL 백도어를 지우는 방법에 대해 어느 정도 알고 있다고 생각하지만, 실제로 DLL 백도어는 기본 파일 이름을 사용하지 않으므로 DLL 백도어에 당첨되었는지 확실하지 않습니다. System32 디렉토리는 DLL 백도어에 좋은 곳이고 대부분의 백도어도 마찬가지이므로 여기서 각별히 주의해야 합니다. DLL 의 뒷문을 찾는 방법에 대해 자세히 설명하겠습니다. 여러분께 도움이 되기를 바랍니다.
1, 시스템과 모든 어플리케이션을 설치한 후 system32 디렉토리에 있는 EXE 및 DLL 파일 백업: CMD 열기, WINNTsystem32 디렉토리로 이동, 실행: dir *. Exe & gtexe.txt & ampdir * 입니다. Dll & gtDll.txt 를 사용하면 모든 EXE 및 dll 파일이 exe.txt 및 dll.txt 파일에 백업됩니다. 나중에 예외가 발견되면 같은 명령을 사용하여 EXE 및 DLL 파일 (여기서는 exe0.txt 및 dll0.txt 로 가정) 을 다시 백업할 수 있습니다. fcexe.txtexe0.txt > Exe dll.txt & amp fc dll.txt dll 0.txt > Exedll.txt 는 FC 명령을 사용하여 EXE 파일과 dll 파일을 두 번 비교하고 비교 결과를 exedll.txt 파일에 저장한다는 의미입니다. 이렇게 하면 불필요한 EXE 및 DLL 파일을 찾아 파일 크기와 생성 시간을 통해 DLL 백도어인지 여부를 확인할 수 있습니다.
2. 메모리/모듈 도구를 사용하여 프로세스가 호출하는 DLL 파일 (예: Windows 최적기의 Windows Process Management 2.5) 을 봅니다. 이를 통해 프로세스가 호출하는 DLL 파일을 찾을 수 있으며 위의 FC 명령과 비교한 결과를 결합하여 DLL 백도어가 제거되었는지 여부를 더욱 확인할 수 있습니다. 최적기가 없으면 TaskList 를 사용할 수 있습니다. 이 가젯은 또한 프로세스가 호출하는 DLL 파일과 소스 코드를 표시하여 쉽게 수정할 수 있습니다.
3. 일반 백도어 연결에는 특정 포트를 열어야 합니다. DLL 백도어도 예외는 아닙니다. 아무리 은폐해도 연결시에는 포트를 열어야 합니다. Netstat -an 을 사용하여 모든 TCP/UDP 포트 연결을 점검하여 잘못된 연결을 찾을 수 있습니다. 여러분은 자신이 어떤 포트를 열었는지 알고 있어야 하며, netstat -an 의 state 속성에 대해 잘 알고 있어야 합니다. 물론 Fport 를 사용하여 포트의 해당 프로세스를 표시할 수도 있으므로 시스템의 알 수 없는 연결 및 포트에 대한 파노라마를 이해할 수 있습니다.
4. 레지스트리, Winstart.bat, Autoexec.bat, win.ini, system.ini, wininit.ini, autoots 등 시스템이 자동으로 로드되는 곳을 정기적으로 확인합니다 둘째, 서비스를 관리하고 시스템 기본 서비스를 이해합니다. 문제가 있는 서비스가 발견되면 Windows 2000 Server Resource Kit 에서 SC 를 사용하여 제거할 수 있습니다. 이러한 모든 장소는 DLL 백도어 로더를 로드하는 데 사용할 수 있습니다. DLL 백도어 로더를 삭제하면 무엇을 물어볼 수 있습니까? DLL 뒷문은 어떻게 작동합니까? !
이러한 접근 방식을 통해 대부분의 DLL 백도어를 "공개" 할 수 있다고 생각합니다. 평소 백업을 많이 하면 DLL 백도어를 찾는 것이 더 적은 비용으로 더 많은 작업을 수행할 수 있습니다.
부언
이 기사에서는 DLL 뒷문에 대한 몇 가지 지식을 자세히 설명합니다. 사실, 위에서 볼 수 있듯이, DLL 의 뒷문은 생각보다 무섭지 않고 청소도 비교적 간단합니다. 문장 시작: "모든 사람들이 DLL 뒷문에" 빠른 시작 "을 할 수 있도록 설계 되었습니다, 그래서이 서투른 문장 당신을 도울 것입니다 바랍니다. 글에 착오가 있으면 양해해 주십시오. 감사합니다.
참고 자료:
2005 년 2 월 3 일. Html 파일의 접미사