Проблема с BinDiff Запускаю IDA, запускаю плагин, выбираю вторую базу. Запускается скрыто второй процесс IDA и начинает потихоньку кушать память. Доедает до 2 с лихим Гб Потом выдает abnormal program termination и как результат - отсутствие какого либо результата Самое что печальное что об этом прямо сказано в readme - мол большие базы сравнивать не буду. Как быть? Чем пользоваться в такой ситуации
Скачал последний PEExplorer, cкачал русификатор. После русификации в папке с прогой появился файл pexplorer.Rus. Прога не только оказалась не русифицирована, но и стала выдавать: "Runtime error 101 at 001B9496" и отказалась запускаться( после удаления pexplorer.Rus прога запускается и работает) . Тогда засунул EXE в PEiD, он сказал: "Borland Delphi 3.0 [Overlay]". Засунул EXE в Restorator все ресурсы видны, их можно править и сохранить. Но при запуске прога снова ругается: "Runtime error 101 at 001B9496". Это привело меня к мысли что в проге стоит проверка контрольной суммы. Хотелось бы в краткой форме понять как с этим бороться. Дайте краткую инструкцию к действию как находить проверки в коде. Какие инструменты подойдут, как их применить. Поскольку я только начинающий, хочется разобраться в вопросе и научиться преодолевать подобные трудности в дальнейшем. Заранее спасибо!
Если программа сообщает что она повреждена, то это одно, а Runtime error это уже другое, а именно - указывает на то что русификация прошла криво и какая-то из функций по работе с памятью или строками дает сбой, пытаясь прочитать или как-то обработать поврежденные ресурсы. Такой вариант кажется самым правдоподобным. В любом случае, отладчик никто не отменял - запускаешь под ним программу и ждешь появления Exception'a Delphi help
Нет точно проверка CRC! Засунул EXE в Restorator все ресурсы видны, их можно править и сохранить (для эксперемента исправил всего одну букву в Меню). Но при запуске прога снова ругается: "Runtime error 101 at 001B9496". Это привело меня к мысли что в проге стоит проверка контрольной суммы. Пробывал подняться назад по коду от сообщения об ошибке, но почемуто не получается подняться более чем на 4-5 уровня. Скорее всего проверок несколько! Как можно узнать сразу все адреса предпологаемых проверок? Спасибо.
Вот несколько ссылок: http://soft.softodrom.ru/scr/get.php?id=3013 http://www.newestsoft.com/cat42_532.html
Code: CODE:00562F13 call sub_49D52C CODE:00562F18 test al, al CODE:00562F1A jnz short loc_562F53 .... .... CODE:00562F33 jnz short loc_562F53 .... CODE:00562F4C call @@LStrCmp CODE:00562F51 jz short loc_562F66 loc_562F53: CODE:00562F53 xor ecx, ecx CODE:00562F55 mov dl, 1 CODE:00562F57 mov eax, off_406468 CODE:00562F5C call sub_409F44 CODE:00562F61 call @@RaiseExcept Проверка цифровой подписи файла. RaiseExcept - как раз сообщение то самое. Запатчить не составит труда.
Контрольная сумма-это простой способ проверки целостности данных,суть которого состоит в том , что контрольная сумма- это некоторое значение,рассчитанное путем сложения всех входных данных. Sum=Data % ([MAX_VAL]+1) Data-итоговая сумма, рассчитанная по входным данным, и MaxVal - максимально допустимое значение контрольной суммы, заданное заранее. Если использовать алгоритмы хэширования вместе с криптосистемами, с ключом общего пользования, то можно создать цифровую подпись, практически как человеческая подпись.Криптосистема и ключ общего пользования-составляют в сумме, метод позволяющий кодировать и декодировать данные с помощью двух ключей:общего использования и личного.
В данном случае различия нет. Идет проверка на то изменен ли файл или нет, а что используется - цифровая подпись или контрольная сумма не столь важно. - Обычную контрольную сумму можно посчитать самостоятельно и подменить - Цифровая подпись сложнее и банальной подделке не поддается (насколько я знаю)
Я всё правильно сделал? Расскажи пожалуйста как ты нашёл код проверки (как ты обычно это делаешь, алгоритм действий) Спасибо
Точка останова на функцию вывода сообщения, несколько возвратов по ret и вот мы и на месте. А вообще если на лету не понятно как работает, используй IDA и применяй сигнатуры, сразу станет все понятно.
Как я понял такойже подход и к контрольной сумме. Выскакивает сообщение об ошибке, начинаем обратную трассировку до места падения проги. Правильно ли я понимаю? neprovad скажи я правильно подпатчил код? А то я сомневаюсь. Можно ещё один вопрос? Начал читать про инлайн патчинг. Как я понял Патч происходит в памяти, скажем когда распаковщик отработал, передал управление на OEP, адрес ОЕР подменяется Jamp*ом на наш код. После того как он отработал, возврашаем управление проге. Вопрос: Сначала в отладчике надо узнать адреса которые надо патчить? И еще, гдето прочёл в одном из топиков что если Если проверок много то применяют инлайн патчинг? Но у меня возник вопрос: Что если в коде есть проверка контрольной суммы всего файла? Инлайн в пролёте? Или как вариант приидётся писать отдельную прогу и патчить когда подопытная прога полностью распаковалась ? Или всётаки можно вклиниться между упаковщиком и прогой?
- Можно было заменой одного байта обойтись - Конечно, узнать адреса необходимо до начала инлайн патчинга - Раз на раз не приходится, вопрос в трате времени (быстрее снять защиту совсем или нейтрализовать инлайном) - Если есть проверка, она находится и нейтрализуется, либо ей (проверке) подсовывают оригинальные значения. Опять же смотря как она вызывается (одно дело по таймеру периодично, другое дело один раз при запуске программы). Каждый случай обычно требует своего подхода, вернее его всегда можно найти. Пожалуй так.
Что это за Thinstall Setup Capture как и чем можно его снять, распаковать. Перерыл все, вразумительного ответа не нашел.
PEiD v0.94 говорит UPolyX v0.5 [Overlay] * xeinfo PE - Thinstall VS 3.0.x -> Jitit Software RDG Packer Detector говорит Delphi FlexHEX в начале файла есть вот что: Boot loader for Thinstalled packages FileVersion 3.349 InternalName boot_loader_exe. LegalCopyright 2005-2007. Thinstall boot_loader_exe.exe ProductName Thinstall ProductVersion 3.349
Ну вот, самое время самостоятельно разобраться как оно все работает. Бряк на CreateFileA попробуй и жди выгрузки.
Поясняю свою мысль насчет CreateFileA. Почему я выбрал именно её? Thinstall известен тем что виртуализирует, помещая в песочницу "sandbox" выполняемый процесс, при этом контролируя все его попытки работы с файловой системой. Так вот, ставим бряк на CreateFileA, ждем срабатывания, смотрим на имя открываемого\создаваемого файла и делаем вывод - как относится данный файл к работе подопытного приложения. Если кажется что файл нужен нам, запоминаем путь, ставим бряк на CloseHandle и ждем срабатывания (по логике после CreateFileA вызовется WriteFile а затем CloseHandle). После этого можно ныжный нам файл скопировать и делать с ним что угодно. Для удобства понимания работы рекомендую использовать WinApiOverride (см. в разделе инструменты)