Сейчас на форуме: subword, rtsgreg1989, zds (+9 невидимых) |
![]() |
eXeL@B —› Основной форум —› Взлом защиты основаной на создании нового процесса |
Посл.ответ | Сообщение |
|
Создано: 22 октября 2007 14:19 · Личное сообщение · #1 |
|
Создано: 22 октября 2007 15:28 · Личное сообщение · #2 |
|
Создано: 22 октября 2007 15:58 · Личное сообщение · #3 |
|
Создано: 22 октября 2007 16:19 · Личное сообщение · #4 RSI Нет это не инсталятор... ПРога называется Leko в ранних версиях не было создания второго процесса и лечилось впринципе легко. Теперь же имя даже ключ (Guardant) который прога почему то не хочет принимать все затруднилось. На проге висит конверт он снимается тулзовиной Инферно без вопросов. Поверху еще прога запакована UPX так вот после распаковки упх уже второй процесс не создается и естесно не передается управление, прога выходит по экситпроцесс. Если же в отладчике доходить до ОЕР то прога таки создает второй процесс и как то передает ему управление после чего естесно она говорит что проблемы при работе с ключем вот такая вот беда. Куда копать пока не понимаю. Кроме того еще в проге есть замеры вермени между отдельными блоками опятьже ка ких обходить плагин фантом для оли вроде не работает тут. ![]() |
|
Создано: 22 октября 2007 16:49 · Поправил: DMD · Личное сообщение · #5 Tupis пишет: Если же в отладчике доходить до ОЕР то прога таки создает второй процесс и как то передает ему управление после чего естесно она говорит что проблемы при работе с ключем вот такая вот беда. если ловить CreateProcess, то и доходить до OEP (ввиду, похоже, имеется окончание распаковки UPX) нет небходимости - все равно не "проскочишь". трейс дочернего процесса будет зависить от того, что, собственно, запускается. те. заведомо известный exe или что-то предварительно собранное. но в любом случае никто не мешает поставить защелку (0хEBFE) на OEP дочернего процесса и снять ее после аттача к нему и если повезло и дочерний процесс запускается неупакованным - можно получить все что нужно для дизассемблирования. ну или тут уж варианты.... Все подсказки, похоже, сделаны ![]() ![]() |
|
Создано: 22 октября 2007 17:05 · Личное сообщение · #6 |
|
Создано: 23 октября 2007 10:16 · Личное сообщение · #7 Успехов тебе, конечно. мне только не понятен вот этот момент: Tupis пишет: Поверху еще прога запакована UPX Tupis пишет: прога мапится в памяти тот же самй экзешник только неупакованый и ему передается управление в любом случае, если дочерний процесс стартует неупакованным (по описанию можно понять, что так и происходит), то не получить new.exe для дальнейших исследование почти грешно. а если new.exe еще будет успешно запускаться как самостоятельный *.exe, то сложность первоначальной задачи резко понижается. ![]() ![]() |
|
Создано: 23 октября 2007 12:58 · Личное сообщение · #8 |
|
Создано: 23 октября 2007 15:09 · Личное сообщение · #9 |
|
Создано: 23 октября 2007 15:52 · Поправил: DMD · Личное сообщение · #10 Tupis пишет: Беда в том что мапится то он в памяти, а не на диске а это тут причем?! BOOL WINAPI CreateProcess( __in LPCTSTR lpApplicationName, __in_out LPTSTR lpCommandLine, __in LPSECURITY_ATTRIBUTES lpProcessAttributes, __in LPSECURITY_ATTRIBUTES lpThreadAttributes, __in BOOL bInheritHandles, __in DWORD dwCreationFlags, __in LPVOID lpEnvironment, __in LPCTSTR lpCurrentDirectory, __in LPSTARTUPINFO lpStartupInfo, __out LPPROCESS_INFORMATION lpProcessInformation ); Parameters lpApplicationName The name of the module to be executed. This module can be a Windows-based application. It can be some other type of module (for example, MS-DOS or OS/2) if the appropriate subsystem is available on the local computer. The string can specify the full path and file name of the module to execute or it can specify a partial name. In the case of a partial name, the function uses the current drive and current directory to complete the specification. The function will not use the search path. If the file name does not contain an extension, .exe is assumed. Therefore, if the file name extension is .com, this parameter must include the .com extension. The lpApplicationName parameter can be NULL. In that case, the module name must be the first white space-delimited token in the lpCommandLine string. If you are using a long file name that contains a space, use quoted strings to indicate where the file name ends and the arguments begin; otherwise, the file name is ambiguous. For example, consider the string "c:\program files\sub dir\program name". This string can be interpreted in a number of ways. The system tries to interpret the possibilities in the following order: c:\program.exe files\sub dir\program name c:\program files\sub.exe dir\program name c:\program files\sub dir\program.exe name c:\program files\sub dir\program name.exe If the executable module is a 16-bit application, lpApplicationName should be NULL, and the string pointed to by lpCommandLine should specify the executable module as well as its arguments. To run a batch file, you must start the command interpreter; set lpApplicationName to cmd.exe and set lpCommandLine to the name of the batch file. * * * те. если ты тормознулся на CreateProcess, то в параметрах будет lpApplicationName. те. нужный тебе готовый exe. да и параметры lpCommandLine как на ладони (если они есть, конечно). Если CreateProcess может что-то стартануть из памяти directly - пусть старшие товарищи меня поправят! ![]() pavka пишет: ты что то путаешЬ возможно и не путает. у меня однажды был случай: после распаковки собственно код работал корректно, а вот dll, которую программа создавала из внутренного pseudo-образа с минимальной обработкой, после распаковки получалась не dll, а не_пойми_что. так что вполне возможно. ![]() |
|
Создано: 23 октября 2007 16:32 · Личное сообщение · #11 Tupis пишет: На проге висит конверт он снимается тулзовиной Инферно без вопросов. Поверху еще прога запакована UPX так вот после распаковки упх уже второй процесс не создается Если я правильно понял, сперва файл упакован упх, а сверху еще висит конверт? И после снятия конверта прога еще ведет себя нормально, а затем ты снимаешь упх, и поведение проги меняется. Если все именно так (и ты уверен, что это именно упх), то 95%, что прога проверяет размер файла. PS Выложи прогу чтоль. ![]() |
|
Создано: 23 октября 2007 17:30 · Личное сообщение · #12 DMD пишет: у меня однажды был случай: после распаковки собственно код работал корректно, а вот dll, которую программа создавала из внутренного pseudo-образа с минимальной обработкой, после распаковки получалась не dll, а не_пойми_что. так что вполне возможно. Так упх причем ?он ни биндер а простой упаковщик .. ![]() |
|
Создано: 23 октября 2007 17:46 · Личное сообщение · #13 Вообщем дела такие: после снятия конверта прога еще живет а вот после сняти упх она выходит по экситпроцесс причем происходит все тоже самое т.е. мапится файл но почему то управдение ему не передается. да еще там стоят временные замеры фантомплагин не спасает даже с драйвером. ( прогу прогу залил на рапиду 1,3 метра где то. ![]() |
|
Создано: 23 октября 2007 17:54 · Личное сообщение · #14 |
|
Создано: 23 октября 2007 23:14 · Поправил: [HEX] · Личное сообщение · #15 Tupis Малец глянул и вижу что к упакованой проге приклеены в конце еще 400 байт хрени которые после снятия UPX естественно уползают ХЗ куда от чего прога точно не запуститься, так как читает она эти 400h байт именно с конца. Ну и создаются два процесса с параметрами k 32 и l 38, а основной выходит по Exit. За что именно отвечают параметры пока еще не разбирался. И явная проверка на распакованость. Тупой проверкой по размеру. Если больше 1500000 байт, то идут все на йух. Так что вернуть работоспособность файлу можно упаковав файл и приклеив к нему в конец 400h байт хрени из оригинального файла. Или же найти место проверки размера файла и нагнуть ;) Пофиксил распакованый файл заменой условных прыжков везде где было сравнивнение с числом 1500000 + приклеил к распакованому файлу 400h хрени и вроде стало запускаться. Вот результат http://hexcsl.com/upload/stats/339 http://hexcsl.com/upload/stats/339 За полную работоспособность не отвечаю, так что теория изложена, а дальше сами. Правда у меня всеже чувство что это самопальная защита ресурсов, так как ресурсы в основном не видны даже после снятия UPX, либо это вшитая в ПО защта Guardian (ниразу не ковырял посему и незнаю как выглядит). ----- Computer Security Laboratory ![]() |
|
Создано: 24 октября 2007 11:31 · Личное сообщение · #16 [HEX] Спасибо за проделаную работу. То что запускается два процесса увидел и сам, но каким образом им передается управление? КРоме того в проге действительно есть апи гвадранта. И еще вопрос как боротся с защитой по времени выполнения? я немогу отлаживать прогу так как она очень быстро вываливается из-за этого. ![]() |
|
Создано: 25 октября 2007 20:49 · Личное сообщение · #17 |
|
Создано: 25 октября 2007 21:24 · Личное сообщение · #18 |
|
Создано: 26 октября 2007 09:06 · Личное сообщение · #19 0xy Какие сказать тяжело так как используется АПИ 5.01 нету логгера под это чудо, но говорю же у меня есть ключ но он не хочет работать после того как в нем поменяли содержимое ячейки nProg даже после того как ее первоначальное содержание вернул назад прога все равно пишет ошибка при работе с ключем. Интересует естесно почему такая лажа... ПРога точно юзает и RDTSC и GetTicCount что еще она юзает ХЗ ![]() |
|
Создано: 26 октября 2007 11:44 · Поправил: [HEX] · Личное сообщение · #20 Tupis Распаковку сделал, а дальше уж ты сам ковыряй. Управление передается путем тупого создания процесса (бряк на CreateProcessA) с параметрами для запуска k 32 - 1й процесс и l 38 - 2й процесс. Основной процесс ничем не занимется кроме как проверка на распакованость, проверка через длл (лейка32.dll) не запущено ли дважды и создание двух процессов. Выполнив эти действия родительский процесс завершается нормально. Прога напичкана таймерами, но пофиксить их можно ручками. Так что отладчик в руки и вперед. ----- Computer Security Laboratory ![]() |
![]() |
eXeL@B —› Основной форум —› Взлом защиты основаной на создании нового процесса |