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

partoftheworlD

Пользователи+
  • Публикаций

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

  • Посещение

  • Победитель дней

    171

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


  1. Автоматический поиск указателей не гарантирует нахождение указателей,  он просто перебирает смещения, поэтому в зависимости от игры он может работать, а может не работать, на это влияет множество факторов от правильности пути по которому будет сохраняться результат до всяких прав доступа к памяти.  Ручной поиск хоть и дольше, но результат гарантирован(если не потеряться в ответвлениях структур).


  2. 4 часа назад, Alex2411 сказал:

    как найти

    игру(Assembly-CSharp.dll) открываешь через dnSpy. ищешь упоминания лески/натяжений/катушки, в классе FishingLine(леска) будет метод UpdateTension(обновление натяжения), теперь необходимо получить адрес значения натяжения, быстро пробежавшись по дизассемблеру и коду в dnSpy можно найти инструкцию, которая работает с натяжением.


    image.png.27973967f13ec3defc074cc179d34718.png

     

    Дальше ищешь рабочую инструкцию с этим же смещением, если эта не срабатывает. Получаешь адрес значения натяжения

    image.png.1b55e9c523d4111daf1f24b790434aa5.png

     

    Теперь устанавливаешь на этот адрес брейкпоинт на запись, и ждешь пока рыба клюнет:

    image.thumb.png.fb0c0379eb3be542c9b8b9cec0d337e7.png

    После подсечки появятся еще 4 инструкции, скрипты нужно будет написать на первые 2 с обнулением xmm5.

     

    image.thumb.png.53e774e6463ef753cff9d6abbe07fbfc.png

     

    И скрипт

     

    Спойлер
    
    { Game   : UltimateFishing.exe
      Version: 
      Date   : 2020-02-19
      Author : Alexander
    
      This script does blah blah blah
    }
    
    [ENABLE]
    
    aobscan(Tension,55 48 8B EC 56 57 41 57 48 81 EC B8 00 00 00 48 8B F1 48) // should be unique
    label(return)
    
    Tension:
      db C3
    return:
    registersymbol(Tension)
    
    [DISABLE]
    
    Tension:
      db 55
    
    unregistersymbol(Tension)
    
    {
    // ORIGINAL CODE - INJECTION POINT: 16A5D837CB0
    
    16A5D837C99: 00 00                          -  add [rax],al
    16A5D837C9B: 00 01                          -  add [rcx],al
    16A5D837C9D: 04 03                          -  add al,03
    16A5D837C9F: 05 00 00 04 53                 -  add eax,53040000
    16A5D837CA4: 01 50 00                       -  add [rax+00],edx
    16A5D837CA7: 00 00                          -  add [rax],al
    16A5D837CA9: 00 00                          -  add [rax],al
    16A5D837CAB: 00 00                          -  add [rax],al
    16A5D837CAD: 00 00                          -  add [rax],al
    16A5D837CAF: 00 55                          - db 00 55  // SHORTENED TO HIT INJECTION FROM:  add [rbp+48],dl
    // ---------- INJECTING HERE ----------
    16A5D837CB1: 48 8B EC                       -  mov rbp,rsp
    16A5D837CB4: 56                             -  push rsi
    // ---------- DONE INJECTING  ----------
    16A5D837CB5: 57                             -  push rdi
    16A5D837CB6: 41 57                          -  push r15
    16A5D837CB8: 48 81 EC B8 00 00 00           -  sub rsp,000000B8
    16A5D837CBF: 48 8B F1                       -  mov rsi,rcx
    16A5D837CC2: 48 8B 46 38                    -  mov rax,[rsi+38]
    16A5D837CC6: 48 8B 80 98 00 00 00           -  mov rax,[rax+00000098]
    16A5D837CCD: 0F B6 80 B4 03 00 00           -  movzx eax,byte ptr [rax+000003B4]
    16A5D837CD4: 85 C0                          -  test eax,eax
    16A5D837CD6: 74 13                          -  je 16A5D837CEB
    16A5D837CD8: F3 0F 10 05 50 16 00 00        -  movss xmm0,[16A5D839330]
    }

     

     

    • Плюс 2

  3. В 16.02.2020 в 11:08, Alex2411 сказал:

    искал  прочность лески что бы  не обрывалась  когда тащу рыбу , но пока  не получилось

     

    Это? Если да, тогда табличку кину.
     

     

    Ну и игра...


     

    Спойлер

     

     


  4. 7 часов назад, Romanoff сказал:

    Получается никак нельзя взломать?

    Пока люди проектируют системы - сломать можно все.
    Есть несколько способов, да разработчики могут повесить множество защит и проверок на определенные значения, но могут существовать различные бонусы или, к примеру способности, влияющие на множитель, который участвует (на прямую или косвенно) в вычислении нужного значения, изменив которые сможешь изменить все что тебе захочется. Ну а второй, просто подделывать транзакцию, к примеру при завершении задания за которое дают опыт, голду и т.д, существует метод, который говорит серверу, что игрок завершил задание и надо ему что-нибудь дать, но раз его может вызывать игра, то и человек сможет данный метод приручить. В целом проблема с "серверными" играми в том, что на исследование (реверс, понимание механики игры, понимание работы между клиентом и сервером) нужно очень много времени, даже скорее больше, чем уйдет на фаззинг и поиск бага в коде, который позволит, к примеру дюпать голду(хотя даже это проблематично со всеми этими новыми безопасными яп).


  5. Если справка выводится локальная - удалить её, если вызывает URL с инфой, то сломать ShellExecute внутри CE

    Эти функции патчишь ret и больше никакой справки

    cheatengine-i386  : 55 89 E5 8D 64 24 C8 53 56 57 66 89 D6
    cheatengine-x86_64: 55 48 89 E5 48 8D 64 24 ? 48 89 5D C8 48 89 7D D0 48 89 75 D8 66 89 D3 

    Можно и от F1 отвязку сделать, но мне лень, патч по идее должен сработать.


  6. 15 часов назад, SweetAss1337 сказал:

    Это тот размер,внутри которого выполнятся инструкции,попавшие в него? Или это что-то другое? 

     

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

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

    auto threadID = GetCurrentThreadId();
    auto hThread = OpenThread(THREAD_GET_CONTEXT | THREAD_SET_CONTEXT | 
        					  THREAD_SUSPEND_RESUME | THREAD_QUERY_INFORMATION, FALSE, threadID);
    CONTEXT ctx = { 0 };
    ctx.ContextFlags = CONTEXT_FULL;
    GetThreadContext(hThread , &ctx);

     

     

    15 часов назад, SweetAss1337 сказал:

    Не могу найти информации по этому поводу нигде

    Удивительно, это ведь обычный mid hook.


  7. Если времени мало, стоит определить для начала для чего нужен асм, если в целом для программирования на асм, то лучше The Art of Assembly Language, 2nd Edition Randall Hyde пока ничего не находил, если для отладки, то куда быстрее будет заняться реверсом, а так же иметь под рукой документацию по асму, решать всякие crackme/keygenme, для начала даже можно самому компилировать простые программки, учиться по ним читать и понимать асм.


  8. В 26.07.2018 в 12:57, Desmos сказал:

    Очевидно, что в структуре дропа есть ещё флаг (появился\не появился).

    Навряд ли, скорее просто проверка инициализировалась ли память под структуру нового предмета.

     

    В 26.07.2018 в 12:57, Desmos сказал:

    Как сделать чит на ловлю припасов? Чтобы я, стоя в одном месте, например, мог ловить припасы.

    Во-первых обратить внимание на то, как происходит подбор, если без касания к предмету(т.е. гг проезжает мимо и лут собирается) это идеальные условия.

     

    Для начала стоит попробовать более простой способ поиска, например, попытаться найти дистанцию между предметом и гг. Если такое значение найдется, считай 75% дела уже сделано и останется как по учебнику повесить бряк на доступ и после подобрать предмет, таким образом ты найдешь инструкцию, которая сравнивает дистанцию между предметами, и если она меньше определенного статического значения, то будет подбор. А дальше на любителя, либо отключить проверку, чтобы подбор было по всей локации, либо увеличить дистанцию. 

    • Плюс 1

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

    D3DXVECTOR2 WorldToScreen(D3DXVECTOR3 pos)

     

    13 часов назад, XAMAC сказал:

    WorldToScreen(me.pos.x, me.pos.y, me.pos.z)

     

    Функция принимает D3DXVECTOR3, а ты передаешь ей float

    Так же, твой Vector2D является Vec3, а возвращаемое значение WorldToScreen имеет тип D3DXVECTOR2.

     

    13 часов назад, XAMAC сказал:

    вопрос как это поправить

    Написать перегрузку WorldToScreen, судя по исходникам с этим не должно возникнуть проблем. Или написать шаблон WorldToScreen.


  10. 29 минут назад, Antonshka сказал:

    А почему по рукам бьют за внедрение в memcpy? Что в этом плохого?

    Недавно мне попалась проверка целостности кода. Она работала также через memcpy. Я просто заменил RSI на начало продублированного exe модуля. Работает нормально.

     

    Потому что эта функция может использоваться любыми программами и даже системой, если что пойдет не так будут проблемы. Да и это достаточно глупо, можно сравнить например, вот возникла трещина в кости, а врачи вместо гипса, конечность отрезали, по сути проблема решена, но стоило ли оно того. Вот и тут так же, поэтому прежде чем что-то внедрять в winapi надо понимать последствия и на их основе уже оценивать необходимость такого подхода.

     


  11. 1 час назад, Garik66 сказал:

    Может трассировкой попробовать?

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


  12. 5 часов назад, Antonshka сказал:

    То есть нужно посмотреть что пишет в первый буфер до того как он будет скопирован инструкцией Repe movsb? Или посмотреть что будет читать второй буфер после того как в него будут скопированы данные?

     

    Если нужны данные, просто выходишь по стеку вызовов на пользовательский код, там вешаешь скрипт и перехватываешь нужные буферы, которые передаются в функцию memcmp как аргументы, регистрируешь глобально символы на них, а дальше делаешь с ними что хочешь, например дамп всех значений в блоке, через lua.

     

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


  13. Только что, Antonshka сказал:

    Пока я не знаю другого способа, а хочется.

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

     

    Оу, поспешил, вы что тут вообще творите?
    Это ведь WinAPi выйди по стеку в пользовательский код и уже там сравнивай. За внедрение кода в winapi обычно по рукам бьют.
    И код ничего не пишет, уж это можно было загуглить.

     

    Цитата

    Функция memcmp() сравнивает символы в двух буферах. Сравнение производится лексикографически. Функция memcmp() возвращает целое число, указывающее отношение между буферами.

    • Понравилось 1

  14. В 16.11.2019 в 13:56, imaginary сказал:

    if ( pInfo.szExeFile == name)

    Это не будет работать без описания перегрузки, типа

    Спойлер
    
    bool operator==(const char(& string)[260], const wstring& wstring)
    {
    	size_t bytesCopied = 0;
    	char strBaseName[MAX_PATH] = { 0 };
    
    	wcstombs_s(&bytesCopied, strBaseName, wstring.c_str(), MAX_PATH);
      	if(_strcmpi(string, strBaseName))
        	{
          		return true;
        	}
      	return false;
    }

     


  15. 2 часа назад, XAMAC сказал:

    1. Есть ли в сети видеокурсы (Желательно на русском ) по ЯП С++ нацеленные на область взлома игр

    Нет, мне кажется даже глупо спрашивать о таком. Язык лишь инструмент автоматизации, а не супер-пупер инструмент позволяющий взламывать игры.

     

    2 часа назад, XAMAC сказал:

    2. Возможно у кого то есть готовый код ESP на source версию игры, что бы я мог проанализировать каждый шаг.

    В интернете их полно, тем более для CSS, каждый кому не лень пишет и выкладывает esp. Первый результат в поиске.

     

    2 часа назад, XAMAC сказал:

    поэтому хотелось бы разбираться на конкретном примере

    Не самый разумный подход, если есть желания и дальше продолжать в этой области, надо знать возможности языка, чтобы использовать именно так как тебе нужно. А если это спонтанное желание у которого нет будущего, то проще посмотреть на исходники читов на гитхабе и не тратить  впустую время. И с чего у всех какие-то странные временные отрезки по изучению языка в 5 лет, тот же C++ и за 10 лет выучить не удастся, и изучить все его возможности.


  16. 21 час назад, CHBS сказал:

    // 4C 8B 35 F3 A8 2A 02    mov     r14, cs:_g_pGameEntitySystem

    35 тут к чему будет относится?

     

    image.png.d6981290fa190aeccb742a9c96fe4c56.png

     

    4C 8B 35 это конструкция mov r14, [rip] или mov r14, cs:[0], следующие 4 байта, указывают на смещение относительно этой инструкции.


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

     

    1 час назад, CHBS сказал:

    опкоды MOV начинаются с 88+, что там делает в первой строке 87 мне не понятно

     

    это двойной опкод, С6 87 - mov byte rdi, в таблице интеловских доков написано ведь.

     

    image.png.38b0deba0acf1351119ba54f6f6e8a2d.png


  18. 11 минут назад, CHBS сказал:

    в чём подвох?

     

    Префикс для r регистров r8-r15

     

    Спойлер
    
    0:  50                      push   rax
    1:  51                      push   rcx
    2:  52                      push   rdx
    3:  53                      push   rbx
    4:  54                      push   rsp
    5:  55                      push   rbp
    6:  56                      push   rsi
    7:  57                      push   rdi
    8:  41 50                   push   r8
    a:  41 51                   push   r9
    c:  41 52                   push   r10
    e:  41 53                   push   r11
    10: 41 54                   push   r12
    12: 41 55                   push   r13
    14: 41 56                   push   r14
    16: 41 57                   push   r15

     

     


  19. Для того чтобы читать табличку, советую использовать интеловские доки (глава 3) там объясняется, что все это значит.
    Да и вообще интеловские доки, являются некой библией для каждого реверсера, так что, если думаешь серьезно заняться реверсом, советую прочитать их и использовать как справочник.

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

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

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