Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

C# Problem z trainerem


Rekomendowane odpowiedzi

Opublikowano

Witam posiadam taki kod w C# :

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;


namespace SaperTrainerV43._0
{
    class Program
    {
        static void Main(string[] args)
        {
            Process[] processes = Process.GetProcessesByName("minesweeper");
            if (processes.Length > 0)
                using (CheatEngine.Memory memory = new CheatEngine.Memory(processes[0]))
                {
                    CheatEngine.ProcessAddress address =
                        memory.GetAdress("minesweeper.exe@AAA38@120");
                    Console.WriteLine("Current cash: {0}", memory.ReadUInt32(address));
                    Console.WriteLine("Enter new cash: ");
                    uint newCash = uint.Parse(Console.ReadLine());
                    memory.WriteUInt32(address, newCash);
                }
        }
    }
}

To są moje biblioteki: address memory Win32

 

Wywala mi takie 3 errory nie wiem czemu :O

 

http://iv.pl/images/08870446452681263154.png

 

65135238787935115850.gif

Opublikowano

@Phoenix_PL

 

Musi być FarCry3Trainer? Jeżeli zmienię nazwe w bibliotece memory na własną np  test.CheatEngine to w programie moge dopisać 

using Test.CheatEngine;

?

 

@Edit

 

Jak mogę przerobić ten kod żeby było na klawisz? Np F1.

 

Naciskam F1 i dodaje np 1000 value 

 

@Edit

 

Nie działa cały czas wywala ten sam error

65135238787935115850.gif

Opublikowano

To nie są biblioteki, a klasy. Załączyłeś w ogóle te klasy do projektu? Klas nie inicjalizuje się przez "using".

Do sprawdzenia wciśniętego klawisza można wykorzystać getAsyncKeyState- user32.dll (tak, wiem, że jest "lepszy sposób").

Te klasy to gotowce z neta, więc lepiej zapoznaj się najpierw z nimi, a później spróbuj sam kombinować z własną aplikacją.

 CheatEngine.Memory memory = new CheatEngine.Memory(processes[0])
 CheatEngine.ProcessAddress address = memory.GetAdress("minesweeper.exe@AAA38@120");

To przykład tworzenia obiektu klasy.

Opublikowano

Przerobiłem to na taki kod:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;


namespace Trainer
{
    class Program
    {
        static void Main(string[] args)
        {
            Process[] processes = Process.GetProcessesByName("minesweeper");
            if (processes.Length > 0)
                using (CheatEngine.Memory memory = new CheatEngine.Memory(processes[0]))
                {
                    IntPtr address =
                        memory.GetAddress("minesweeper.exe@AAA38@120");
                    Console.WriteLine("Aktualna wartosc: {0}", memory.ReadUInt32(address));
                    Console.WriteLine("Wpisz nowa wartosc: ");
                    uint newCash = uint.Parse(Console.ReadLine());
                    memory.WriteUInt32(address, newCash);
                }
        }
    }
}
Ale wywala mi coś takiego:
 

65135238787935115850.gif

Opublikowano

@Arkeus

 

Okej wiesz jak mogę znaleźć adres statyczny w CE?

 

Bo moim pointerem jest: minesweeper.exe+AAA38 + offset 120

 

A adres który jest zielony zmienia się po wyłączeniu gry. jak znaleźć bazowy?

65135238787935115850.gif

Opublikowano

­Nie pisz tego w C# bo o wiele lepiej (prościej) jest to napisać w C++.

Adres bazowy można pobrać poprzez GetModuleBase GetModuleHandle("nazwaprocesubezexe"), jeśli robimy internal cheata, ewentualnie jeśli chcesz externala to OpenProcess zwraca adres bazowy.

 

HANDLE handle = GetCurrentProcess(); //or OpenProcess()
void *baseAddress = (void*) handle;
Jak chcesz to zrobić koniecznie w C# to masz do tego klasę ProcessModule

 

I serio polecam przeniesienie się na C++, bo do takich rzeczy jest on najlepszy.

846331404756772371599.jpeg
Opublikowano

­Nie pisz tego w C# bo o wiele lepiej (prościej) jest to napisać w C++.

Adres bazowy można pobrać poprzez GetModuleBase("nazwaprocesubezexe"), jeśli robimy internal cheata, ewentualnie jeśli chcesz externala to OpenProcess zwraca adres bazowy.

HANDLE handle = GetCurrentProcess(); //or OpenProcess()
void *baseAddress = (void*) handle;
Jak chcesz to zrobić koniecznie w C# to masz do tego klasę ProcessModule

 

I serio polecam przeniesienie się na C++, bo do takich rzeczy jest on najlepszy.

 

GetModuleHandle(NULL);

Opublikowano

­Zwraca uchwyt, ale można go najwyraźniej rzutować na adres bazowy procesu.

Jeśli potrzebujemy adresu innego modułu, musimy się pobawić albo z headerami, albo z EnumProcessModules.

 

@Miszczu jeden cuj jak GetModuleBase, ale i tak działa tylko wewnętrznie.

 

Pfu, przepraszam, jest tylko GetModuleHandle, zagapiłem się xD

846331404756772371599.jpeg
Opublikowano

Ty nie masz nic dodawać na kalkulatorze, przeczytaj jak działają wskaźniki :/

Myślę, że on po prostu sprawdzał działanie programu na zielonym adresie (adresie statycznym) i nie zmienia mu nic w kalkulatorze.

TuByłaSygnatura.png

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...