Сейчас на форуме: (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Как программа палит правку своих файлов?
Посл.ответ Сообщение

Ранг: 16.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 03 сентября 2010 11:43
· Личное сообщение · #1

Ребят, в общем такое дело. Есть две программы, скажем, test1.exe и test2.exe. Первая запускает вторую (то есть как бы ланчер/лоадер). И вторая в свою очередь отказывается работать если в любом из этих двух файлов изменить хотя бы 1 байт.
Проблема состоит в том, что я не могу понять, каким образом она палит изменение. Логично, что она должна считать чексумму этих файлов. Но дело в том, что я запускаю APIMonitor, проставляю галки на ВСЕХ API (даже NT Native), затем делаю поиск по полученному огромному списку api-шек по ключевым словам: test1, test2 и совершенно ничего не нахожу.
Пробовал ловить только API работы с файлами. Находит кучу CreateFileA/CreateFileW, пробегаюсь по списку глазами и тоже не нахожу ничего похожего на эти два файла..
Собственно вопрос заключается в том, если программа не открывает эти два файла, каким тогда образом она может палить, что один из них изменён?

ЗЫ Она в некоторых местах дёргает GetFileAttributes ко второму из файлов, но я пробовал не меняя содержимого файла, просто сохранять его меняя дату редактирования. Программа отлично отрабатывала, т.е. дату последнего изменения она не смотрит.
ЗЗЫ есть ещё нюанс.. первая из программ грузит небольшой драйвер, который хукает NtOpenProcess и NtQuerySystemInformation для сокрытия своего процесса. Но врядли это может быть связано с отслежкой изменения файлов..



Ранг: 57.1 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 03 сентября 2010 11:50
· Личное сообщение · #2

noph
ProcessMonitor by Sysinternals , + WinDBG(logexts plugin) что говорят?



Ранг: 60.6 (постоянный), 20thx
Активность: 0.070
Статус: Участник

Создано: 03 сентября 2010 12:33
· Личное сообщение · #3

noph пишет:
каким тогда образом она может палить, что один из них изменён?

Ну как вариант OpenProcess, ReadProcessMemory, подсчет



Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 03 сентября 2010 12:34
· Личное сообщение · #4

noph а не проще ли хардваре бряк на чтение твоих подизменненных байтов поставить?

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 87.8 (постоянный), 10thx
Активность: 0.070
Статус: Участник

Создано: 03 сентября 2010 13:15 · Поправил: gena-m
· Личное сообщение · #5

открывает эти два файла

Не заметил у вас в подозреваемых FileOpen.

вторая в свою очередь отказывается работать
в чем это выражается, может имеет смысл зайти с этой стороны и выяснить почему закрывается (вполне возможно ты "поправил" так что система прибивает ее), приаттачится к ней можно или первая программа выступает в роли отладчика?

Топик больше подходит к разделу "Вопросы новичков"

-----
Надежда - есть худшее из зол, ибо она продлевает наши страдания.© Ф. Ницше





Ранг: 392.8 (мудрец), 108thx
Активность: 0.260.01
Статус: Участник
REVENGE сила, БеХоЦе могила

Создано: 03 сентября 2010 13:29
· Личное сообщение · #6

noph
разговор будет беспредметен, если ты не выложишь своих файлов.

По теме... проверка может быть организована только несколькими методами
1. Время изменения файла
2. Загрузка через MapViewOfFile и генерация CRC
3. Загрузка через ReadFile и генерация CRC
4. Загрузка через _lread и генерация CRC

Первую понятно как обойти, поставить время, остальные исправляются путем патча процедуры CRC

-----
StarForce и Themida ацтой!




Ранг: 16.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 03 сентября 2010 13:46
· Личное сообщение · #7

gena-m пишет:
в чем это выражается, может имеет смысл зайти с этой стороны и выяснить почему закрывается (вполне возможно ты "поправил" так что система прибивает ее), приаттачится к ней можно или первая программа выступает в роли отладчика?

Проблема в том, что она не закрывается. Она просто не выполняет ряд функций, которые должна. И с этой стороны отловить этот момент крайне сложно..

VodoleY пишет:
noph а не проще ли хардваре бряк на чтение твоих подизменненных байтов поставить?

Ну так файлы же на диске лежат, как я на них бряк поставлю? Вторая программа загружена, первая нет. Как я на изменённые данные в первом файле могу бряк поставить? Ты видимо немного не понял вопроса.

sys_dev пишет:
noph
ProcessMonitor by Sysinternals , + WinDBG(logexts plugin) что говорят?

Я на работе, возможность посмотреть будет позже..

s0l пишет:
Ну как вариант OpenProcess, ReadProcessMemory, подсчет

Ну так это же речь о запущенном процессе идёт? Смысл подсчитывать чексумму загруженного в память процесса?

Maximus пишет:
noph
разговор будет беспредметен, если ты не выложишь своих файлов.

По теме... проверка может быть организована только несколькими методами
1. Время изменения файла
2. Загрузка через MapViewOfFile и генерация CRC
3. Загрузка через ReadFile и генерация CRC
4. Загрузка через _lread и генерация CRC

Первую понятно как обойти, поставить время, остальные исправляются путем патча процедуры CRC

Речь идёт об игре, которая весит больше 2-ух гигов в архиве.
По теме - спасибо, понаблюдаю за этими функциями!




Ранг: 127.3 (ветеран), 44thx
Активность: 0.090
Статус: Участник

Создано: 03 сентября 2010 13:54
· Личное сообщение · #8

bp на начало CreateFile всегда помогало мне в таких случаях)

-----
zzz




Ранг: 16.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 03 сентября 2010 14:02 · Поправил: noph
· Личное сообщение · #9

zeppe1in пишет:
bp на начало CreateFile всегда помогало мне в таких случаях)

На самом деле я кое о чём умолчал, т.к. вопрос носит принципиальный характер: Как можно получить чексумму без CreateFile?
На самом деле второй файл test2.exe открывается раз 8 через CreateFileW и CreateFileA. Но эти функции я хукаю и подставляю им не-редактированный этот же файл, только с другим названием. Ну типа test2.exe я поправил, а этой функции скармливаю какой-нибудь test2.original.exe, которые не поправлены. Но программа всё равно не работает, соответственно вычисление чексуммы и CreateFile в данном случае не связаны.
Отсюда и вопрос..



Ранг: 60.6 (постоянный), 20thx
Активность: 0.070
Статус: Участник

Создано: 03 сентября 2010 14:05
· Личное сообщение · #10

noph пишет:
Ну так это же речь о запущенном процессе идёт? Смысл подсчитывать чексумму загруженного в память процесса?

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

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



Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 03 сентября 2010 14:05
· Личное сообщение · #11

noph пишет:
Ребят, в общем такое дело. Есть две программы, скажем, test1.exe и test2.exe. Первая запускает вторую (то есть как бы ланчер/лоадер). И вторая в свою очередь отказывается работать если в любом из этих двух файлов изменить хотя бы 1 байт.

Мне интересно, ГДЕ тут сказано, что первая прога закрываеца? судя по твоему вопросу я бы запустил в дебаге тест1 с измененным в нЁм байтом, и на него поставил харваре бп.

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 52.2 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 03 сентября 2010 14:06
· Личное сообщение · #12

noph пишет:
Ну так файлы же на диске лежат, как я на них бряк поставлю? Вторая программа загружена, первая нет. Как я на изменённые данные в первом файле могу бряк поставить? Ты видимо немного не понял вопроса.


Просто убило... (если исключить оверлей)

noph пишет:
Как можно получить чексумму без CreateFile

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




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 03 сентября 2010 14:09
· Личное сообщение · #13

noph пишет:
Ну так файлы же на диске лежат, как я на них бряк поставлю? Вторая программа загружена, первая нет. Как я на изменённые данные в первом файле могу бряк поставить? Ты видимо немного не понял вопроса

Прога патченная может проверять определённые участки кода прямо в процессе своей работы,если не совпадают CRK сумма то получишь шишь с маслом

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.





Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 03 сентября 2010 15:07
· Личное сообщение · #14

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

-----
Следуй за белым кроликом





Ранг: 392.8 (мудрец), 108thx
Активность: 0.260.01
Статус: Участник
REVENGE сила, БеХоЦе могила

Создано: 03 сентября 2010 15:16 · Поправил: Maximus
· Личное сообщение · #15

neomant не, надо именно пару, и при чем что бы запускалась (можно даже с ошибками об отсутствии файлов), то есть с нужными dll
В любом случае я думаю это 2 гига весить не будет

noph
А там случаем не старфорс?

-----
StarForce и Themida ацтой!




Ранг: 16.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 03 сентября 2010 15:27
· Личное сообщение · #16

Maximus
Во втором фемида




Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 03 сентября 2010 15:39 · Поправил: Kindly
· Личное сообщение · #17

Еще может чекать целостность через VirtualProtect или VirtualAlloc. Помню прогу одну ломал, в ней целостность так чекалась. Попробуй лоадер смастерить, если прога будет падать, значит ковыряй память.

-----
Array[Login..Logout] of Life





Ранг: 392.8 (мудрец), 108thx
Активность: 0.260.01
Статус: Участник
REVENGE сила, БеХоЦе могила

Создано: 03 сентября 2010 16:01 · Поправил: Maximus
· Личное сообщение · #18

noph

>Во втором фемида

Дык это все объясняет. Темида копирует системные dll в другие области памяти а потом не пользуется больше системными dll, а пользуется скопированными. Соответственно хуки не работают.

Скачай в RAR-статьях статью от PE_Kill, там расписано как обходить темидную CRC проверку. Актуально и для последних версий

Вообще темида такое говнище, распаковывается она чуть труднее чем УПХ

-----
StarForce и Themida ацтой!




Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 03 сентября 2010 16:17
· Личное сообщение · #19

Maximus пишет:
Вообще темида такое говнище, распаковывается она чуть труднее чем УПХ


маркеров это утверждение тоже касается?



Ранг: 16.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 03 сентября 2010 16:17 · Поправил: noph
· Личное сообщение · #20

Maximus
Дело в том, что хуки то отрабатывают..
Во-первых, мои CreateFile отрабатывают - проверял.
Во-вторых, я хукаю (правда уже через сплайс) send/recv как раз зафемиденой библиотеки. И они отлично хукаются. Думаю, дело не в этом..

Kindly пишет:

Еще может чекать целостность через VirtualProtect или VirtualAlloc. Помню прогу одну ломал, в ней целостность так чекалась. Попробуй лоадер смастерить, если прога будет падать, значит ковыряй память.

Вот это интересный момент... я помню, что при запуске второго exe-шника я вижу в APIMonitor просто уйму вызовов VirtualProtect и VirtualAlloc :-\ Думал, что так надо.. Как противостоять тогда такому методу подсчёта чексуммы? Если это он конечно




Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 03 сентября 2010 18:37 · Поправил: Kindly
· Личное сообщение · #21

noph, все что тут говорится правильно может, но по большому счету вилами по воде писано, так что давай ссылку на свою игру, может кто и посмотрит. А пока ты только интересуешся и спрашиваешь, а сам не похоже что что-то толком сделал, анпакнул прот или лоадер написал. Если это коммерческий образ, то там по-любому что-нить типа Securom или Safedisk-а должно быть. Проверь что Protection ID скажет. Либо в запросы.

-----
Array[Login..Logout] of Life





Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 03 сентября 2010 19:02 · Поправил: Coderess
· Личное сообщение · #22

noph

Читайте статью про Themida CRC, что касается утверждения - что из драйвера нельзя посчитать чексумму то, я во втором dc подсчитывал

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes



 eXeL@B —› Вопросы новичков —› Как программа палит правку своих файлов?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати