【问题标题】:memory reading double value as cheat engine in c#内存读取双值作为c#中的作弊引擎
【发布时间】:2014-10-16 18:32:41
【问题描述】:

我不是代码编写和 C# 编程方面的专家。 我编写了一个简单的应用程序,使用 ZeraPain 脚本 ReadProcessMemory() 从进程内存中读取。 使用 4 字节和 8 字节的值效果很好。 这个应用程序的另一个功能是可以读取字符串,但我真的需要读取 Double 值,我在网上找不到任何东西。 有人可以帮助我吗? 这是应用程序的打印屏幕

这是课程(ZERAPAIN)

class Memory
{
    [DllImport("kernel32.dll")]
    static extern IntPtr OpenProcess(UInt32 dwDesiredAccess, Boolean bInheritHandle, UInt32 dwProcessId);
    [DllImport("kernel32.dll")]
    static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress,
    byte[] lpBuffer, UIntPtr nSize, uint lpNumberOfBytesWritten);

    IntPtr Handle;

    public Memory(string sprocess)
    {
        try
        {
            Process[] Processes = Process.GetProcessesByName(sprocess);
            Process nProcess = Processes[0];
            Handle = OpenProcess(0x10, false, (uint)nProcess.Id);
        }
        catch
        {
            //do nothing
        }
    }

    public string ReadString(uint pointer, Int32 bts)
    {
        byte[] bytes = new byte[bts];

        ReadProcessMemory(Handle, (IntPtr)pointer, bytes, (UIntPtr)24, 0);
        return Encoding.UTF8.GetString(bytes);
    }

    public int ReadPointer(uint pointer, Int32 bts)
    {
        byte[] bytes = new byte[bts];

        ReadProcessMemory(Handle, (IntPtr)pointer, bytes, (UIntPtr)sizeof(int), 0);
        return BitConverter.ToInt32(bytes, 0);
    }
}

这是脚本

private void timer1_Tick(object sender, EventArgs e)
    {
        try
        {
            Memory mem = new Memory(processnameTB.Text);
            uint address = Convert.ToUInt32(AddressTB.Text, 16);
            if (checkBox1.Checked == true)
            {
                try
                {
                    int byt = Convert.ToInt32(bytesnumberTB.Text);
                    string str = mem.ReadString(address, byt);
                    stringvalue.Text = str;
                }
                catch
                {
                    timer1.Enabled = false;
                }
            }
            if (checkBox2.Checked == true)
            {
                try
                {
                    int byt = Convert.ToInt32(bytesnumberTB.Text);
                    double pointer = mem.ReadPointer(address,byt);
                    pointervalue.Text = pointer.ToString();
                }
                catch
                {
                    timer1.Enabled = false;
                }
            }

        }
        catch (Exception ex)
        {
            timer1.Enabled = false;
            MessageBox.Show(ex.Message, "Error");
        }
    }

【问题讨论】:

  • 是什么让您认为您的应用程序的打印屏幕对这里的任何人都有用?大声笑
  • 好的,我现在发布代码......

标签: c# memory double


【解决方案1】:

如果您有一个表示双精度的字节数组,则可以使用 BitConverter.ToDouble() 将这些字节转换为双精度

ToDouble 方法将索引 startIndex 到 startIndex + 7 的字节转换为 Double 值。数组中字节的顺序必须反映计算机系统架构的字节顺序;有关详细信息,请参阅 BitConverter 类主题的备注部分。

http://msdn.microsoft.com/en-us/library/system.bitconverter.todouble(v=vs.110).aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多