Сейчас на форуме: (+6 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Как программа палит правку своих файлов? |
Посл.ответ | Сообщение |
|
Создано: 03 сентября 2010 11:43 · Личное сообщение · #1 Ребят, в общем такое дело. Есть две программы, скажем, test1.exe и test2.exe. Первая запускает вторую (то есть как бы ланчер/лоадер). И вторая в свою очередь отказывается работать если в любом из этих двух файлов изменить хотя бы 1 байт. Проблема состоит в том, что я не могу понять, каким образом она палит изменение. Логично, что она должна считать чексумму этих файлов. Но дело в том, что я запускаю APIMonitor, проставляю галки на ВСЕХ API (даже NT Native), затем делаю поиск по полученному огромному списку api-шек по ключевым словам: test1, test2 и совершенно ничего не нахожу. Пробовал ловить только API работы с файлами. Находит кучу CreateFileA/CreateFileW, пробегаюсь по списку глазами и тоже не нахожу ничего похожего на эти два файла.. Собственно вопрос заключается в том, если программа не открывает эти два файла, каким тогда образом она может палить, что один из них изменён? ЗЫ Она в некоторых местах дёргает GetFileAttributes ко второму из файлов, но я пробовал не меняя содержимого файла, просто сохранять его меняя дату редактирования. Программа отлично отрабатывала, т.е. дату последнего изменения она не смотрит. ЗЗЫ есть ещё нюанс.. первая из программ грузит небольшой драйвер, который хукает NtOpenProcess и NtQuerySystemInformation для сокрытия своего процесса. Но врядли это может быть связано с отслежкой изменения файлов.. ![]() |
|
Создано: 03 сентября 2010 11:50 · Личное сообщение · #2 |
|
Создано: 03 сентября 2010 12:33 · Личное сообщение · #3 |
|
Создано: 03 сентября 2010 12:34 · Личное сообщение · #4 |
|
Создано: 03 сентября 2010 13:15 · Поправил: gena-m · Личное сообщение · #5 открывает эти два файла Не заметил у вас в подозреваемых FileOpen. вторая в свою очередь отказывается работать в чем это выражается, может имеет смысл зайти с этой стороны и выяснить почему закрывается (вполне возможно ты "поправил" так что система прибивает ее), приаттачится к ней можно или первая программа выступает в роли отладчика? Топик больше подходит к разделу "Вопросы новичков" ----- Надежда - есть худшее из зол, ибо она продлевает наши страдания.© Ф. Ницше ![]() |
|
Создано: 03 сентября 2010 13:29 · Личное сообщение · #6 noph разговор будет беспредметен, если ты не выложишь своих файлов. По теме... проверка может быть организована только несколькими методами 1. Время изменения файла 2. Загрузка через MapViewOfFile и генерация CRC 3. Загрузка через ReadFile и генерация CRC 4. Загрузка через _lread и генерация CRC Первую понятно как обойти, поставить время, остальные исправляются путем патча процедуры CRC ----- StarForce и Themida ацтой! ![]() |
|
Создано: 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-ух гигов в архиве. По теме - спасибо, понаблюдаю за этими функциями! ![]() |
|
Создано: 03 сентября 2010 13:54 · Личное сообщение · #8 |
|
Создано: 03 сентября 2010 14:02 · Поправил: noph · Личное сообщение · #9 zeppe1in пишет: bp на начало CreateFile всегда помогало мне в таких случаях) На самом деле я кое о чём умолчал, т.к. вопрос носит принципиальный характер: Как можно получить чексумму без CreateFile? На самом деле второй файл test2.exe открывается раз 8 через CreateFileW и CreateFileA. Но эти функции я хукаю и подставляю им не-редактированный этот же файл, только с другим названием. Ну типа test2.exe я поправил, а этой функции скармливаю какой-нибудь test2.original.exe, которые не поправлены. Но программа всё равно не работает, соответственно вычисление чексуммы и CreateFile в данном случае не связаны. Отсюда и вопрос.. ![]() |
|
Создано: 03 сентября 2010 14:05 · Личное сообщение · #10 noph пишет: Ну так это же речь о запущенном процессе идёт? Смысл подсчитывать чексумму загруженного в память процесса? Поясняю на пальцах: Ты изменяешь один из 2х файлов, запускаешь, программа перед показом главного окна открывает свой же процесс, считывает в память и считает контрольную сумму, если не совпала - посылает. Затем если все нормально, стартует следующая программа из лаунчера и либо лаунчер проверяет стартовавший процесс, либо вторая программа по такой же системе проверяет сама себя и запустившего родителя. Теперь ясно? з.ы.: полемика будет долгой, если вы не прикрепите сабж. ![]() |
|
Создано: 03 сентября 2010 14:05 · Личное сообщение · #11 noph пишет: Ребят, в общем такое дело. Есть две программы, скажем, test1.exe и test2.exe. Первая запускает вторую (то есть как бы ланчер/лоадер). И вторая в свою очередь отказывается работать если в любом из этих двух файлов изменить хотя бы 1 байт. Мне интересно, ГДЕ тут сказано, что первая прога закрываеца? судя по твоему вопросу я бы запустил в дебаге тест1 с измененным в нЁм байтом, и на него поставил харваре бп. ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... ![]() |
|
Создано: 03 сентября 2010 14:06 · Личное сообщение · #12 noph пишет: Ну так файлы же на диске лежат, как я на них бряк поставлю? Вторая программа загружена, первая нет. Как я на изменённые данные в первом файле могу бряк поставить? Ты видимо немного не понял вопроса. Просто убило... (если исключить оверлей) ![]() noph пишет: Как можно получить чексумму без CreateFile Ну например можно взять секцию кода и, как уже сказали выше, ReadProcessMemory. Да можно и без ReadProcessMemory обойтись и читать напрямую если флаги соответствующие секции выставить ![]() |
|
Создано: 03 сентября 2010 14:09 · Личное сообщение · #13 noph пишет: Ну так файлы же на диске лежат, как я на них бряк поставлю? Вторая программа загружена, первая нет. Как я на изменённые данные в первом файле могу бряк поставить? Ты видимо немного не понял вопроса Прога патченная может проверять определённые участки кода прямо в процессе своей работы,если не совпадают CRK сумма то получишь шишь с маслом ![]() ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. ![]() |
|
Создано: 03 сентября 2010 15:07 · Личное сообщение · #14 |
|
Создано: 03 сентября 2010 15:16 · Поправил: Maximus · Личное сообщение · #15 |
|
Создано: 03 сентября 2010 15:27 · Личное сообщение · #16 |
|
Создано: 03 сентября 2010 15:39 · Поправил: Kindly · Личное сообщение · #17 |
|
Создано: 03 сентября 2010 16:01 · Поправил: Maximus · Личное сообщение · #18 noph >Во втором фемида Дык это все объясняет. Темида копирует системные dll в другие области памяти а потом не пользуется больше системными dll, а пользуется скопированными. Соответственно хуки не работают. Скачай в RAR-статьях статью от PE_Kill, там расписано как обходить темидную CRC проверку. Актуально и для последних версий Вообще темида такое говнище, распаковывается она чуть труднее чем УПХ ----- StarForce и Themida ацтой! ![]() |
|
Создано: 03 сентября 2010 16:17 · Личное сообщение · #19 |
|
Создано: 03 сентября 2010 16:17 · Поправил: noph · Личное сообщение · #20 Maximus Дело в том, что хуки то отрабатывают.. Во-первых, мои CreateFile отрабатывают - проверял. Во-вторых, я хукаю (правда уже через сплайс) send/recv как раз зафемиденой библиотеки. И они отлично хукаются. Думаю, дело не в этом.. Kindly пишет: Еще может чекать целостность через VirtualProtect или VirtualAlloc. Помню прогу одну ломал, в ней целостность так чекалась. Попробуй лоадер смастерить, если прога будет падать, значит ковыряй память. Вот это интересный момент... я помню, что при запуске второго exe-шника я вижу в APIMonitor просто уйму вызовов VirtualProtect и VirtualAlloc :-\ Думал, что так надо.. Как противостоять тогда такому методу подсчёта чексуммы? Если это он конечно ![]() |
|
Создано: 03 сентября 2010 18:37 · Поправил: Kindly · Личное сообщение · #21 noph, все что тут говорится правильно может, но по большому счету вилами по воде писано, так что давай ссылку на свою игру, может кто и посмотрит. А пока ты только интересуешся и спрашиваешь, а сам не похоже что что-то толком сделал, анпакнул прот или лоадер написал. Если это коммерческий образ, то там по-любому что-нить типа Securom или Safedisk-а должно быть. Проверь что Protection ID скажет. Либо в запросы. ----- Array[Login..Logout] of Life ![]() |
|
Создано: 03 сентября 2010 19:02 · Поправил: Coderess · Личное сообщение · #22 |
![]() |
eXeL@B —› Вопросы новичков —› Как программа палит правку своих файлов? |