x64dbg

Тема в разделе "WASM.BEGINNERS", создана пользователем Semiono, 27 май 2024.

  1. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    773
    Можно ли проанализировав код на примере сравнения двух файлов до и после, перенести
    алгоритм на другой файл примерно похожий предположительно, но с другими адресами?
    На что обратить внимание? Что тут важно иметь ввиду?

    [​IMG]
    Ну, тут понятно, наг скрин обойти. Хотя не понятно как это можно было изначально найти.

    [​IMG]
    Здесь тоже переход куда-то, стрелка обрывается, а переходить джампом я неуверен как правильно.

    [​IMG]
    Видимо сюда и был переход, хотя адрес джампа не совсем верный, почему?

    Я не настолько понимаю ассемблер, и сравнивал в основном байты внутри файлов.
    Видимо адресация другая и на новом файле не получилось это повторить.
    Хотя я нашёл все похожие команды. Особенно сложно с третьим скриншётом,
    как найти его адресацию? Кстати, в новом файле нету столько места как
    на третьем скриншёте чтобы весь код уместить, там в два раза нулей меньше,
    а дальше какой-то код к сожалению))

    Вобщем тут два файла, оригинал, изменённый, а третьий целевой, скажем более
    новая версия приложения.
    :blush:

    --- Сообщение объединено, 28 май 2024 ---
    Exception Offset: PCH_42_FROM_ntdll+0x00000000000979FA
    Exception Code: c0000005

    [​IMG]
    Новая версия с другими адресами.

    Так как 3-й кусок кода некуда было записать, выбрал места побольше где нули
    записал туда эти 16 байтов кода. Все джампы поправил правильно.
    3-й кусок кода возвращается, кстати, в продолжение второго куска,
    что вроде бы логично. Наверное кудато не туда записал, а что нельзя
    по желанию выбрать место для джампа? Запрещённая область памяти чтоли?
    --- Сообщение объединено, 28 май 2024 ---
    Кстати, идея, а можно этот 16-байтов кусками где-то втиснуть и джампами соединить в непрерывный код?
    А вобще что он делает, на что похоже? Вобщем push rdi потом идёт 2-й кусок.
     
    Последнее редактирование: 28 май 2024
  2. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.993
    Можно.
    Разными способами, в т.ч. найдя процедуру, вызов которой приводит к нагскрину и наугад потыкав ветвления, пропускающие ее.
    Это по всей видимости весь метод объекта целиком заткнут безусловным переходом в какое-нибудь return true из другого метода или из него же самого.
    Если в оригинале нули, а в патче код, значит это врезка. Почему адрес неверный? На картинке такого не видно.
    Третий скриншот - отсебятина того, кто делал патч. Искать надо то, что оно лечит. То есть безусловный переход в эту врезку. А искать удобней всего по характерным вызовам апи или редким константам где-нибудь около нужного участка кода.
    Так и делается, если лень или что-то мешает расширить/добавить секцию кода.
    push <register>/sub rsp,<val> это типичный пролог процедуры. Сохранение значений регистров, которые будут искаверканы, выделение стек фрейма под локальные переменные, а в х64 еще и аргументы вызываемых процедур.
     
    Mikl___ и Semiono нравится это.
  3. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    773
    Врезка

    Там просто были нули свободные, а новая версия приложения уже перекампилированая и там теперь
    затык, меньше нулей оказалось.
    Я впервые этим занимаюсь, ничего не понимаю, просто тупо код перенёс)
     
  4. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    443
    согласитёсь, квантовую физику в 3-ем классе школы не преподают?
     
  5. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    773
    Ладно, фиг с этой защитой, а вот крашится время от времени почему-то.
    Сделано на JUCE. Во время запуска я заметил из одного процесса .exe
    появляется второй процесс .exe --proc987654... с каким-то параметром
    типа того. Интересно что за прикол?
    Я вроде у Sysinternals видел когда из одного EXE появлялся второй
    либо 32 либо 64 по необходимости, но там хоть понятно.
    Кстати, вот на этом и крашится я думаю. Матрёшка))
    --- Сообщение объединено, 31 май 2024 ---
    Пардон, вот --giglad_progress:p50178566ee07200b параметр
     
  6. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    443
    Semiono нравится это.
  7. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    773
  8. miilalex

    miilalex New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2024
    Сообщения:
    8
    если бы я собирался снять защиту, то во времена w95 сделал бы слепок реестра до и после инсталляции и запуска программы, и сравнил бы что и куда пишется
    раз они предлагают полноценный триал с лимитом времени, значит где-то в системе ставится метка в момент начала триала и после проверяется, не пора ли душить небогатого пользователя )

    раньше был инструмент RegSnap и regmon от кажется Sysinternals

    другой вариант - поставить на виртуальную машину и аналогично сравнить что и куда пишет

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

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

    судя по JUCE если написать свой VST пустышку, можно создать ситуацию, когда приложение запустит его код
    в этот момент если сегменты кода приложения readable, можно посмотреть и сдампить, как вариант

    что касается разницы между версиями в заполненных нулями кусочках, это скорее всего padding то есть выравнивание компилятором адресов начала процедур до кратного степени двойки. 16, 32...
     
    Semiono нравится это.