Перейти к содержанию

CHBS

Пользователи
  • Постов

    62
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные CHBS

  1. 18 часов назад, Garik66 сказал:
    
    fstp dword ptr [esi-04]
    mov [esi-04], (float)10 // или можно и по дру

     

    Еще вопрос такой

    fstp dword ptr [esi-04]
    // float store обращается через dword ptr
    // нужно ли делать тоже самое в измененении значения, т.е
    mov dword ptr [esi-04], (float)1000
    // т.е в каких случаях нужно указывать dword ptr в mov, просто в fstp он указан, а в mov нет

    сейчас попробовал проверить опытным путем свою инструкцию, все получилось, все значения колес изменились на 1000, все 4 колеса, машина впечаталась в пол, а не вперед, это мой косяк с нужным значением.

    Но опытным путем выяснилось то что если написать

    mov dword ptr [esi-04], (float)1000
    //будет краш из-за dword ptr
    mov [esi-04], (float)1000 
    // полет нормальный

     

  2. 18 часов назад, Garik66 сказал:

    Стандартнаяошибка в скриптах Cheat Engine всех новичков

    Посмотрел видео, спасибо, решился вопрос все таки, как лучше написать скрипт, но по факту я писал изначально правильно, по второму варианту

    т.е если в оригинальной инструкции будет такое -

    mov [ecx+04], ebx

    То очевидно что лучше записать в регистр ebx, потому что следующая инструкция возьмет из этого регистра данные, поэтому собственно с записью я сделал все верно

    18 часов назад, Garik66 сказал:

    3. Фильтр:

    Да, все верно, потому что я зашел в обычную кольцевую гонку, и на мое удивление мои соперники тоже притягивались к дороге, я написал скрипт правильно еще вчера, просто почему то машину не тянуло вперед, а ее тянуло вниз, будто я бустил не координату X/Y а бустил координату Z по вектору

     

    18 часов назад, Garik66 сказал:

    поверхности в регистрах (в структуре).

    Ну мне на самом деле проблематично выйти на эту структуру

     

    18 часов назад, Garik66 сказал:

    Удачи во взломе!!!

    Спасибо, сейчас буду пробовать, если что напишу результат))

  3. 23 часа назад, LIRW сказал:

    А в этой инструкции небось - ещо 255 адресов да

    Скорее всего так и есть, или

     

    В 18.11.2017 в 01:19, CHBS сказал:

    у меня есть подозрение, что я смещаю инструкции, и все соответственно ломается, зато не вылетает, вот что интересно))))))

    Такой вариант может быть?

  4. 53 минуты назад, ReWanet сказал:

    Я же тебе говорил в дискорде про это?

    Да вроде, в данный момент я так и поступил, нашел что туда пишет, делаю инъекцию по инструкциям которые пишут в этот адрес

     

    Пробовал так:

    newmem:
    mov [esi-04], (float)10
    
    originalcode:
    fstp dword ptr [esi-04]
    jne SPEED2.EXE+1AA550

    Ничего не происходит

     

    Попробовал вот так:

    newmem:
    mov [esi-04], (float)10
    fstp dword ptr [esi-04]
    jne SPEED2.EXE+1AA550
    
    originalcode:
    fstp dword ptr [esi-04]
    jne SPEED2.EXE+1AA550

    Вешается игровая отриосвка, становится 1fps, хотя я сразу после включения скрипта выключаю его, вообщем, он вешается, и с одним фпс приходится рестартать гонку, далее все стабилизируются, и кстати, когда крашится отрисовка, ломаются все значения в ранее найденых указателях, у меня есть подозрение, что я смещаю инструкции, и все соответственно ломается, зато не вылетает, вот что интересно))))))

     

    Вот полный код инъекции

    Скрытый текст
    
    [ENABLE]
    //code from here to '[DISABLE]' will be used to enable the cheat
    alloc(newmem,2048)
    label(returnhere)
    label(originalcode)
    label(exit)
    
    newmem:
    mov [esi-04], (float)10
    fstp dword ptr [esi-04]
    jne SPEED2.EXE+1AA550
    
    originalcode:
    fstp dword ptr [esi-04]
    jne SPEED2.EXE+1AA550
    
    exit:
    jmp returnhere
    "SPEED2.EXE"+1AA564:
    jmp newmem
    
    returnhere:
    
     
     
    [DISABLE]
    //code from here till the end of the code will be used to disable the cheat
    dealloc(newmem)
    "SPEED2.EXE"+1AA564:
    fstp dword ptr [esi-04]
    jne SPEED2.EXE+1AA550
    //Alt: db D9 5E FC 75 E7

     

     

  5. 4 минуты назад, Garik66 сказал:

    mov eax, (float)1000

    Заработало, сам запамятовал правильное приведение в флоат)))

    Еще пару вопросов, колеса у меня 4, и нужно записать в 4 адреса это флоат значение, как я могу это сделать одним code injection?

    ведь я выполняю инъекцию в определенный адрес, а таких подобных адреса еще 3, но у них есть смещение от первого колеса по (28 + 1A0)

    Далее, если я запишу значение в эти 4 адреса, как мне заморозить их на постоянно\на время?

    Я делаю буст авто, нужно в эти 4 адреса получается кратковременно подержать флоат 1000 едениц

  6. Приветствую пользователей форума, ковыряю игру из названия темы

     

    Скрытый текст

    XDmHT

     

     

    Под спойлером картинка

    Цель изменить значение адреса 0BD2CE88, выделено в рамку помечено как Addr Value

    Я пытался сделать Code injection по конкретному адресу, пользователь @ReWanet  поправил меня, и сказал что стоит делать AOBScan, я сделал AOBScan рамка справа, но проблема заключается в том, что если автомобиль стоит на месте, и у адреса значение скорости будет 0, соответственно и сигнатура будет одна, обусловим ее так "C7 78 A6 42", если машина будет стоять, и я активирую скрипт, то в теории все сработает, но что делать если машина поедет, а ведь у адреса сменится значение скорости, а соответственно изменится сигнатура, она станет например  такой

    "0A D7 23 3C C8 EB 07", а значит AOBScan не сработает в этом случае, как быть?
    Если я не понятно объяснил, то сигнатура AOBScan постоянно меняется по ходу игры, и AOBScan теоретически применить нельзя, либо я не знаю каких то тонкостей с работой AOBScan'a

     

    Когда я делал Code Injection @Garik66 поправил меня, указав на то что так делать нельзя в метку newmem: я записал команду mov ebx, #1000,

    надеясь что в ebx запишется флоат значение 1000, но как мне сказали, это не так и я задаю вопрос по поводу занесения значений через автоассемблер
    1. Как в регистр в автоассемблере записать флоат значение?
    2. Что значит решетка перед записываемым числом?
    3. Какая разница между #1000 и float(1000)?

     

                   

     

     

  7. В ‎01‎.‎11‎.‎2017 в 17:06, LIRW сказал:

    Вот видео снял,

    Блин, видео удаленно, самому интересно стало как ты ищешь значение, ты не мог бы видео перезалить\ и скрыть если требуется?

     

  8. 17 час назад, Dino сказал:

     

     

    :D учи матчасть, чтобы в дальнейшем динамически созданные переменные в памяти модулей не искать 

    https://ru.wikipedia.org/wiki/Куча_(память)

    Ну как-бы я сделал все верно, я не знаю что вы имели ввиду, но переменные создаются в луа динамически, а в моей игре они грузятся в главный модуль.

    Ну да ладно, проблему я решил использовав VirtualQueryEx.

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

  9. 9 часов назад, Dino сказал:

    ну вот, сам ответил на свой вопрос, почему тогда в г модуле ищешь?)

    Потому что переменная находится в главном модуле как-бы, а во вторых, если бы ты посмотрел последний код, то я уже ищу ее во всех модулях, и не нахожу, вот в чем дело.

  10. 3 часа назад, Dino сказал:

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

    Интепретируемый язык LUA в игре, да, переменная собственно создается динамически и грузится в память.

     

    3F65C840 вот адресс в памяти, в котором хранится мое значение в double

     

    Скрытый текст

    XQo4FtyHZvXTfS6uSArVM3TwV67zQE.png

     

    И вот вам в Double представлении 

     

    Скрытый текст

    dJkjdWaD33Unv6Hc67R79WiQMj7Gro.png

     

  11. 4 часа назад, partoftheworlD сказал:

    Если надо получать информацию о всех модулях, то стоит использовать NtQueryInformationProcess, если только 32 битных то CreateToolhelp32Snapshot, если же модули правильно определяет, то скорее всего Text.Encoding.UTF8.GetBytes не правильно переводит значение. И мне кажется стоило бы использовать VirtualQueryEx, чтобы читать байты из памяти.

    Уважаемый, вы в ту ветку пишете?

    Мы тут на C# пишем, а не плюсах, какие снапшоты?

    А какая разница между VirtualQueryEx и ReadProcessMemory, если я дамп модуля снимаю?

    И посмотрите мой последний пост, там уже алгоритм поиска другой, я пытаюсь перейти на него исключив Text.GetBytes

    А перейти на чистое байтовое сравнение.

     

  12. Я в отчаянии, я уже иду по всем модулям и их базовым адресам

    Скрытый текст
    
    int Counter = 0;
    int CapBytes = 0;
    int ProcessModuleSize;
    int ProcessBaseAddress;
    byte[] SearchValueByPattern;
    byte[] SearchValueByLinear;
    byte[] MemoryBuffer;
    
    
    Process ProcessData = Process.GetProcessesByName("prc")[0]; // Поиск процесса
    ProcessBaseAddress = (int)ProcessData.MainModule.BaseAddress;         // Базовый адресс процесса
    ProcessModuleSize = ProcessData.MainModule.ModuleMemorySize;    // Размер модуля процесса
    var x = ProcessData.Modules[0].ModuleMemorySize;
    MemoryBuffer = new byte[ProcessModuleSize];                // Инициализириую массив байтов размером модуля процесса 
    SearchValueByPattern = new byte[] { 0x41, 0x0A, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00 };       // Сигнатура для поиска адресса
    SearchValueByLinear = System.Text.Encoding.UTF8.GetBytes("967110984321231");     // Значение для поиска адресса
    
    
    for (int g = 0; g < ProcessData.Modules.Count; g++)
                {
                    ProcessBaseAddress = (int)ProcessData.Modules[g].BaseAddress;
                    MemoryBuffer = new byte[ProcessData.Modules[g].ModuleMemorySize];
                    ReadProcessMemory((int)ProcessData.Handle, ProcessBaseAddress, MemoryBuffer, MemoryBuffer.Length, ref CapBytes);
                    if (MemoryBuffer.Length >= SearchValueByPattern.Length)
                    {
                        for (int i = 0; i < MemoryBuffer.Length - SearchValueByPattern.Length; i++)
                        {
                            if (MemoryBuffer == SearchValueByPattern[0])
                            {
                                for (int j = 0; j < SearchValueByPattern.Length; j++)
                                {
                                    if (MemoryBuffer[i + j] == SearchValueByPattern[j])
                                    {
                                        Counter++;
                                        if (Counter == SearchValueByPattern.Length)
                                        {
                                            MessageBox.Show("0x" + Convert.ToString(ProcessBaseAddress + i, 16).ToUpper());
                                            //return ProcessBaseAddress + i;
                                        }
                                    }
                                    else
                                    {
                                        Counter = 0;
                                    }
                                }
                            }
                        }
                    }
                } 

     

    И все равно ничего...

  13. Еще не могу понять прикола с базовыми адресами

    Скрытый текст

    crOUI6tgRpKPo2gUzhdZyqtUOUnp2k.png

    Посмотрите на базовые адреса в моей программе(они верны, цикл на Process.Modules, и посмотрите на базовый адрес в Cheat Engine, еще такая же лабуда с размером модулей, в моей программе все отличается, брал так же из Process.MemoryModuleSize

    Т.е C.E. Показывает базовый адрес 0x3F7E3000 а в софте минимальный базовый адрес 0x5D2B0000

     

  14. Только что, partoftheworlD сказал:

     

    Разве исходники CE закрыты стали и нельзя посмотреть как там реализован поиск?

    Разве я сказал что они закрыты?

    CE написан отчасти на Delphi, но у меня даже на пк валяется проект на Delphi, который ищет double значение в памяти, мне нужно найти значение в памяти через C#, что уже является лично для меня проблеммой потому что я не знаю как искать значение в C# по его типу, сказывается заброс кодинга, я сейчас пытаюсь найти значение через System.Text.Encoding.UTF8.GetBytes("967110984321231");

    Принцип поиска понятен изначально, непонятна реализация на том или инном языке.

    В Delphi мне будет проще реализовать поиск точного значения с помощью готовых наработок, но тут C# и я не знаю каким методом сейчас ищу я и я могу только предпологать что если я ищу через UTF8.GetBytes, то вероятно я ищу строковое значение в памяти, а не double в котором у меня лежит переменная в игре

  15. 11 час назад, Dino сказал:

    Если переменная  "Variable = 967110984321231"  не является статической, то почему ты ее ищешь в главном модуле процесса?)

    Это я вообще не понял, а где мне ее тогда искать, можно ответы какие то более развертнутые и конкретные?

     

    Я ищу данное значение в главном модуле игры, т.к как это значение всегда хранится в главном модуле игры.

  16. 17 час назад, Xipho сказал:

    Думаю, стоит переменную представлять не как переменную, а как массив байтов. В таком случае будет видно, как именно сравниваются байты. Есть подозрение, что у тебя порядок байт неправильный, ведь в памяти значения хранятся в перевернутом виде, надо это помнить.

    Немного не понял первую часть ответа, ведь   BitConverter.GetBytes(967110984321231) - возвращает массив байтов, и переменная представляется собственно как массив байтов.

    А со вторым я сделал через System.Text.Encoding.UTF8.GetBytes("967110984321231"), проверил выдачу на decimal выдается теперь нормально то что нужно, но байты через 0 идут, т.е 57 00 54 00 и так далее.

     

    Лучше подскажите мне как сделать поиск значения как в CE, так как значение в игре у меня уникальное, и выдает всегда только 1 адресс

     

  17. Добрый вечер господа, примерно сутки уже бьюсь головой об клавиатуру

     

    Имеется код - > 

    Скрытый текст
    
    int Counter;
    int CapBytes;
    int ProcessModuleSize;
    int ProcessBaseAddress;	
    int[] SearchValueByPattern;
    byte[] SearchValueByLinear;
    byte[] MemoryBuffer;
    
           
    Process ProcessData  = Process.GetProcessesByName("myprocess")[0]; // Поиск процесса
    ProcessBaseAddress   = (int)ProcessData.MainModule.BaseAddress;    // Базовый адресс процесса
    ProcessModuleSize    = ProcessData.MainModule.ModuleMemorySize;    // Размер модуля процесса
    MemoryBuffer         = new byte[ProcessModuleSize];                // Инициализириую массив байтов размером модуля процесса 
    SearchValueByPattern = new int[] {-1, -1, 0x89, 0xC9, 0x32};       // Сигнатура для поиска адресса
    SearchValueByLinear  = BitConverter.GetBytes(967110984321231);     // Значение для поиска адресса
    
    
    ReadProcessMemory((int)ProcessData.Handle, ProcessBaseAddress, MemoryBuffer, MemoryBuffer.Length, ref CapBytes);
    
    if (MemoryBuffer.Length > SearchValueByLinear.Length)
    {
      for (int i = 0; i < MemoryBuffer.Length - SearchValueByLinear.Length; i++)
      {
        if (MemoryBuffer[i] == SearchValueByLinear[0])
        {
          if(MemoryBuffer[i+1] == SearchValueByLinear[1])
          {
            if (MemoryBuffer[i + 2] == SearchValueByLinear[2])
            {
              // Своими словами, тут я пытаюсь перебирать каждый байт из сохраненной
              // Да я знаю что можно использовать циклы, я делал это что бы понять где прерывается цепочка 
    		  // Что бы понять в чем проблемма, в итоге я не понял в чем проблема, потому что уже на value[2] происходит обрыв
              // Т.е дает нам понять что SearchValueByLinear[2](цифра 7), не была найдена в такой последовательности.
            }
          }
        }
      }
    }
    
    

     

    Так же есть код с двумя циклами на перебор, по сигнатуре, но я не особо хочу его рассматривать, так как искоемое значение задается в игре т.е там есть интепретируемый язык LUA, я пытаюсь найти значения собственной переменной в игре, но ВАЖНАЯ ДЕТАЛЬ в игре переменная обусловим ее как Variable = 967110984321231, она является в игре number, но в Cheat Engine ищется исключетльно по double, я научил программу читать значение с конкретного адресса, т.е я нахожу адресс, кормлю его софту, а софт выдает мне double значение, с которым я далее манипулирую, и поставил себе задачу это дело автоматизиорвать, и пытаюсь найти в памяти региона, это значение [967110984321231] путем перебора каждого байта.
      
    Прошу не гнать меня ссаными тряпками, не кидаться тапками, так как я очень давно не программировал на C# где то год, и в целом забил на кодинг на пол года из-за обстоятельств.
      
    Прошу помочь мне, объяснить что в моем коде не так как с технической стороны, так и (теоретической?), что бы вы изменили, и для чего нужен оператор ref в ReadProcessMemory я тоже не могу понять.
      
    Очень надеюсь на вашу помощь, GameHackLab'овцы

     

    //Не по теме

    Я давно не посещал этот форум, а где такие люди как Keng?

    Канал засох, Keng не объявляется нигде, видео не выходят, только на GameHackLab на youtube выходят видео

  18. Смотрел я его вчера, раз 5, у него там структуры игрока рядом, 0x18, а у меня они хер пойми где.

    Да понятно что у тебя то работает, и у меня работает, я же уже какой раз задаю гребанный вопрос.

    Мне нужно понять как находятся Прыжки, как у чувака EntityLoopDistance, мне вот что нужно, у меня то тоже работает, только на игроке, а что бы работало и на боте, нужно узнать через какое смещение бот лежит, и ВОПРОС, как узнать это СМЕЩЕНИЕ через которое лежит БОТ относительно ИГРОКА


    У меня то ведь все по другому идет, у меня рядом с игроком подобного нету.


    Взял свою структуру EntityBase

    Нашел бота, вышел на его стурктуру

    Отнял от своей структуры его и получил это значение

     

    51FD38

     

    EntityBase + 51FD38 = BotStructure

    EntityBase + 51FD38 + FC = BotHp (FC - Health Offset)

     

    Создал еще одного бота.

     

    51FD38 умножил на 2, 

    Вышел на A3FA70 но а там уже другие значения, хотя чисто логически, боты должны идти по равным смещениям..


    Пипец какой то, оказывается структура игроков вообще не там находится, она находится EntityBase+51FD38 

    И уже там через каждое 0x04 идут игроки... 

    Получается

    Bot1hp EntityBase + 51FD38 + 4 + fc;

    Bot2hp EntityBase + 51FD38 + 8 + fc;

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.