Сейчас на форуме: subword, rtsgreg1989, zds (+9 невидимых)

 eXeL@B —› Основной форум —› Взлом защиты основаной на создании нового процесса
Посл.ответ Сообщение

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

Создано: 22 октября 2007 14:19
· Личное сообщение · #1

Кто нить может поделится знаниями по этому поводу? Т.е. есть прога , естественно защищенная все вроде бы хорошо, да вот незадача прога создает новый процесс и ему передает управление, как отловить это место? т.е. передачу управления новому процессу и собственно как его тогда трейсить?



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

Создано: 22 октября 2007 15:28
· Личное сообщение · #2

Tupis пишет:
как отловить это место? т.е. передачу управления новому процессу и собственно как его тогда трейсить?


все описано в самом вопросе: ловить CreateProcess. как трейсить - зависит от сообразительности.
даже флаги создания процесса не важны



Ранг: 284.8 (наставник), 6thx
Активность: 0.150
Статус: Участник

Создано: 22 октября 2007 15:58
· Личное сообщение · #3

Tupis
мож ты имеешь ввиду какую-нить прогу установки ( на основе installshield ) тогда как тебе сказали лови CreateProcessA и затем запускай сам с такими параметрами процесс. Илю юзай windbg он вроде позволяет отлаживать создаваемые процессы тоже.



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

Создано: 22 октября 2007 16:19
· Личное сообщение · #4

RSI
Нет это не инсталятор...
ПРога называется Leko в ранних версиях не было создания второго процесса и лечилось впринципе легко. Теперь же имя даже ключ (Guardant) который прога почему то не хочет принимать все затруднилось.
На проге висит конверт он снимается тулзовиной Инферно без вопросов. Поверху еще прога запакована UPX так вот после распаковки упх уже второй процесс не создается и естесно не передается управление, прога выходит по экситпроцесс. Если же в отладчике доходить до ОЕР то прога таки создает второй процесс и как то передает ему управление после чего естесно она говорит что проблемы при работе с ключем вот такая вот беда. Куда копать пока не понимаю. Кроме того еще в проге есть замеры вермени между отдельными блоками опятьже ка ких обходить плагин фантом для оли вроде не работает тут.



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

Создано: 22 октября 2007 16:49 · Поправил: DMD
· Личное сообщение · #5

Tupis пишет:
Если же в отладчике доходить до ОЕР то прога таки создает второй процесс и как то передает ему управление после чего естесно она говорит что проблемы при работе с ключем вот такая вот беда.


если ловить CreateProcess, то и доходить до OEP (ввиду, похоже, имеется окончание распаковки UPX) нет небходимости - все равно не "проскочишь".
трейс дочернего процесса будет зависить от того, что, собственно, запускается. те. заведомо известный exe или что-то предварительно собранное. но в любом случае никто не мешает поставить защелку (0хEBFE) на OEP дочернего процесса и снять ее после аттача к нему
и если повезло и дочерний процесс запускается неупакованным - можно получить все что нужно для дизассемблирования. ну или тут уж варианты....
Все подсказки, похоже, сделаны



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

Создано: 22 октября 2007 17:05
· Личное сообщение · #6

DMD
Спасибо за подсказки буду пробовать.
Да походу как создается дочерний процесс: прога мапится в памяти тот же самй экзешник только неупакованый и ему передается управление ну во всяком случае я именно так понял пока разбирался со всем этим.



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

Создано: 23 октября 2007 10:16
· Личное сообщение · #7

Успехов тебе, конечно.
мне только не понятен вот этот момент:

Tupis пишет:
Поверху еще прога запакована UPX


Tupis пишет:
прога мапится в памяти тот же самй экзешник только неупакованый и ему передается управление


в любом случае, если дочерний процесс стартует неупакованным (по описанию можно понять, что так и происходит), то не получить new.exe для дальнейших исследование почти грешно. а если new.exe еще будет успешно запускаться как самостоятельный *.exe, то сложность первоначальной задачи резко понижается.



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

Создано: 23 октября 2007 12:58
· Личное сообщение · #8

DMD
Беда в том что мапится то он в памяти, а не на диске. У меня навыков такого ковыряния очень мало т.е. как его из памяти дампануть на диск я ХЗ. Теретически понимаю что нужно найти EP у зампленного экзешника и потом его с этого места задампить, но как??



Ранг: 1045.7 (!!!!), 31thx
Активность: 0.570
Статус: Участник

Создано: 23 октября 2007 15:09
· Личное сообщение · #9

Tupis пишет:
Поверху еще прога запакована UPX так вот после распаковки упх уже второй процесс не создается и естесно не передается управление, прога выходит по экситпроцесс.

Или это не UPX или ты что то путаеш..



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

Создано: 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, а не_пойми_что. так что вполне возможно.



Ранг: 218.5 (наставник), 2thx
Активность: 0.090
Статус: Участник

Создано: 23 октября 2007 16:32
· Личное сообщение · #11

Tupis пишет:
На проге висит конверт он снимается тулзовиной Инферно без вопросов. Поверху еще прога запакована UPX так вот после распаковки упх уже второй процесс не создается

Если я правильно понял, сперва файл упакован упх, а сверху еще висит конверт? И после снятия конверта прога еще ведет себя нормально, а затем ты снимаешь упх, и поведение проги меняется. Если все именно так (и ты уверен, что это именно упх), то 95%, что прога проверяет размер файла.

PS
Выложи прогу чтоль.



Ранг: 1045.7 (!!!!), 31thx
Активность: 0.570
Статус: Участник

Создано: 23 октября 2007 17:30
· Личное сообщение · #12

DMD пишет:
у меня однажды был случай: после распаковки собственно код работал корректно, а вот dll, которую программа создавала из внутренного pseudo-образа с минимальной обработкой, после распаковки получалась не dll, а не_пойми_что. так что вполне возможно.

Так упх причем ?он ни биндер а простой упаковщик ..



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

Создано: 23 октября 2007 17:46
· Личное сообщение · #13

Вообщем дела такие:
после снятия конверта прога еще живет а вот после сняти упх она выходит по экситпроцесс причем происходит все тоже самое т.е. мапится файл но почему то управдение ему не передается. да еще там стоят временные замеры фантомплагин не спасает даже с драйвером. (
прогу прогу залил на рапиду 1,3 метра где то.



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

Создано: 23 октября 2007 17:54
· Личное сообщение · #14

Сори забыл ссылку дать (((
rapidshare.com/files/64615447/leko.rar.html




Ранг: 467.7 (мудрец), 5thx
Активность: 0.270
Статус: Участник
Иной :)

Создано: 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




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

Создано: 24 октября 2007 11:31
· Личное сообщение · #16

[HEX]
Спасибо за проделаную работу.
То что запускается два процесса увидел и сам, но каким образом им передается управление?
КРоме того в проге действительно есть апи гвадранта.
И еще вопрос как боротся с защитой по времени выполнения? я немогу отлаживать прогу так как она очень быстро вываливается из-за этого.



Ранг: 218.5 (наставник), 2thx
Активность: 0.090
Статус: Участник

Создано: 25 октября 2007 20:49
· Личное сообщение · #17

Tupis пишет:
как боротся с защитой по времени выполнения?

Если юзаются GetSystemTime/GetLocalTime, GetTickCount -- пропатч их.

Tupis пишет:
в проге действительно есть апи гвадранта.

А КАКИЕ апи заюзаны? Если есть Transform, то, ИХМО, лучше забей на эту прогу.



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

Создано: 25 октября 2007 21:24
· Личное сообщение · #18

Tupis пишет:
Если юзаются GetSystemTime/GetLocalTime, GetTickCount -- пропатч их.

ещё может быть GetFileTime и GetFileAtributes - всё что помню



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

Создано: 26 октября 2007 09:06
· Личное сообщение · #19

0xy
Какие сказать тяжело так как используется АПИ 5.01 нету логгера под это чудо, но говорю же у меня есть ключ но он не хочет работать после того как в нем поменяли содержимое ячейки nProg даже после того как ее первоначальное содержание вернул назад прога все равно пишет ошибка при работе с ключем.
Интересует естесно почему такая лажа... ПРога точно юзает и RDTSC и GetTicCount что еще она юзает ХЗ




Ранг: 467.7 (мудрец), 5thx
Активность: 0.270
Статус: Участник
Иной :)

Создано: 26 октября 2007 11:44 · Поправил: [HEX]
· Личное сообщение · #20

Tupis
Распаковку сделал, а дальше уж ты сам ковыряй. Управление передается путем тупого создания процесса (бряк на CreateProcessA) с параметрами для запуска k 32 - 1й процесс и l 38 - 2й процесс. Основной процесс ничем не занимется кроме как проверка на распакованость, проверка через длл (лейка32.dll) не запущено ли дважды и создание двух процессов. Выполнив эти действия родительский процесс завершается нормально. Прога напичкана таймерами, но пофиксить их можно ручками. Так что отладчик в руки и вперед.

-----
Computer Security Laboratory



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


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