Delphi: Запустить приложение с параметрами в потоке

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by o_OBallers, 11 Oct 2007.

  1. o_OBallers

    o_OBallers Banned

    Joined:
    11 Oct 2007
    Messages:
    23
    Likes Received:
    24
    Reputations:
    0
    Как запустить приложение с параметрами в отдельном потоке то есть, что-бы не создавался новый процесс.
     
  2. LEE_ROY

    LEE_ROY Elder - Старейшина

    Joined:
    9 Nov 2006
    Messages:
    450
    Likes Received:
    188
    Reputations:
    26
    ты сам походу непонял что хотел... заинжектить можно, тольок смысла - zero.
     
  3. Robin_Hood

    Robin_Hood Elder - Старейшина

    Joined:
    30 Oct 2006
    Messages:
    144
    Likes Received:
    155
    Reputations:
    47
    никак. поток можно запустить с кодом, который есть в приложении, если на пальцах.
     
    1 person likes this.
  4. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    Взять нужный код, потом PsCreateSystemThread() в ядре
    круто?
     
    4 people like this.
  5. DWORD

    DWORD Elder - Старейшина

    Joined:
    24 Jul 2007
    Messages:
    129
    Likes Received:
    70
    Reputations:
    -36
    Э... Так ведь память будет вся той программы, где ты решил запускать свой код, какой в этом смысл, ничего работать не будет (если это конечно не вредительский какой-нибудь фрагмент типа "шеллкода")
     
  6. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    o_OBallers Если ты силен в PE формате, то можно запускать файл, без создания отдельного процеса путем проецирования файла в память, т.е. выполнить работу загрузчика - произвести работу с импортом и другими директориями в файле - а потом создать поток через CreateTheared указав в виде процедуры адресс оригинальной точки входа в программу OEP...

    // Конечно накладываются некоторые ограничения, но все же для каждой задачи свои методы!
     
  7. DWORD

    DWORD Elder - Старейшина

    Joined:
    24 Jul 2007
    Messages:
    129
    Likes Received:
    70
    Reputations:
    -36
    Не чужое приложение запустить, а свой код, который пишется с учетом того где он будет выполняться можно, на эту тему статей много даже написано
     
  8. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    >>Как запустить приложение с параметрами в отдельном потоке то есть, что-бы не создавался новый процесс.
    да вроде теоретически можно, тк стек у потока, что хорошо, свой да и даже регистры, но, что делать, например, с глобальными переменными? а если будет вызываться в конце ExitProcess? так что в общем случае ничего ты созданием клиентского потока стандартным CreateThread не сделаешь. свой код естественно - на адрес байткода сделай jmp и пусть себе там работает)
     
    1 person likes this.
  9. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    KEZ, я не вижу позитива в ваших словах. Где новые идеи? Пусть с помощью функций диспетчера объектов сначала создаст объект типа "process", предварительно заполнив необходимые структуры, не забыв при этом с помощью ExCreateHandleTable создать БД хендлов, в которой мы найдем позже указатель на объект-поток.
     
  10. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    что-то мне подсказывает, что это будет эквивалентно в общем экспорту кода CreateProcess. а смысл)
     
  11. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    Ну вообще это был ответ Кезу на его сообщение о PsCreateSystemThread(), ибо моя извращенная идея круче. А насчет эквивалентности - это наврятли, слишко много нюансов.
     
  12. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    На самом деле, что требуется? Как понять создать поток вне процесса? То, что поток является чьим-то - определяется по сис. записям в ядре и хендлами потоков. Переключением занимается пл
    онеровщенг.

    П****ц, а процесс, который спроецировал файл - чем будет являться? Не кажется ли что в нем и запустится новый поток?

    Понятия процесса вообще впринципе нет. Пропатчить планировщик, который переключает контексты (стек, регистры, таблицы и тп) потоков.
    Создать системный поток без процесса. Как бы в контексте SYSTEM, но грубо говоря без процесса.

    Угу, прям на планке ОЗУ написана "это память эксплорер точка эгзе"

    ну это я все пишу конечно чисто в понт. потому что не хочется делом заниматься, работать и тп - я на форумах отвечаю и тп
     
    #12 KEZ, 12 Oct 2007
    Last edited by a moderator: 12 Oct 2007
    2 people like this.