VC 미리 주입.net 소프트웨어 방법

앞의 몇 절에서 각종 주입 방법을 소개했지만, 이러한 방법에는 약간의 결함이 있다. 그렇지.net 프로그램 주입이 잘못되었습니다.(전재는 출처를 밝혀 주십시오)
이건 이해할 수 있지만..net 프로그램의 코드는 어셈블리가 아니라 Microsoft에서 사용자 정의한 IL 중간 언어입니다.netCLR은 가상 시스템처럼 이러한 중간 언어를 해석하고 실행합니다.
그래서 우리가 전에 말한 파일 입구점을 수정하는 방법은 여기서 조금도 효과가 없다. E8(Call)이 IL에서 무엇인지 누가 알겠는가!
원거리 노선 방법도 문제가 있다.미리 주입해야 하므로 프로세스를 작성할 때 CREATE 를 사용합니다.SUSPENDED는 프로세스를 마운트하는 방식으로 시작하지만, 우리Create Remote Thread가 실행되지 않은 것을 놀라게 할 것이다. 더욱 놀라운 것은 괴뢰 프로세스 (.net 프로그램 프로세스) 의 주 프로세스가 부활한 것이다.어셈블러 디버깅Create Remote Thread에서 win32 프로그램에 대해 원격 루틴을 만들 때 끊기고 몇 가지 작업을 실행한 후에ResumeThread가 원격 루틴을 실행하는 것을 발견했습니다.하지만net 프로그램, ResumeThread 이후 주 스레드가 부활합니다.
그럼 어떻게 해결할까요?우리는 주입할 수 있다.net CLR.전체 국면이 주입되면.nt CLR이 가능하다면 결과는 우리가 예상한 것이 아니다. 왜냐하면 우리는 우리가 관심을 가지는 프로세스를 감시하기만 하면 다른 프로세스는 우리가 관심을 가지려고 하지 않기 때문이다.나는 VC 프로그래머여서 C# 등에 대해 아무것도 모르기 때문에 이 문제를 하는 것은 크로스오버하는 것과 같다.Code Project와 Daniel Pistelli를 찾아주셔서 감사합니다.NET Internals and Code Injection 기사이 글에서 한 가지 방법을 소개했는데, 이 방법의 대체적인 사고방식은 하나를 모의하는 것이다.netCLR - 실행할 수 있습니다.net 프로그램.그래서 우리는 우리가 주입해야 할 것을 확정할 수 있다.net 프로그램의 경계.이 점은 매우 중요하다. 사실 만약에.net 프로그램이 실행된 후에, 우리는 원거리 라인 주입을 사용해도 성공했다.다만 우리가 해야 할 일은 미리 주입하는 것이다. 무엇이'전'인가?얼마가 앞입니까?이'경계'는 여기서 매우 중요한 역할을 한다.우리 시뮬레이션 때문에.netCLR 프로그램이 아날로그 꼭두각시를 준비하고 있습니다.net 프로그램 전,.net 환경은 틀림없이 준비되었을 것이다.따라서 우리는 시뮬레이션을 하기 전에, 우리의 시뮬레이션 프로그램이 우리가 주입하려고 하는 DLL - 변형 주입을 스스로 불러오기만 하면 된다.이것은 사람을 흥분시키는 방안이다.
4
using System;
using System.Collections.Generic;
using System.Windows.Forms;

using System.Runtime.InteropServices;

namespace rbloader
{
    static class Program
    {
        [DllImport("HookDll.dll")]
        static extern void ExportFun();

        [STAThread]
        static void Main(string[] args)
        {
            ExportFun();
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            OpenFileDialog openFileDialog = new OpenFileDialog();

            openFileDialog.Filter = "Exe Files (*.exe)|*.exe|Dll Files (*.dll)| *.dll|All Files (*.*)|*.*";
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                AppDomain ad = AppDomain.CreateDomain("subAppDomain");
                ad.ExecuteAssembly(openFileDialog.FileName);
            }
        }
    }
}
그 중에서 HookDll.dll은 제 앞의 몇 편의 글에서 DLL 파일을 주입하는 데 사용되었는데 앞의 글의 맨 뒤에 이 파일 프로젝트 다운로드 주소를 제공했습니다.ExportFun은 HookDll입니다.CreateProcessW 등의 함수를 차단하는 dll의 내보내기 함수
사실 이 방안도 결함이 존재한다. 왜냐하면 그것은 시뮬레이션이기 때문이다.내가 시뮬레이션이라는 단어를 사용하는 것은 진정한 집행체는 괴뢰의 진행이 아니라 그 자신이기 때문이다.꼭두각시 프로세스 파일은 프로세스를 시뮬레이션하는 입력 정보일 뿐입니다.가장 직접적인 표현은 우리가 아날로그 프로세스를 A.exe라고 하고 꼭두각시 프로세스는 B.exe이다. 우리는 A.exe로 B.exe를 실행하면 프로세스 목록에 A.exe만 존재하고 B.exe는 존재하지 않는다는 것을 발견할 수 있다.그래서 우리는 B.exe에서 현재 프로세스의 경로나 현재 파일 이름을 얻을 수 있다. 예를 들어 A.exe가 B.exe를 실행한 후에 관련 논리는 A.exe의 경로와 파일 이름을 얻을 수 있다.
비록 이것은 매우 훌륭한 것이지만, 아쉽게도 존재하는 결함도 매우 뚜렷하다.그래서 모든 프로세스(win32,.net,java)를 미리 주입하려면 ring3층에서만 하기가 어렵다.몇몇 문제는 그래도 구동기에 들어가서 해야 한다.
프로젝트 코드.
(전재는 출처를 밝혀 주십시오)

좋은 웹페이지 즐겨찾기