• Объявления

    • Garik66

      Пользователям форума   05.11.2017

      Прошу обратить внимание на эту тему (чтобы увидеть ссылку, войдите в объявление - нажмите на заголовок):   
maxi10027

Сканер Сигнатур На Браузерную Флешь Игру То

11 сообщений в этой теме

Всем привет!Не могу написать сигнатуру в C# пишет что "не все ветви кода возвращают значение" помогите пожалуйсто кто может ато указатели на флешь не работают :( вот сам код:


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;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);

[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool CloseHandle(IntPtr hObject);

[DllImport("kernel32.dll", SetLastError = true)]
static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out UIntPtr lpNumberOfBytesWritten);

[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(
IntPtr hProcess,
IntPtr lpBaseAddress,
[Out] byte[] lpBuffer,
int dwSize,
out int lpNumberOfBytesRead
);

[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(
IntPtr hProcess,
IntPtr lpBaseAddress,
[Out, MarshalAs(UnmanagedType.AsAny)] object lpBuffer,
int dwSize,
out int lpNumberOfBytesRead
);

[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(
IntPtr hProcess,
IntPtr lpBaseAddress,
IntPtr lpBuffer,
int dwSize,
out int lpNumberOfBytesRead
);


public int pID;

public Form1()
{
InitializeComponent();
GetProcess("my_tank");

}

public void GetProcess(string name)
{
var plist = Process.GetProcesses();
if (plist.Count() != 0)
{
foreach (var process in plist)
{
if (process.ProcessName == name)
{
pID = process.Id;
MessageBox.Show("Процесс найден!");
return;
}
}
}
return;
}


public int FindSignature()
{
var moduleName = "my_tank.exe";
var startAddress = 0;
var sizeToAllocate = 0;
var pattern = new int[] { 0xE8, -1, -1, -1, -1, 0xE9, -1, -1, -1, -1, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC };

if (pID != 0)
{
foreach (var p in Process.GetProcesses())
{
if (p.Id == pID)
{
foreach (ProcessModule m in p.Modules)
{
if (m.ModuleName == moduleName)
{
startAddress = (int)m.BaseAddress;
sizeToAllocate = m.ModuleMemorySize;
break;
}
}
}
}
var handle = OpenProcess(0x001F0FFF, false, pID);
if (handle != IntPtr.Zero)
{
byte[] buffer = new byte[sizeToAllocate];
int bytesread;
ReadProcessMemory(handle, (IntPtr)startAddress, buffer, sizeToAllocate, out bytesread);
CloseHandle(handle);
var counter = 0;
if (pattern.Length <= buffer.Length)
{
for (var i = 0; i < buffer.Length; i++)
{
if (buffer[i] == pattern[0] | pattern[0] == -1)
{
for (var j = 0; j < pattern.Length; j++)
{
if (buffer[i + j] == pattern[j] | pattern[j] == -1)
{
counter++;
if (counter == pattern.Length)
{
var result = i + startAddress;
return (int)result;
}
}
else
{
counter = 0;
}
}
}
}
}
}
}
}
}
}
}
}
using System;

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Код надо оформлять нормально в теге кода и с табуляцией и желательно под спойлером, т.к. он большой.

[spoiler=Hidden][co de]...здесь твой код..[/co de][/spoiler]

В "co de" убрать пробел.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Чота я не совсем понимаю, как это должно работать относительно браузерных флешовых игр...

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здраствуйте вот переделал код, серавно чет не пашет.




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;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool CloseHandle(IntPtr hObject);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out UIntPtr lpNumberOfBytesWritten);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(
IntPtr hProcess,
IntPtr lpBaseAddress,
[Out] byte[] lpBuffer,
int dwSize,
out int lpNumberOfBytesRead
);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(
IntPtr hProcess,
IntPtr lpBaseAddress,
[Out, MarshalAs(UnmanagedType.AsAny)] object lpBuffer,
int dwSize,
out int lpNumberOfBytesRead
);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(
IntPtr hProcess,
IntPtr lpBaseAddress,
IntPtr lpBuffer,
int dwSize,
out int lpNumberOfBytesRead
);
public int pID;
public Form1()
{
InitializeComponent();
GetProcess("plugin-container");
WriteBytes();
}
public void GetProcess(string name)
{
var plist = Process.GetProcesses();
if (plist.Count() != 0)
{
foreach (var process in plist)
{
if (process.ProcessName == name)
{
pID = process.Id;
MessageBox.Show("Процесс найден!");
return;
}
}
}
return;
}
private void button1_Click(object sender, EventArgs e);
public int FindSignature()
{
var moduleName = "plugin-container.exe";
var startAddress = 0;
var sizeToAllocate = 0;
var pattern = new int[] { 0xE8, -1, -1, -1, -1, 0xE9, -1, -1, -1, -1, 0x3B, 0x0D, -1, -1, -1, -1, 0x75, 0x02, 0xF3, 0xC3 };
if (pID != 0)
{
foreach (var p in Process.GetProcesses())
{
if(p.Id == pID)
{
foreach (ProcessModule m in p.Modules)
{
if (m.ModuleName == moduleName)
{
startAddress = (int)m. BaseAddress;
sizeToAllocate = m.ModuleMemorySize;
break;
}
}
}
}
var handle = OpenProcess(0x001F0FFF, false, pID);
if (handle != IntPtr.Zero)
{
byte[] buffer = new byte[sizeToAllocate];
int bytesread;
ReadProcessMemory(handle, (IntPtr)startAddress, buffer, sizeToAllocate, out bytesread);
CloseHandle(handle);
var counter = 0;
if (pattern.Length <= buffer.Length)
{
foreach (var p in Process.GetProcesses())
{
{
if (buffer[1] == pattern[0] | pattern[0] == -1)
{
for (var j = 0; j < pattern.Length; j++)
{
if (buffer[1 + j] == pattern[j] | pattern[j] == -1)
{
counter++;
if (counter == pattern.Length)
{
var result = 1 + startAddress;
return (int)result;
}
}
else
{
counter = 0;
}
}
}
}
}

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я ещё раз повторюсь - флеш игры работают не совсем так, как обычные виндовые приложения. Для них есть специальные декомпиляторы. Качаешь .swf-файл с игрой, декомпилируешь, меняешь то, что тебе надо, компилируешь обратно. Сигнатуры тут искать бесполезно.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

>>Здраствуйте вот переделал код, серавно чет не пашет

Возможные проблемы:

1) Сигнатура неверная или поменялась в игре

2) Код поиска сигнатуры неверный

Если бы всё и всегда пахало, все были бы программистами.

Придётся потрудиться и саму найти ошибку. Для этого в среде разработки есть отладочный режим.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я ещё раз повторюсь - флеш игры работают не совсем так, как обычные виндовые приложения. Для них есть специальные декомпиляторы. Качаешь .swf-файл с игрой, декомпилируешь, меняешь то, что тебе надо, компилируешь обратно. Сигнатуры тут искать бесполезно.

Да нет, все читы которые я знаю к этой игре написаны с помощью сигнатур.

А можете дать исходный код сигнатуры к какой нибудь офф лайн игре, ато я этот сам собрал и не могу разобраться в чем проблема.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
"не все ветви кода возвращают значение"
тебе int не возвращается public int FindSignature()

попробуй public void FindSignature()


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;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool CloseHandle(IntPtr hObject);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out UIntPtr lpNumberOfBytesWritten);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, int dwSize, out int lpNumberOfBytesRead);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out, MarshalAs(UnmanagedType.AsAny)] object lpBuffer, int dwSize, out int lpNumberOfBytesRead);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, int dwSize, out int lpNumberOfBytesRead);
public int pID;
public Form1()
{
InitializeComponent();
GetProcess("my_tank");
}
public void GetProcess(string name)
{
var plist = Process.GetProcesses();
if (plist.Count() != 0)
{
foreach (var process in plist)
{
if (process.ProcessName == name)
{
pID = process.Id;
MessageBox.Show("Процесс найден!");
return;
}
}
}
return;
}

public void FindSignature()
{
var moduleName = "my_tank.exe";
var startAddress = 0;
var sizeToAllocate = 0;
var pattern = new int[] { 0xE8, -1, -1, -1, -1, 0xE9, -1, -1, -1, -1, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC };
if (pID != 0)
{
foreach (var p in Process.GetProcesses())
{
if (p.Id == pID)
{
foreach (ProcessModule m in p.Modules)
{
if (m.ModuleName == moduleName)
{
startAddress = (int)m.BaseAddress;
sizeToAllocate = m.ModuleMemorySize;
break;
}
}
}
}
var handle = OpenProcess(0x001F0FFF, false, pID);
if (handle != IntPtr.Zero)
{
byte[] buffer = new byte[sizeToAllocate];
int bytesread;
ReadProcessMemory(handle, (IntPtr)startAddress, buffer, sizeToAllocate, out bytesread);
CloseHandle(handle);
var counter = 0;
if (pattern.Length <= buffer.Length)
{
for (var i = 0; i < buffer.Length; i++)
{
if (buffer[i] == pattern[0] | pattern[0] == -1)
{
for (var j = 0; j < pattern.Length; j++)
{
if (buffer[i + j] == pattern[j] | pattern[j] == -1)
{
counter++;
if (counter == pattern.Length)
{
var result = i + startAddress;
break;
}
}
}
}
}
}
}
}
}
}
}
using System;


namespace ModuleBase
{
class Program
{
static void Main(string[] args)
{
var processName = "xxx"; //Твой процес, не пишем расширение "*.exe"
var someModuleName = "yyy.dll"; //Нужный модуль
var arrayProcesses = System.Diagnostics.Process.GetProcessesByName(processName);
if (arrayProcesses == null || arrayProcesses.Length < 1)
{
Console.WriteLine("Process not found");
return;
}
var currentProcess = arrayProcesses[0];
Console.WriteLine("Address prosess: " + processName + ".exe" + " = " + "0x" + currentProcess.MainModule.BaseAddress.ToString("X"));
var modules = currentProcess.Modules;
var max = modules.Count;
for (int i = 0; i < max; i++)
if (String.Compare(modules[i].ModuleName, someModuleName, true) == 0)
{
Console.WriteLine("Address module: " + modules[i].ModuleName + " = " + "0x" + modules[i].BaseAddress.ToString("X"));
break;
}
Console.Read();
}
}
}
using System;

смотри тут

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

О работает спасибо!!! :)

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А почему handle у меня остается 0?

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А почему handle у меня остается 0?

 

А почему бы не написать максимально подробно? Телепаты наши в отпусках все.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас