-
Постов
62 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные misha
-
-
Хочу поблагодарить пользователей keng и Andrey. Спасибо вам за дельные советы, за то, что нас таких терпите Форум хороший, много полезной инфы можно найти.
-
Что-то я совсем туплю
Вот есть у меня строка байтов:
EB 00 90 90
Её длина 4байт.
Адреса начала сканирования
0000000000000000
и конца
7fffffffffffffff
.
Вот попробовал все это расставить:
{
for(;*szMask;++szMask,++pData,++bMask)
if(*szMask=='x' && *pData!=*bMask )
return false;
return (*szMask) == NULL;
}
DWORD dwFindPattern(DWORD (0000000000000000),DWORD (7fffffffffffffff), BYTE *bMask, char * szMask) {
for(DWORD i=0;i<dwLen;i++)
if( bDataCompare( (BYTE*)( dwAddress+i ),bMask,szMask) )
return (DWORD)(dwAddress+i);
return NULL;
}bool bDataCompare(const BYTE* (0EBh,000h,090h,090h), const BYTE* (x0xx), const char* (4))
Посмотрите правильно вставил данные?
-
Ссылку глянул. Я новичок в си, насколько я понял по видеоуроку, там просиходит инекция длл. Функция что там описана, можете ее синтаксис расписать? Или может есть способ попроще для поиска адреса по известным байтам?
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Globalization;
using System.Threading;
using System.Media;
namespace Train
{
public partial class Form1 : Form
{
string text = " RomaN predstavlyaet ";
Memory oMemory = new Memory();
Process[] oProcess;
bool GameRunning = false;
///Код функции вставлять сюда?
bool UnlimitedHelath = false;
string HealthPointer = "0072836C";
int[] HealthOffset = { 0x84, 0x64 };
int HealthToFill = 999;
bool UnlimitedSanity = false;
string SanityPointer = "0072836C";
int[] SanityOffset = { 0x84, 0x68 };
int SanityToFill = 999;
bool UnlimitedOilLevel = false;
string OilPointer = "0072836c ";
int[] OilOffset = { 0x84, 0x6C };
int OilToFill = 102;
bool UnlimitedTinderboxes = false;
string TinderboxesPointer = "0072836C";
int[] TinderboxesOffset = { 0x84, 0x78 };
int TinderboxesToFill = 999;
public Form1()
{
InitializeComponent();
}
private readonly SoundPlayer _soundPlayer = new SoundPlayer();
private void GameRunningTMR_Tick(object sender, EventArgs e)
{
oProcess = Process.GetProcessesByName("FlashEx_Client");
if (oProcess.Length != 0)
{
GameRunning = true;
label5.Text = "Game Running";
}
else
{
GameRunning = false;
label5.Text = "The Game Is Not Running";
}
}
private void label1_Click(object sender, EventArgs e)
{
if (GameRunning)
{
if (UnlimitedTinderboxes)
{
UnlimitedTinderboxes = false;
label1.Text = "F1---- Unlimited Tinderboxes on/off";
}
else
{
UnlimitedTinderboxes = true;
label1.Text = "F1---- Unlimited Tinderboxes on/off";
}
}
}
private void label2_Click(object sender, EventArgs e)
{
if (GameRunning)
{
if (UnlimitedHelath)
{
UnlimitedHelath = false;
label2.Text = "F2---- Unlimited Health on/off";
}
else
{
UnlimitedHelath = true;
label2.Text = "F2---- Unlimited Health on/off";
}
}
}
private void label3_Click(object sender, EventArgs e)
{
if (GameRunning)
{
if (UnlimitedSanity)
{
UnlimitedSanity = false;
label3.Text = "F3--- Unlimited Sanity on/off";
}
else
{
UnlimitedSanity = true;
label3.Text = "F3--- Unlimited Sanity on/off";
}
}
}
private void label4_Click(object sender, EventArgs e)
{
if (GameRunning)
{
if (UnlimitedOilLevel)
{
UnlimitedOilLevel = false;
label4.Text = "F4---- Unlimited Oil Level on/off";
}
else
{
UnlimitedOilLevel = true;
label4.Text = "F4---- Unlimited Oil Level on/off";
}
}
}
private void UnlimitedHealthTMR_Tick(object sender, EventArgs e)
{
Process[] aProcessces = Process.GetProcessesByName("FlashEx_Client");
if (UnlimitedHelath)
{
oMemory.ReadProcess = oProcess[0];
oMemory.Open();
int pointerAdress = Addr.ToDec(HealthPointer);
int[] pointerOffset = HealthOffset;
int bytesWritten;
byte[] valueToWrite = BitConverter.GetBytes((float)HealthToFill);
string sWritten_Address = oMemory.PointerWrite((IntPtr)pointerAdress, valueToWrite, pointerOffset, out bytesWritten);
// if (bytesWritten == valueToWrite.Length)
// label7.Text = ("Health Activation");
//else
// label7.Text = ("Health Deactivation");
oMemory.CloseHandle();
}
Process[] aProcesses = Process.GetProcessesByName("FlashEx_Client");
if (UnlimitedSanity)
{
oMemory.ReadProcess = oProcess[0];
oMemory.Open();
int pointerAdress = Addr.ToDec(SanityPointer);
int[] pointerOffset = SanityOffset;
int bytesWritten;
byte[] valueToWrite = BitConverter.GetBytes((float)SanityToFill);
string sWritten_Address = oMemory.PointerWrite((IntPtr)pointerAdress, valueToWrite, pointerOffset, out bytesWritten);
oMemory.CloseHandle();
}
Process[] aProcessses = Process.GetProcessesByName("FlashEx_Client");
if (UnlimitedOilLevel)
{
oMemory.ReadProcess = oProcess[0];
oMemory.Open();
int pointerAdress = Addr.ToDec(OilPointer);
int[] pointerOffset = OilOffset;
int bytesWritten;
byte[] valueToWrite = BitConverter.GetBytes((float)OilToFill);
string sWritten_Address = oMemory.PointerWrite((IntPtr)pointerAdress, valueToWrite, pointerOffset, out bytesWritten);
oMemory.CloseHandle();
}
Process[] aProcesssces = Process.GetProcessesByName("FlashEx_Client");
if (UnlimitedTinderboxes)
{
oMemory.ReadProcess = oProcess[0];
oMemory.Open();
int pointerAdress = Addr.ToDec(TinderboxesPointer);
int[] pointerOffset = TinderboxesOffset;
int bytesWritten;
byte[] valueToWrite = BitConverter.GetBytes(TinderboxesToFill);
string sWritten_Address = oMemory.PointerWrite((IntPtr)pointerAdress, valueToWrite, pointerOffset, out bytesWritten);
oMemory.CloseHandle();
}
}
private void Form1_Load(object sender, EventArgs e)
{
KeyboardHook.CreateHook(KeyReader);
}
public void KeyReader(IntPtr wParam, IntPtr lParam)
{
int key = Marshal.ReadInt32(lParam);
KeyboardHook.VK vk = (KeyboardHook.VK)key;
String temp = "";
switch (vk)
{
case KeyboardHook.VK.VK_F1: temp = "<-F1->";
break;
case KeyboardHook.VK.VK_F2: temp = "<-F2->";
break;
case KeyboardHook.VK.VK_F3: temp = "<-F3->";
break;
case KeyboardHook.VK.VK_F4: temp = "<-F4->";
break;
case KeyboardHook.VK.VK_F5: temp = "<-F5->";
break;
case KeyboardHook.VK.VK_F6: temp = "<-F6->";
break;
case KeyboardHook.VK.VK_F7: temp = "<-F7->";
break;
case KeyboardHook.VK.VK_F8: temp = "<-F8->";
break;
case KeyboardHook.VK.VK_F9: temp = "<-F9->";
break;
case KeyboardHook.VK.VK_F10: temp = "<-F10->";
break;
case KeyboardHook.VK.VK_F11: temp = "<-F11->";
break;
case KeyboardHook.VK.VK_F12: temp = "<-F12->";
break;
case KeyboardHook.VK.VK_NUMLOCK: temp = "<-numlock->";
break;
case KeyboardHook.VK.VK_SCROLL: temp = "<-scroll>";
break;
case KeyboardHook.VK.VK_LSHIFT: temp = "<-left shift->";
break;
case KeyboardHook.VK.VK_RSHIFT: temp = "<-right shift->";
break;
case KeyboardHook.VK.VK_LCONTROL: temp = "<-left control->";
break;
case KeyboardHook.VK.VK_RCONTROL: temp = "<-right control->";
break;
case KeyboardHook.VK.VK_SEPERATOR: temp = "|";
break;
case KeyboardHook.VK.VK_SUBTRACT: temp = "-";
break;
case KeyboardHook.VK.VK_ADD: temp = "+";
break;
case KeyboardHook.VK.VK_DECIMAL: temp = ".";
break;
case KeyboardHook.VK.VK_DIVIDE: temp = "/";
break;
case KeyboardHook.VK.VK_NUMPAD0: temp = "0";
break;
case KeyboardHook.VK.VK_NUMPAD1: temp = "1";
break;
case KeyboardHook.VK.VK_NUMPAD2: temp = "2";
break;
case KeyboardHook.VK.VK_NUMPAD3: temp = "3";
break;
case KeyboardHook.VK.VK_NUMPAD4: temp = "4";
break;
case KeyboardHook.VK.VK_NUMPAD5: temp = "5";
break;
case KeyboardHook.VK.VK_NUMPAD6: temp = "6";
break;
case KeyboardHook.VK.VK_NUMPAD7: temp = "7";
break;
case KeyboardHook.VK.VK_NUMPAD8: temp = "8";
break;
case KeyboardHook.VK.VK_NUMPAD9: temp = "9";
break;
case KeyboardHook.VK.VK_Q: temp = "q";
break;
case KeyboardHook.VK.VK_W: temp = "w";
break;
case KeyboardHook.VK.VK_E: temp = "e";
break;
case KeyboardHook.VK.VK_R: temp = "r";
break;
case KeyboardHook.VK.VK_T: temp = "t";
break;
case KeyboardHook.VK.VK_Y: temp = "y";
break;
case KeyboardHook.VK.VK_U: temp = "u";
break;
case KeyboardHook.VK.VK_I: temp = "i";
break;
case KeyboardHook.VK.VK_O: temp = "o";
break;
case KeyboardHook.VK.VK_P: temp = "p";
break;
case KeyboardHook.VK.VK_A: temp = "a";
break;
case KeyboardHook.VK.VK_S: temp = "s";
break;
case KeyboardHook.VK.VK_D: temp = "d";
break;
case KeyboardHook.VK.VK_F: temp = "f";
break;
case KeyboardHook.VK.VK_G: temp = "g";
break;
case KeyboardHook.VK.VK_H: temp = "h";
break;
case KeyboardHook.VK.VK_J: temp = "j";
break;
case KeyboardHook.VK.VK_K: temp = "k";
break;
case KeyboardHook.VK.VK_L: temp = "l";
break;
case KeyboardHook.VK.VK_Z: temp = "z";
break;
case KeyboardHook.VK.VK_X: temp = "x";
break;
case KeyboardHook.VK.VK_C: temp = "c";
break;
case KeyboardHook.VK.VK_V: temp = "v";
break;
case KeyboardHook.VK.VK_B: temp = "b";
break;
case KeyboardHook.VK.VK_N: temp = "n";
break;
case KeyboardHook.VK.VK_M: temp = "m";
break;
case KeyboardHook.VK.VK_0: temp = "0";
break;
case KeyboardHook.VK.VK_1: temp = "1";
break;
case KeyboardHook.VK.VK_2: temp = "2";
break;
case KeyboardHook.VK.VK_3: temp = "3";
break;
case KeyboardHook.VK.VK_4: temp = "4";
break;
case KeyboardHook.VK.VK_5: temp = "5";
break;
case KeyboardHook.VK.VK_6: temp = "6";
break;
case KeyboardHook.VK.VK_7: temp = "7";
break;
case KeyboardHook.VK.VK_8: temp = "8";
break;
case KeyboardHook.VK.VK_9: temp = "9";
break;
case KeyboardHook.VK.VK_SNAPSHOT: temp = "<-print screen->";
break;
case KeyboardHook.VK.VK_INSERT: temp = "<-insert->";
break;
case KeyboardHook.VK.VK_DELETE: temp = "<-delete->";
break;
case KeyboardHook.VK.VK_BACK: temp = "<-backspace->";
break;
case KeyboardHook.VK.VK_TAB: temp = "<-tab->";
break;
case KeyboardHook.VK.VK_RETURN: temp = "<-enter->";
break;
case KeyboardHook.VK.VK_PAUSE: temp = "<-pause->";
break;
case KeyboardHook.VK.VK_CAPITAL: temp = "<-caps lock->";
break;
case KeyboardHook.VK.VK_ESCAPE: temp = "<-esc->";
break;
case KeyboardHook.VK.VK_SPACE: temp = " "; //was <-space->
break;
case KeyboardHook.VK.VK_PRIOR: temp = "<-page up->";
break;
case KeyboardHook.VK.VK_NEXT: temp = "<-page down->";
break;
case KeyboardHook.VK.VK_END: temp = "<-end->";
break;
case KeyboardHook.VK.VK_HOME: temp = "<-home->";
break;
case KeyboardHook.VK.VK_LEFT: temp = "<-arrow left->";
break;
case KeyboardHook.VK.VK_UP: temp = "<-arrow up->";
break;
case KeyboardHook.VK.VK_RIGHT: temp = "<-arrow right->";
break;
case KeyboardHook.VK.VK_DOWN: temp = "<-arrow down->";
break;
default: break;
}
#region Key triggers
if (temp == "<-F1->")
{
if (GameRunning)
{
if (UnlimitedTinderboxes)
{
UnlimitedTinderboxes = false;
label1.Text = "F1---- Unlimited Tinderboxes off";
_soundPlayer.Stream = Properties.Resources.deactivated;
_soundPlayer.Play();
}
else
{
UnlimitedTinderboxes = true;
label1.Text = "F1---- Unlimited Tinderboxes on";
_soundPlayer.Stream = Properties.Resources.activated;
_soundPlayer.Play();
}
}
}
if (temp == "<-F2->")
{
if (GameRunning)
{
if (UnlimitedHelath)
{
UnlimitedHelath = false;
label2.Text = "F2---- Unlimited Health off";
_soundPlayer.Stream = Properties.Resources.deactivated;
_soundPlayer.Play();
}
else
{
UnlimitedHelath = true;
label2.Text = "F2---- Unlimited Health on";
_soundPlayer.Stream = Properties.Resources.activated;
_soundPlayer.Play();
}
}
}
if (temp == "<-F3->")
{
if (GameRunning)
{
if (UnlimitedSanity)
{
UnlimitedSanity = false;
label3.Text = "F3---- Unlimited Sanity off";
_soundPlayer.Stream = Properties.Resources.deactivated;
_soundPlayer.Play();
}
else
{
UnlimitedSanity = true;
label3.Text = "F3---- Unlimited Sanity on";
_soundPlayer.Stream = Properties.Resources.activated;
_soundPlayer.Play();
}
}
}
if (temp == "<-F4->")
{
if (GameRunning)
{
if (UnlimitedOilLevel)
{
UnlimitedOilLevel = false;
label4.Text = "F4---- Unlimited Oil Level off";
_soundPlayer.Stream = Properties.Resources.deactivated;
_soundPlayer.Play();
}
else
{
UnlimitedOilLevel = true;
label4.Text = "F4---- Unlimited Oil Level on";
_soundPlayer.Stream = Properties.Resources.activated;
_soundPlayer.Play();
}
#endregion
}
}
}
private void timer1_Tick(object sender, EventArgs e)
{
text = text.Substring(1) + text[0];
label6.Text = text;
}
}
}using System;
Чем скрывать код не нашел.
-
У кого то есть пример поиска в памяти процесса значения по маске байтов?
Буду благодарен.
-
Привет всем. Кто может сталкивался с проблемой?
Сделал скрипт с брейкпойнтом, полностью рабочий. Сам скрипт выполняется на ура, а при создании трейнера exe повесил его на клик кнопки, ничего не происходит при нажатии. В чем может быть причина?
-
Да брекпойнатами в игре адрес ищем, они к защите отношения не имеют))
-
Ох, что-то мне это напоминает. Кстати, зачем трейнер должен уметь ставить брейкпоинты? Что-то я не могу навскидку придумать.
Так если адрес искомого значения меняется каждый раз, то почему же не поставить? Кстати, тут на форуме. где-то читал, про шифровку скриптов в трейнере, вытащить скрипты возможно ли?
-
В трейнере СЕ можно делать абсолютно все тоже, что и в скрипте. И бряки, и тд. Кстати положение с защитой-привязкой трейнера скоро решится, нашли функции подключения библиотеки апи винды в скрипте. Осталось разобраться где и как там вытаскивать серийные номера железа, может уже кто занимался и есть примеры?
-
Как враиант - делать готовый трейнер не средствами СЕ, утилит - полно.
А какие утилиты имеют такие же функции, что и СЕ? брекпойнты и тп
-
Это можно поправить изменив исходники Cheat Engine. При чем это не просто. А без знаний языка программирования почти не реально.
Так, что крупный облом вышел с "привязкой" для автономных трейнеров на CE
Есть ссыль на исходники?
-
Есть ли в скриптах луа возможность обращаться к вин апиай? Собственно нужно узнать серийник диска с.
Если есть у кого другие идеи по защите трейнера - привязки к опред компу, то пишите.
aobscan
in Вопросы по созданию читов в одиночных играх
Опубликовано
Aobscan отличная штука. У меня без нее ни один трейнер не обошелся. Можно использовать не только звездочки, но и вопросы, иксы: 00 90 X 90 00 ? 00 A?