EasyHook в RtlGetFullPathName_UEx

241
25 июля 2017, 15:51

Доброе время суток. Помогите пожалуйста составить инъекцию для функции RtlGetFullPathName_UEx. Я составлял различные инъекции вроде CreateFileW и CopyFileW с помощью библиотеки karnel32.dll. Но у меня возникли проблемы с библиотекой Ntdll.dll. Я запускаю свое приложение, инъекция вводится в процесс explorer. После чего приложение работает, и начинает слежку. Но при обращении к данной функции выходит ошибка "Безопасноть Windows - Эти файлы невозможно открыть". Решения по данной проблеме я искал, и все делал для ее устранения, но ничего не помогло. Вот моя библиотека инъекции, а так же функция внедрения. Скорее всего функция RtlGetFullPathName_UEx динамическая, и меняет свои значения после выпонения. И да, я инектирую с помощью библиотеки EasyHook.

 LocalHook wcsrchrHook;

    //  [DllImport("ShLwApi.dll", SetLastError = true, CharSet = CharSet.Unicode)]
    [DllImport("ntdll.dll", CharSet = CharSet.Auto)]
    static extern int wcsrchr(
        [MarshalAs(UnmanagedType.LPWStr)]
         string FileName,
         int BufferLength,
         [MarshalAs(UnmanagedType.LPWStr)]
          string lBuffer,
         ref IntPtr FilePart,
         ref int InputPathType);

    [UnmanagedFunctionPointer(CallingConvention.StdCall,   CharSet = CharSet.Auto)]
    public delegate int Twcsrchr(
         [MarshalAs(UnmanagedType.LPWStr)]
         string FileName,
         int BufferLength,
         [MarshalAs(UnmanagedType.LPWStr)]
          string lBuffer,
         ref IntPtr FilePart,
         ref int InputPathType);

    public Class1(RemoteHooking.IContext InContext, String InChannelName)
    {
        try
        {
            Interface = RemoteHooking.IpcConnectClient<RemoteMon>(InChannelName);
            ChannelName = InChannelName;
            Interface.IsInstalled(RemoteHooking.GetCurrentProcessId());
        }
        catch (Exception ex)
        {
            Interface.ErrorHandler(ex);
        }
    }
    public int Run(RemoteHooking.IContext InContext, String InChannelName)
    {
        try
        {
               wcsrchrHook = LocalHook.Create(LocalHook.GetProcAddress("ntdll.dll", "RtlGetFullPathName_UEx"), new Twcsrchr(hkwcsrchr), this);
          // wcsrchrHook = LocalHook.Create(LocalHook.GetProcAddress("Ntdll.dll", "RtlGetFullPathName_UEx"), new Twcsrchr(hkwcsrchr), this);
            wcsrchrHook.ThreadACL.SetExclusiveACL(new Int32[] { 0 });
          //  wcsrchrHook.ThreadACL.SetInclusiveACL(new Int32[] { 0 });
        }
        catch (Exception ex)
        {
            Interface.ErrorHandler(ex);
        }
        try
        {
            RemoteHooking.WakeUpProcess();
        }
        catch (Exception ex)
        {
            Interface.ErrorHandler(ex);
        }
        while (true)
        {
            Thread.Sleep(1000);
        }
    }
    static int hkwcsrchr(
          [MarshalAs(UnmanagedType.LPWStr)]
         string FileName,
         int BufferLength,
         [MarshalAs(UnmanagedType.LPWStr)]
          string lBuffer,
         ref IntPtr FilePart,
         ref int InputPathType)
    {
        try
        {
            int result = 0;
            ((Class1)HookRuntimeInfo.Callback).Interface.OpenFile(FileName.ToString());
            // ((ShellExecuteE)HookRuntimeInfo.Callback).Interface.OpenFile("Был открыт файл:" + lpExecInfo.File.ToString());
            // return wcsrchr(flags, key,pszAssoc,pszExtra,phkeyOut);
            return result = wcsrchr(FileName, BufferLength,   lBuffer, ref FilePart, ref  InputPathType);
        }
        catch (Exception ex)
        {
            //((ShellExecuteE)HookRuntimeInfo.Callback).Interface.ErrorHandler(ex);
            // return wcsrchr(flags, key, pszAssoc, pszExtra, phkeyOut);
            return wcsrchr(FileName, BufferLength, lBuffer, ref FilePart, ref InputPathType);
        }
    }
// Функция инъекции 
    RemoteHooking.Inject(processid, InjectionOptions.DoNotRequireStrongName, currdir + "ClassLibrary1.dll", currdir + "ClassLibrary1.dll", new Object[] { ChannelName });
READ ALSO
Передача параметров в контроллер

Передача параметров в контроллер

У меня есть HtmlBeginForm, вот ее код:

439
перебор массива обьектов на js

перебор массива обьектов на js

подскажите как можно перебрать такой массив на js

393
Упорядывачение данных

Упорядывачение данных

Есть исходный массив:

303
Наклон устройства

Наклон устройства

Ребят, столкнулся с такой проблемойДелаю приложение на cordova

332