private void ReadIDsFromMemory(TorrentClient[] internalClients)
 {
     currentRMIns.AddLogLine("Looking for uTorrent 1.6  (build 474) process...");
     Process[] processesByName = Process.GetProcessesByName("utorrent");
     if (processesByName.Length == 0)
     {
         currentRMIns.AddLogLine("No uTorrent process found :(");
     }
     else
     {
         ProcessMemoryReader pReader = new ProcessMemoryReader();
         pReader.ReadProcess = processesByName[0];
         currentRMIns.AddLogLine("uTorrent process found! Checking version and data offsets :)");
         pReader.OpenProcess();
         string str    = "";
         string prefix = "-UT1600-";
         str = this.ReadMemoryIdString(pReader, "utorrent_peerid", prefix, 0x448a38);
         if (str == "")
         {
             currentRMIns.AddLogLine("Incompatible uTorrent version or wrong data offsets :(");
         }
         else
         {
             internalClients[1].PeerID = "-UT1600-" + this.stringGenerator.urlEncode(str, false);
             this.ReadMemoryIdString(pReader, "utorrent_key", "", 0x448a34);
             internalClients[1].Key = this.ReadMemoryIdString(pReader, "utorrent_key", "", 0x448a34);
             currentRMIns.AddLogLine("Success!!!");
             currentRMIns.AddLogLine("Updated " + internalClients[1].Name);
             currentRMIns.AddLogLine("---> peerID=" + internalClients[1].PeerID);
             currentRMIns.AddLogLine("---> key=" + internalClients[1].Key);
             currentRMIns.AddLogLine("");
             pReader.CloseHandle();
         }
     }
 }
예제 #2
0
 public bool UpdateGame(Process target)
 {
     try { mem.CloseHandle(); } catch { }
     if (mem.ReadProcess != null)
     {
         mem.ReadProcess = null;
     }
     if (game != null)
     {
         game = null;
     }
     if (!target.HasExited)
     {
         game            = target;
         mem.ReadProcess = game;
         mem.OpenProcess();
     }
     return(CheckGame());
 }
예제 #3
0
        /// <summary>
        /// The thread funktion to poll the telemetry data and send TelemetryUpdated events.
        /// </summary>
        private void Run()
        {
            isStopped = false;

            WFSTAPI lastTelemetryData = new WFSTAPI();

            lastTelemetryData.Reset();
            Matrix4x4 lastTransform  = Matrix4x4.Identity;
            bool      lastFrameValid = false;
            Vector3   lastVelocity   = Vector3.Zero;
            float     lastYaw        = 0.0f;
            Stopwatch sw             = new Stopwatch();

            sw.Start();

            NestedSmooth accXSmooth = new NestedSmooth(3, 6, 0.5f);
            NestedSmooth accYSmooth = new NestedSmooth(3, 6, 0.5f);
            NestedSmooth accZSmooth = new NestedSmooth(3, 6, 0.5f);

            KalmanFilter velXFilter = new KalmanFilter(1, 1, 0.02f, 1, 0.02f, 0.0f);
            KalmanFilter velZFilter = new KalmanFilter(1, 1, 0.02f, 1, 0.02f, 0.0f);

            NoiseFilter velXSmooth = new NoiseFilter(6, 0.5f);
            NoiseFilter velZSmooth = new NoiseFilter(6, 0.5f);

            KalmanFilter yawRateFilter = new KalmanFilter(1, 1, 0.02f, 1, 0.02f, 0.0f);
            NoiseFilter  yawRateSmooth = new NoiseFilter(6, 0.5f);

            NoiseFilter pitchFilter = new NoiseFilter(3);
            NoiseFilter rollFilter  = new NoiseFilter(3);
            NoiseFilter yawFilter   = new NoiseFilter(3);

            KalmanFilter posXFilter = new KalmanFilter(1, 1, 0.02f, 1, 0.1f, 0.0f);
            KalmanFilter posYFilter = new KalmanFilter(1, 1, 0.02f, 1, 0.1f, 0.0f);
            KalmanFilter posZFilter = new KalmanFilter(1, 1, 0.02f, 1, 0.1f, 0.0f);

            NestedSmooth posXSmooth = new NestedSmooth(12, 6, 0.5f);
            NestedSmooth posYSmooth = new NestedSmooth(12, 6, 0.5f);
            NestedSmooth posZSmooth = new NestedSmooth(12, 6, 0.5f);



            NoiseFilter slipAngleSmooth = new NoiseFilter(6, 0.25f);

            ProcessMemoryReader reader = new ProcessMemoryReader();

            reader.ReadProcess = wfstProcess;
            uint readSize = 4 * 4 * 4;

            byte[] readBuffer = new byte[readSize];
            reader.OpenProcess();

            while (!isStopped)
            {
                try
                {
                    float dt = (float)sw.ElapsedMilliseconds / 1000.0f;


                    int byteReadSize;
                    reader.ReadProcessMemory((IntPtr)memoryAddress, readSize, out byteReadSize, readBuffer);


                    if (byteReadSize == 0)
                    {
                        continue;
                    }

                    float[] floats = new float[4 * 4];

                    Buffer.BlockCopy(readBuffer, 0, floats, 0, readBuffer.Length);

                    Matrix4x4 transform = new Matrix4x4(floats[0], floats[1], floats[2], floats[3]
                                                        , floats[4], floats[5], floats[6], floats[7]
                                                        , floats[8], floats[9], floats[10], floats[11]
                                                        , floats[12], floats[13], floats[14], floats[15]);



                    Vector3 rht = new Vector3(transform.M11, transform.M12, transform.M13);
                    Vector3 up  = new Vector3(transform.M21, transform.M22, transform.M23);
                    Vector3 fwd = new Vector3(transform.M31, transform.M32, transform.M33);

                    float rhtMag = rht.Length();
                    float upMag  = up.Length();
                    float fwdMag = fwd.Length();

                    //reading garbage
                    if (rhtMag < 0.9f || upMag < 0.9f || fwdMag < 0.9f)
                    {
                        IsConnected = false;
                        IsRunning   = false;
                        TelemetryLost();
                        break;
                    }

                    if (!lastFrameValid)
                    {
                        lastTransform  = transform;
                        lastFrameValid = true;
                        lastVelocity   = Vector3.Zero;
                        lastYaw        = 0.0f;
                        continue;
                    }

                    WFSTAPI telemetryData = new WFSTAPI();

                    if (dt <= 0)
                    {
                        dt = 1.0f;
                    }


                    Vector3 worldVelocity = (transform.Translation - lastTransform.Translation) / dt;
                    lastTransform = transform;

                    Matrix4x4 rotation = new Matrix4x4();
                    rotation     = transform;
                    rotation.M41 = 0.0f;
                    rotation.M42 = 0.0f;
                    rotation.M43 = 0.0f;

                    Matrix4x4 rotInv = new Matrix4x4();
                    Matrix4x4.Invert(rotation, out rotInv);

                    Vector3 localVelocity = Vector3.Transform(worldVelocity, rotInv);

                    telemetryData.velX = worldVelocity.X;
                    telemetryData.velZ = worldVelocity.Z;

                    Vector3 localAcceleration = localVelocity - lastVelocity;
                    lastVelocity = localVelocity;


                    telemetryData.accX = localAcceleration.X * 10.0f;
                    telemetryData.accY = localAcceleration.Y * 100.0f;
                    telemetryData.accZ = localAcceleration.Z * 10.0f;


                    float pitch = (float)Math.Asin(-fwd.Y);
                    float yaw   = (float)Math.Atan2(fwd.X, fwd.Z);

                    float   roll     = 0.0f;
                    Vector3 rhtPlane = rht;
                    rhtPlane.Y = 0;
                    rhtPlane   = Vector3.Normalize(rhtPlane);
                    if (rhtPlane.Length() <= float.Epsilon)
                    {
                        roll = -(float)(Math.Sign(rht.Y) * Math.PI * 0.5f);
                    }
                    else
                    {
                        roll = -(float)Math.Asin(Vector3.Dot(up, rhtPlane));
                    }

                    telemetryData.pitchPos = pitch;
                    telemetryData.yawPos   = yaw;
                    telemetryData.rollPos  = roll;

                    telemetryData.yawRate = CalculateAngularChange(lastYaw, yaw) * (180.0f / (float)Math.PI);
                    lastYaw = yaw;

                    // otherwise we are connected
                    IsConnected = true;

                    if (IsConnected)
                    {
                        IsRunning = true;


                        WFSTAPI telemetryToSend = new WFSTAPI();
                        telemetryToSend.Reset();

                        telemetryToSend.CopyFields(telemetryData);

                        telemetryToSend.accX = accXSmooth.Filter(telemetryData.accX);
                        telemetryToSend.accY = accYSmooth.Filter(telemetryData.accY);
                        telemetryToSend.accZ = accZSmooth.Filter(telemetryData.accZ);


                        telemetryToSend.pitchPos = pitchFilter.Filter(telemetryData.pitchPos);
                        telemetryToSend.rollPos  = rollFilter.Filter(telemetryData.rollPos);
                        telemetryToSend.yawPos   = yawFilter.Filter(telemetryData.yawPos);

                        telemetryToSend.velX = velXSmooth.Filter(velXFilter.Filter(telemetryData.velX));
                        telemetryToSend.velZ = velZSmooth.Filter(velZFilter.Filter(telemetryData.velZ));

                        telemetryToSend.yawRate = yawRateSmooth.Filter(yawRateFilter.Filter(telemetryData.yawRate));

                        telemetryToSend.yawAcc = slipAngleSmooth.Filter(telemetryToSend.CalculateSlipAngle());

                        sw.Restart();

                        TelemetryEventArgs args = new TelemetryEventArgs(
                            new WFSTTelemetryInfo(telemetryToSend, lastTelemetryData));
                        RaiseEvent(OnTelemetryUpdate, args);

                        lastTelemetryData = telemetryToSend;
                        Thread.Sleep(1000 / 100);
                    }
                    else if (sw.ElapsedMilliseconds > 500)
                    {
                        IsRunning = false;
                    }
                }
                catch (Exception e)
                {
                    LogError("WFSTTelemetryProvider Exception while processing data", e);
                    IsConnected = false;
                    IsRunning   = false;
                    Thread.Sleep(1000);
                }
            }

            IsConnected = false;
            IsRunning   = false;
            reader.CloseHandle();
        }
예제 #4
0
        private void btnGet_Click(object sender, EventArgs e)
        {
            iWidthAddress    = 0x1005334;
            iHeightAddress   = 0x1005338;
            iMinesAddress    = 0x1005330;
            iCellBaseAddress = 0x1005340;


            Process[] prMine = Process.GetProcessesByName("winmine");
            if (prMine.Length == 0)
            {
                return;
            }

            pmrMine.ReadProcess = prMine[0];

            pmrMine.OpenProcess();

            int iWidth;
            int iHeight;
            int iMinesCount;


            byte[] byBuff;
            int    bytesReaded;

            byBuff = pmrMine.ReadProcessMemory((IntPtr)iWidthAddress, 1, out bytesReaded);
            iWidth = byBuff[0];

            byBuff  = pmrMine.ReadProcessMemory((IntPtr)iHeightAddress, 1, out bytesReaded);
            iHeight = byBuff[0];

            byBuff      = pmrMine.ReadProcessMemory((IntPtr)iMinesAddress, 1, out bytesReaded);
            iMinesCount = byBuff[0];

            lblWH.Text = "Width: " + iWidth.ToString() + "  " + "Height: " + iHeight.ToString() + " " + "Mines Count: " + iMinesCount.ToString();

            Button[,] btnArray = new Button[iWidth, iHeight];
            picBtnCon.Controls.Clear();

            IntPtr    i    = Process.GetProcessesByName("winmine")[0].MainWindowHandle;
            Rectangle rect = new Rectangle();

            GetWindowRect(i, ref rect);
            SetForegroundWindow(Process.GetProcessesByName("winmine")[0].MainWindowHandle);
            Thread.Sleep(100);
            for (int y = 0; y < iHeight; y++)
            {
                for (int x = 0; x < iWidth; x++)
                {
                    btnArray[x, y]          = new Button();
                    btnArray[x, y].Location = new Point(x * 20, y * 20);
                    btnArray[x, y].Name     = "";
                    btnArray[x, y].Size     = new Size(20, 20);
                    btnArray[x, y].Parent   = picBtnCon;
                    picBtnCon.Controls.Add(btnArray[x, y]);


                    int iAdd = iCellBaseAddress + (32 * (y + 1) + (x + 1));
                    byBuff = pmrMine.ReadProcessMemory((IntPtr)iAdd, 1, out bytesReaded);
                    int iIsMine = byBuff[0];

                    Cursor.Position = new Point(rect.X + 15 + 6 + 16 * x, rect.Y + 104 + 5 + 16 * y);
                    //Thread.Sleep(1);

                    if (x == 0 && y == 0)
                    {
                        if (iIsMine == 0x8F)
                        {
                            mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, (uint)Cursor.Position.X, (uint)Cursor.Position.Y, 0, 0);
                        }
                        else
                        {
                            mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, (uint)Cursor.Position.X, (uint)Cursor.Position.Y, 0, 0);
                        }
                    }

                    if (iIsMine == 0x8F)
                    {
                        mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, (uint)Cursor.Position.X, (uint)Cursor.Position.Y, 0, 0);
                        btnArray[x, y].Text = "X";
                    }
                    else
                    {
                        mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, (uint)Cursor.Position.X, (uint)Cursor.Position.Y, 0, 0);
                    }
                    Application.DoEvents();
                }
            }
            picBtnCon.Size = new Size(iWidth * 20, iHeight * 20);
            this.Height    = picBtnCon.Height + 140;
            this.Width     = picBtnCon.Width + 30;

            pmrMine.CloseHandle();
        }