Читы-трейнеры [DELPHI]

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by iGlass, 16 Feb 2010.

  1. iGlass

    iGlass New Member

    Joined:
    14 May 2009
    Messages:
    86
    Likes Received:
    1
    Reputations:
    0
    Непонятки [DELPHI]

    Всем доброго времени суток! Собственно не спрашиваю что и как..

    А прошу объяснить кусочек кода...

    Заранее спасибо!

    Вот вопрос:
    Собственно на днях прочитал статью:
    _http://www.chemax.ru/articles/trainer_delphi_api_1.php

    В статье абсолютно всё понятно кроме одного, вот вначале программы описаны две константы:

    Address = $01B40C64;
    PokeValue = $FFFFFFFF;


    Вот с ними и непонятка...

    Внимание вопрос!

    Откуда берутся эти значения?

    Каким софтом пользоваться?

    И вот ещё вопросик думаю тоже в тему:

    Есть у кого нибудь примеры с комментариями по:

    CreateRemoteThread

    Ещё раз огромное спасибо!
     
    #1 iGlass, 16 Feb 2010
    Last edited: 16 Feb 2010
  2. AlexTheC0d3r

    AlexTheC0d3r Elder - Старейшина

    Joined:
    25 Jul 2008
    Messages:
    388
    Likes Received:
    179
    Reputations:
    18
    CreateRemoteThread

    poke = запись элемента данных

    Адрес ищи в artmoney....
    подойдут только те переменные в игре\программе, адреса значений которых не динамические...

    ИМХО
     
  3. BrainDeaD

    BrainDeaD Elder - Старейшина

    Joined:
    9 Jun 2005
    Messages:
    774
    Likes Received:
    292
    Reputations:
    214
    скорее всего, адреса - offsetЫ каких либо значений или функций которые манипулируются читом. возможно, что на твоём компе они будут другими (basepointer+offset) . для их поиска и изменения юзай cheatengine и ollydbg. всё это не так просто. читай туториалы по хаку игр, асму, крекингу.
     
  4. RDL_Rider

    RDL_Rider New Member

    Joined:
    21 Jun 2009
    Messages:
    100
    Likes Received:
    3
    Reputations:
    0
    ищи значения прогой "TSearch", она выдаёт дизассемблированный код в месте где значение изменяется - очень помогает в поиске указателя на значение. Address - указатель на изменяемое значение в игре, который ты и должен найти. В этом и вся сложность. Ты запускаешь игру - считываешь из неё значение указателя и по считанному адресу вписываешь PokeValue. :)

    AlexTheCoder, не усложняй.
    ТС, Это всего-лишь то значение денег, hp или чего угодно, которое ты бы хотел в игре, его ты и записываешь вместо старого.
     
    #4 RDL_Rider, 16 Feb 2010
    Last edited: 16 Feb 2010
  5. Jingo Bo

    Jingo Bo Member

    Joined:
    25 Oct 2009
    Messages:
    368
    Likes Received:
    51
    Reputations:
    7
    На гугл и MSDN нам пофигу да?
    Создаётся однафикственно как обычный поток. А вообще зачем это?
    По той ссылке всё прекрсно закоментированно, что не понятно?:)
    Мышу молотком....


    ТС, что тебе надо?:)
    Если не хочешь искать сам софт, то напиши похожий(по теме). Я просто не пойму суть топика...По функци можно в MSDN найти, а про адрес и значение разжевать?
     
  6. flacs

    flacs Member

    Joined:
    28 Jan 2009
    Messages:
    81
    Likes Received:
    31
    Reputations:
    6
    Address - Виртуальный адрес в памяти, по которому нужно изменить значение.
    PokeValue - Число (размер 4 байта).
    т.е. через WriteProcessMemory() по этому адресу записывается значение размером в 4 байта.

    Artmoney, OllyDbg, IDA и подобными.

    Code:
    {Level 0}
    function InjectLibraryAPI(lpProcessID: Cardinal; lpDllname: String): LongBool;
    var
      hProc: Cardinal;
      oAlloc: Pointer;
      cWPM: Cardinal;
      hRemThread: Cardinal;
    begin
      result := false;
      SetLastError(ERROR_SUCCESS);
      hProc := OpenProcess(PROCESS_ALL_ACCESS, false, lpProcessID); // открываем процесс
      if hProc <> 0 then begin
        oAlloc := VirtualAllocEx(hProc, 0, length(lpDllname), MEM_COMMIT, PAGE_EXECUTE_READWRITE); // если существует выделяем память в процессе
        if oAlloc <> nil then begin
          if WriteProcessMemory(hProc, oAlloc, PChar(lpDllName), length(lpDllName), cWPM) = true then begin // если получилось выделить, то копируем туда содержимое своей DLL
            CreateRemoteThread(hProc, nil, 0, GetProcAddress(GetModuleHandle('kernel32.dll'), 'LoadLibraryA'), oAlloc, 0, hRemThread); // создаем удаленный поток, по адресу kernel32.dll -> LoadLibraryA, чтобы подгрузить DLL средствами WinAPI, в чужом процессе
            if GetLastError = ERROR_SUCCESS then result := true;
          end;
        end;
      end;
      CloseHandle(hProc); // закрываем Handle процесса
    end;
    
     
  7. iGlass

    iGlass New Member

    Joined:
    14 May 2009
    Messages:
    86
    Likes Received:
    1
    Reputations:
    0
    Выходит так: Берём Art Money, запускаем, ищем в игре допустим 1000 денег, допустим нашлось два значения, выбираем из них большее или меньшее?

    P.S Всем респект за помощь!
     
  8. RDL_Rider

    RDL_Rider New Member

    Joined:
    21 Jun 2009
    Messages:
    100
    Likes Received:
    3
    Reputations:
    0
    Обычно берётся большее по адресу, хотя разницы я не вижу (или не понимаю)
    Да, и не забывай про DMA ! Адрес значения, который ты найдёшь через ArtMoney поменяется при следующем запуске игры. Нужно искать указатель на этот адрес.
     
    #8 RDL_Rider, 17 Feb 2010
    Last edited: 17 Feb 2010
  9. iGlass

    iGlass New Member

    Joined:
    14 May 2009
    Messages:
    86
    Likes Received:
    1
    Reputations:
    0
    Ладно, потихоньку я вхожу в курс дела, можно немного подробнее про указатель? Или статейками поделиться ?
     
  10. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    937
    Likes Received:
    162
    Reputations:
    27
    Про указатели написано на том же _http://www.chemax.ru/
     
  11. Fliplab

    Fliplab Elder - Старейшина

    Joined:
    29 Jul 2008
    Messages:
    123
    Likes Received:
    20
    Reputations:
    3
    Юзай гугл!в сети куча примеров трейнеров.на счет указателя памяти,почитай статью,как вытащить пароль из запущенного qip
     
  12. Sams

    Sams Member

    Joined:
    18 Apr 2009
    Messages:
    247
    Likes Received:
    70
    Reputations:
    17
    Эм, вообще-то дальше меняешь значение денег в игре и потом отсеиваешь, пока не останется одно.
    Случаи, когда находят несколько адресов, связано с тем, что значение может находится в нескольких местах.
    Например количество ХП в Диабло. Находит 2 адреса с ХП потому, что один адрес показывает их на левой части экрана в виде красного шара, а другой - в меню характеристик персонажа в поле Life.
     
    #12 Sams, 25 Feb 2010
    Last edited: 25 Feb 2010
  13. RDL_Rider

    RDL_Rider New Member

    Joined:
    21 Jun 2009
    Messages:
    100
    Likes Received:
    3
    Reputations:
    0
    Бред.
    ТС подразумевает, что отсеял уже всё что можно и осталось 2 значения.

    Указатель....эмм...ТС, ты знаешь, что такое DWORD ? Так вот, это обычная переменная, допустим Х . Она находится в памяти по адресу Z.
    например:
    Code:
    var x,y: DWORD;
    begin
    x := 999;
    y := @x; // или y = Addr(x), не помню, но походу можно
    end;
    
    Угадай, что будет в Y? 999? Нет! Там будет Z! То есть Y теперь хранит адрес переменной X, т.е. Y - указатель на переменную Х. Вот и всё, ничего сложного, и не надо талмуды читать :)
     
  14. iGlass

    iGlass New Member

    Joined:
    14 May 2009
    Messages:
    86
    Likes Received:
    1
    Reputations:
    0
    Всем спасибо за разъяснение без талмуд)