Excelike Опубликовано 21 апреля, 2014 Поделиться Опубликовано 21 апреля, 2014 Здравствуйте.Возникла проблема.Хочу сделать что то вроде само-обновляемого трейнера. Но почему то после поиска сигнатур (При включении/выключении чекбокса) функция включается, а вот назад никак не хочет выключаться.Приведу код:Для переключения функций используется статическая булева переменная:static bool func1 = false;Код поиска сигнатуры, и записи в в память:private void checkBox1_CheckedChanged(object sender, EventArgs e) { SigScan _sigScan = new SigScan(seap, new IntPtr(0x401000), 0x10bc000); byte[] buffer2 = new byte[] { 0x75, 0x05, 0xC6, 0x44, 0x24, 0x0B, 0x01, 0x85, 0xC0, 0x0F, 0x94, 0xC1, 0x83, 0xF8, 0x01, 0x0F, 0x94, 0x44, 0x24, 0x0C, 0x83, 0xF8, 0x02, 0x0F, 0x94, 0x44, 0x24, 0x0D, 0x80, 0xBE, 0xE9, 0x0C, 0x00, 0x00, 0x00, 0x53, 0x74, 0x13, 0xD9, 0xEE }; IntPtr num = _sigScan.FindPattern(buffer2, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0); if (func1 == false)//если переменная [BYTE] равна 0(true - 1, false - 0) { byte[] buffer = new byte[] { 0x90, 0x90 };//байт, который записывается,если переменная [BYTE] равна 0, то есть выключена функция. memory.WriteByteArray((IntPtr)num, buffer);//записываем в адрес байты. checkBox1.Checked = true; func1 = true; } else//Иначе { byte[] buffer = new byte[] { 0x75, 0x05 };//байт, который записывается, если переменная [BYTE] равна 1, то есть включена функция. memory.WriteByteArray((IntPtr)num, buffer);//записываем в адрес байты. checkBox1.Checked = false; func1 = false; }Всё никак не могу разобраться, в чём проблема то? Ссылка на комментарий Поделиться на другие сайты Поделиться
DenkA003 Опубликовано 21 апреля, 2014 Поделиться Опубликовано 21 апреля, 2014 Дак понятное дело .. что не будет назад менять ... допустим ты изменел вот такую сигнатуру1)90 90 90 90 90 90изменил ее на2)80 90 90 90 90 90принцип твоего трейнера в том чтобы найти 1 сигнатуру и заменить первый байт на 80 ... ну когда ты деактивируешь функцию происходить снова сканирование по первой цепочке байт ... ну увы сигнатура уже изменилась ... по этому ты и не можешь записать байты при деактивации функцииВот должно работатьprivate void checkBox1_CheckedChanged(object sender, EventArgs e) { SigScan _sigScan = new SigScan(seap, new IntPtr(0x401000), 0x10bc000); if (func1 == false)//если переменная [BYTE] равна 0(true - 1, false - 0) { byte[] buffer2 = new byte[] { 0x75, 0x05, 0xC6, 0x44, 0x24, 0x0B, 0x01, 0x85, 0xC0, 0x0F, 0x94, 0xC1, 0x83, 0xF8, 0x01, 0x0F, 0x94, 0x44, 0x24, 0x0C, 0x83, 0xF8, 0x02, 0x0F, 0x94, 0x44, 0x24, 0x0D, 0x80, 0xBE, 0xE9, 0x0C, 0x00, 0x00, 0x00, 0x53, 0x74, 0x13, 0xD9, 0xEE }; IntPtr num = _sigScan.FindPattern(buffer2, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0); byte[] buffer = new byte[] { 0x90, 0x90 };//байт, который записывается,если переменная [BYTE] равна 0, то есть выключена функция. memory.WriteByteArray((IntPtr)num, buffer);//записываем в адрес байты. checkBox1.Checked = true; func1 = true; } else//Иначе { byte[] buffer2 = new byte[] { 0x90, 0x90, 0xC6, 0x44, 0x24, 0x0B, 0x01, 0x85, 0xC0, 0x0F, 0x94, 0xC1, 0x83, 0xF8, 0x01, 0x0F, 0x94, 0x44, 0x24, 0x0C, 0x83, 0xF8, 0x02, 0x0F, 0x94, 0x44, 0x24, 0x0D, 0x80, 0xBE, 0xE9, 0x0C, 0x00, 0x00, 0x00, 0x53, 0x74, 0x13, 0xD9, 0xEE }; IntPtr num = _sigScan.FindPattern(buffer2, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0); byte[] buffer = new byte[] { 0x75, 0x05 };//байт, который записывается, если переменная [BYTE] равна 1, то есть включена функция. memory.WriteByteArray((IntPtr)num, buffer);//записываем в адрес байты. checkBox1.Checked = false; func1 = false; } Ссылка на комментарий Поделиться на другие сайты Поделиться
Excelike Опубликовано 21 апреля, 2014 Автор Поделиться Опубликовано 21 апреля, 2014 ТЫ ГЕНИЙ О_О Ссылка на комментарий Поделиться на другие сайты Поделиться
DenkA003 Опубликовано 21 апреля, 2014 Поделиться Опубликовано 21 апреля, 2014 ТЫ ГЕНИЙ О_ОСарказм ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Excelike Опубликовано 21 апреля, 2014 Автор Поделиться Опубликовано 21 апреля, 2014 Дак понятное дело .. что не будет назад менять ... допустим ты изменел вот такую сигнатуру1)90 90 90 90 90 90изменил ее на2)80 90 90 90 90 90принцип твоего трейнера в том чтобы найти 1 сигнатуру и заменить первый байт на 80 ... ну когда ты деактивируешь функцию происходить снова сканирование по первой цепочке байт ... ну увы сигнатура уже изменилась ... по этому ты и не можешь записать байты при деактивации функцииВот должно работатьprivate void checkBox1_CheckedChanged(object sender, EventArgs e) { SigScan _sigScan = new SigScan(seap, new IntPtr(0x401000), 0x10bc000); if (func1 == false)//если переменная [BYTE] равна 0(true - 1, false - 0) { byte[] buffer2 = new byte[] { 0x75, 0x05, 0xC6, 0x44, 0x24, 0x0B, 0x01, 0x85, 0xC0, 0x0F, 0x94, 0xC1, 0x83, 0xF8, 0x01, 0x0F, 0x94, 0x44, 0x24, 0x0C, 0x83, 0xF8, 0x02, 0x0F, 0x94, 0x44, 0x24, 0x0D, 0x80, 0xBE, 0xE9, 0x0C, 0x00, 0x00, 0x00, 0x53, 0x74, 0x13, 0xD9, 0xEE }; IntPtr num = _sigScan.FindPattern(buffer2, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0); byte[] buffer = new byte[] { 0x90, 0x90 };//байт, который записывается,если переменная [BYTE] равна 0, то есть выключена функция. memory.WriteByteArray((IntPtr)num, buffer);//записываем в адрес байты. checkBox1.Checked = true; func1 = true; } else//Иначе { byte[] buffer2 = new byte[] { 0x90, 0x90, 0xC6, 0x44, 0x24, 0x0B, 0x01, 0x85, 0xC0, 0x0F, 0x94, 0xC1, 0x83, 0xF8, 0x01, 0x0F, 0x94, 0x44, 0x24, 0x0C, 0x83, 0xF8, 0x02, 0x0F, 0x94, 0x44, 0x24, 0x0D, 0x80, 0xBE, 0xE9, 0x0C, 0x00, 0x00, 0x00, 0x53, 0x74, 0x13, 0xD9, 0xEE }; IntPtr num = _sigScan.FindPattern(buffer2, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0); byte[] buffer = new byte[] { 0x75, 0x05 };//байт, который записывается, если переменная [BYTE] равна 1, то есть включена функция. memory.WriteByteArray((IntPtr)num, buffer);//записываем в адрес байты. checkBox1.Checked = false; func1 = false; }Работает, но немного с другой маской, т.к НОП равен одному байту.Сарказм ?Ни в коем случае, искренняя благодарность Ссылка на комментарий Поделиться на другие сайты Поделиться
DenkA003 Опубликовано 21 апреля, 2014 Поделиться Опубликовано 21 апреля, 2014 Работает, но немного с другой маской, т.к НОП равен одному байту.Ни в коем случае, искренняя благодарность ++ спс__))Хотел добавить зачем обновлять переменную static bool func1 = false;ведь у чекбокса есть свойство и так - false = True оно равно свойству CheckBox.Checked = True(False) просто сделай так if CheckBox1.Checked = True bla bla blaelsebla bla bla end;на много проще )) Ссылка на комментарий Поделиться на другие сайты Поделиться
Excelike Опубликовано 21 апреля, 2014 Автор Поделиться Опубликовано 21 апреля, 2014 Ах да, сигнатура тоже поменьше стала (Это так, на заметку)++ спс__))Хотел добавить зачем обновлять переменнуюведь у чекбокса есть свойство и так - false = True оно равно свойству CheckBox.Checked = True(False)просто сделай такif CheckBox1.Checked = Truebla bla blaelsebla bla blaend;на много проще ))Не знаю, в хоткее используются переменные, поэтому привык к ним А так да, легче Ссылка на комментарий Поделиться на другие сайты Поделиться
DenkA003 Опубликовано 22 апреля, 2014 Поделиться Опубликовано 22 апреля, 2014 Работает, но немного с другой маской, т.к НОП равен одному байту.Ни в коем случае, искренняя благодарность да не много на C# мозго** со сканером )) Ну и на delphi тоже самое )) только с одним отличием не нужно вводить маску )) Тупо байты - начало = конец сканирования и усе )) Ссылка на комментарий Поделиться на другие сайты Поделиться
Excelike Опубликовано 22 апреля, 2014 Автор Поделиться Опубликовано 22 апреля, 2014 да не много на C# мозго** со сканером )) Ну и на delphi тоже самое )) только с одним отличием не нужно вводить маску )) Тупо байты - начало = конец сканирования и усе ))Типа, вот такого: 72 D9 EB ?? C4 F0 ?? ?? ?? 38? Если да, то на C# тоже так можно сделать, но в ольке (OllyDBG), как ты наверное знаешь сигнатура и маска выдаются отдельно друг от друга, поэтому так и реализовываем Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения