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

partoftheworlD

Помогаторы
  • Публикаций

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

  • Посещение

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

    168

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


  1. Всем чем угодно, от перехвата трафика твоего wifi, до уязвимости клиента/сервера позволяющей получить сессионный токен. Как вариант у админа сервера может база с открытыми паролями, а он их продает.


  2. 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.


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


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

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

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

     

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

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

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

     

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


  5. 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.


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

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

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

     

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

     


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

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

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


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

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

     

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

     

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


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

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

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

     

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

     

    Цитата

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

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

  10. В 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;
    }

     


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

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

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

     

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

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

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

     

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

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

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


  12. 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 байта, указывают на смещение относительно этой инструкции.


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

     

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

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

     

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

     

    image.png.38b0deba0acf1351119ba54f6f6e8a2d.png


  14. 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

     

     


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


  16. 12 минут назад, CHBS сказал:

    Не могу понять какой байт имеет опкод push?

    Разный в зависимости от компиляции, вообще push размером в 1 байт это зарезервированные опкоды от 50 до 57

     

    50 push rax
    51 push rcx
    52 push rdx
    53 push rbx
    54 push rsp
    55 push rbp
    56 push rsi
    57 push rdi

    Ну и табличка:
    image.thumb.png.f6ddd8cbaa310e463b97cece3d919706.png


  17. Это довольно не простая тема, поэтому в идеале необходимо знать ООП, так будет проще воспринимать устройство инвентаря. В фолаче 4-м вроде нет ячеек, это просто список указателей внутри массива. Если игра написана с использованием виртуальных методов, то для поиска предметов и инвентаря в целом можно использовать RTTI, если нет, придется делать все ручками. По RTTI есть статьи на форуме. А поиск руками, тут все достаточно нудно.

     

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

     

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

     

    Второй шаг, найти указатель на структуру оружия, например базовый адрес 0xDEADBEEF, адрес патрон 0xE0. С этим справится обычный поиск, переводишь его в HEX вставляешь базовый адрес и ищешь. Получишь некое кол-во адресов. Каждый из которых нужно будет проверить, пока не найдешь, то что нужно.

     

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

    В упрощенном виде цепочка указателей выглядит примерно так:

    CWorld -> CLevel -> EntityArray[playerID] -> CActor -> CInventory -> CInventorySlot -> SlotArray[slotID] -> CWeapon -> ammo


     

×

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

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