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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2016, 19:05   #1
MDiGO
Новичок
Джуниор
 
Регистрация: 30.04.2016
Сообщений: 4
По умолчанию C# Помогите найти ошибку(Инжектор)

Ребят,не знаю как вы,а вот я столкнулся с такой проблемой - Необработанное исключение типа "System.NullReferenceException"
Дополнительные сведения: Ссылка на объект не указывает на экземпляр объекта. Так что я или слеп или тупой,поэтому прошу о помощи,как решить этакую проблемку.
А вот и сам код:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        [DllImport("kernel32")]
        public static extern IntPtr CreateRemoteThread(
          IntPtr hProcess,
          IntPtr lpThreadAttributes,
          uint dwStackSize,
          UIntPtr lpStartAddress,
          IntPtr lpParameter,
          uint dwCreationFlags,
          out IntPtr lpThreadId
        );

        [DllImport(" kernel32.dll")]
        public static extern IntPtr OpenProcess(
             UInt32 dwDesiredAccess,
             Int32 bInheritHandle,
             Int32 dwProcessId
             );

        [DllImport(" kernel32.dll")]
        public static extern Int32 CloseHandle(
        IntPtr hObject
        );

        [DllImport(" kernel32.dll", SetLastError = true, ExactSpelling = true)]
        static extern bool VirtualFreeEx(
             IntPtr hProcess,
             IntPtr lpAddress,
             UIntPtr dwSize,
             uint dwFreeType
             );

        [DllImport(" kernel32.dll", CharSet = CharSet.Ansi, ExactSpelling = true)]
        public static extern UIntPtr GetProcAddress(
             IntPtr hModule,
             string procName
             );

        [DllImport(" kernel32.dll", SetLastError = true, ExactSpelling = true)]
        static extern IntPtr VirtualAllocEx(
             IntPtr hProcess,
             IntPtr lpAddress,
             uint dwSize,
             uint flAllocationType,
             uint flProtect
             );

        [DllImport(" kernel32.dll")]
        static extern bool WriteProcessMemory(
             IntPtr hProcess,
             IntPtr lpBaseAddress,
             string lpBuffer,
             UIntPtr nSize,
             out IntPtr lpNumberOfBytesWritten
        );

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

        [DllImport(" kernel32", SetLastError = true, ExactSpelling = true)]
        internal static extern Int32 WaitForSingleObject(
             IntPtr handle,
             Int32 milliseconds
             );

        public Int32 GetProcessId(String proc)
        {
            Process[] ProcList;
            ProcList = Process.GetProcessesByName(proc);
            return ProcList[0].Id;
        }
        public void InjectDLL(IntPtr hProcess, String strDLLName)
        {
            IntPtr bytesout;
            Int32 LenWrite = strDLLName.Length + 1;
            IntPtr AllocMem = (IntPtr)VirtualAllocEx(hProcess, (IntPtr)null, (uint)LenWrite, 0x1000, 0x40);
            WriteProcessMemory(hProcess, AllocMem, strDLLName, (UIntPtr)LenWrite, out bytesout);
            UIntPtr Injector = (UIntPtr)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");

            if (Injector == null)
            {
                MessageBox.Show(" Injecto Error! \n ");
                return;
            }
            IntPtr hThread = (IntPtr)CreateRemoteThread(hProcess, (IntPtr)null, 0, Injector, AllocMem, 0, out bytesout);
            if (hThread == null)
            {
                MessageBox.Show("Thread injection Failed");
                return;
            }
            int Result = WaitForSingleObject(hThread, 10 * 1000);
            if (Result == 0x00000080L || Result == 0x00000102L || Result == 0xFFFFFFFF)
            {
                MessageBox.Show("Thread 2 inject failed");
                if (hThread != null)
                {
                    CloseHandle(hThread);
                }
                return;
            }
            Thread.Sleep(1000);
            VirtualFreeEx(hProcess, AllocMem, (UIntPtr)0, 0x8000);
            if (hThread != null)
            {
                CloseHandle(hThread);
            }
            return;
        }
        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void label3_Click(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            openFileDialog1.Filter = "DLL (*.dll)|*.dll" +
                "|All files (*.*)|*.*";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = openFileDialog1.FileName; 
            }
        }
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }
        

        private void comboBox1_Click(object sender, EventArgs e)
        {
            comboBox1.Items.Clear();
            foreach (Process clsProcess in Process.GetProcesses())
            {
                comboBox1.Items.Add(clsProcess.ProcessName);
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            String strDLLName = textBox1.Text;
            String strProcessName = comboBox1.SelectedItem.ToString();

            Int32 ProcID = GetProcessId(strProcessName);
            if (ProcID >= 0)
            {
                IntPtr hProcess = (IntPtr)OpenProcess(0x1F0FFF, 1, ProcID);
                if (hProcess == null)
                {
                    MessageBox.Show("FAIL");
                    return;
                }
                else
                {
                    InjectDLL(hProcess, strDLLName);
                    MessageBox.Show("RIGHT");
                }
            }

        }
    }
}
______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.

Последний раз редактировалось Alex11223; 30.04.2016 в 19:12.
MDiGO вне форума Ответить с цитированием
Старый 30.04.2016, 19:26   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

отладчиком проходили?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 30.04.2016, 19:42   #3
MDiGO
Новичок
Джуниор
 
Регистрация: 30.04.2016
Сообщений: 4
По умолчанию

Да,конечно
MDiGO вне форума Ответить с цитированием
Старый 30.04.2016, 19:43   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

И что увидели? Exception на какой строке?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 30.04.2016, 20:32   #5
MDiGO
Новичок
Джуниор
 
Регистрация: 30.04.2016
Сообщений: 4
По умолчанию

Увидел я такую вещь: NullReferenceException
Строка 176,столбец 13,знак 13.
MDiGO вне форума Ответить с цитированием
Старый 30.04.2016, 20:47   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

И что вы в отладчике (https://www.google.com/search?q=c%23+debugging) не видите где у вас null в указанном месте?

В коде выше строка 176 это
Код:
String strProcessName = comboBox1.SelectedItem.ToString();
Видимо в комбобоксе ничего не выбрано и SelectedItem null.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 30.04.2016, 20:55   #7
MDiGO
Новичок
Джуниор
 
Регистрация: 30.04.2016
Сообщений: 4
По умолчанию

Спасибо!) Видимо 3 бессонные ночи сказались на моем мышлении,думаю теперь можно и поспать)
MDiGO вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти седловые точки в матрице(помогите найти ошибку) - pascal tdsotm Помощь студентам 0 20.11.2014 18:57
Помогите найти ошибку - StrToFloat выдаёт ошибку EConvertError для ячеек StringGrid (Delphi) Artsiom Помощь студентам 10 18.12.2013 14:10
Помогите найти ошибку. Айдар Помощь студентам 1 05.01.2010 23:04
Помогите найти ошибку! junkie Паскаль, Turbo Pascal, PascalABC.NET 2 03.05.2009 14:22
Помогите найти ошибку alex2008ean Паскаль, Turbo Pascal, PascalABC.NET 2 17.12.2008 15:43