Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2012, 17:46   #1
Laimer64
 
Регистрация: 23.12.2012
Сообщений: 4
По умолчанию перехват API

Как перехватывать и блокировать вызов функций Exitthread() и ExitProcess().
Laimer64 вне форума Ответить с цитированием
Старый 26.01.2013, 20:45   #2
Laimer64
 
Регистрация: 23.12.2012
Сообщений: 4
По умолчанию

наваял что-то вроде этого:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        [DllImport("kernel32.dll")]
        static extern IntPtr GetProcAddress(IntPtr hModule, string procName);

        [DllImport("kernel32.dll")]
        public static extern IntPtr GetModuleHandle(string lpModuleName);

        [DllImport("kernel32.dll")]
        static extern void ExitProcess(uint uExitCode);

        [DllImport("kernel32.dll", SetLastError = true)]
        static extern bool VirtualProtect(IntPtr lpAddress, uint dwSize,
           Protection FlagAcess, out uint lpflOldProtect);

        enum Protection : uint
        {
            PAGE_NOACCESS = 0x01,
            PAGE_READONLY = 0x02,
            PAGE_READWRITE = 0x04,
            PAGE_WRITECOPY = 0x08,
            PAGE_EXECUTE = 0x10,
            PAGE_EXECUTE_READ = 0x20,
            PAGE_EXECUTE_READWRITE = 0x40,
            PAGE_EXECUTE_WRITECOPY = 0x80,
            PAGE_GUARD = 0x100,
            PAGE_NOCACHE = 0x200,
            PAGE_WRITECOMBINE = 0x400
        }

        uint Old;

        void Message()
        {
            MessageBox.Show("прехват", "ПЕРЕХВАТ");
        }


        public delegate void myDelegate();

        [StructLayout(LayoutKind.Sequential,Pack=1)]
        public struct JMP
        {
            public byte push;
            public IntPtr arg;
            public byte ret;
        }

        void Adress()
        {
            myDelegate dlg = new myDelegate(Message);
            JMP jmp = new JMP();
            jmp.push = 0x68;
            jmp.arg = Marshal.GetFunctionPointerForDelegate(dlg);
            jmp.ret = 0xC3;
            IntPtr adress = GetProcAddress(GetModuleHandle("kernel32.dll"), "ExitProcess");
            VirtualProtect(adress, 6, Protection.PAGE_EXECUTE_READWRITE, out Old);
            Marshal.StructureToPtr(jmp, adress, true);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Adress();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            ExitProcess(0);
        }

    }
}
Теперь возникло много вопросов.Если сможете помогите найти ответы:
1.выдает исключение про разбалансированный стек, но перед этим исправно перехватыват вызов функции.
2.При нажатии на красную кнопочку с крестиком вверху справа все равно закрывается с ошибкой .
Как все это исправить. И пожалуйста, по русски !!! ну совсем не знаю буржуйский!
Laimer64 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват Api egorzenit Win Api 16 22.10.2011 23:26
Перехват GL Api coNsept Общие вопросы C/C++ 6 19.06.2011 02:42
Перехват API BOBAH13 Win Api 12 10.05.2010 10:11
перехват API функций ассемблер123 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 16 29.04.2010 12:51
API перехват Irat Помощь студентам 13 11.02.2008 12:04