Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Запустить программу вторым потоком под Windows 7


Автор: ConstantinXXX 15.7.2011, 17:00
Всем доброго времени суток ))

надо запустить один исполняемый файл exe внутри другой программы вторым потоком. Сразу напешу это надо не для троянов и т.п., надо в своей программе запустить вторым потоком свою же программу. Это надо для разработки программы протектора. Дело в том, что для XP и Vista программу написал, но для Windows 7 тот же код не работает. :( это наверное связано с защитой внедренной с семеркой.

привожу кусок кода:

Код

    ZeroMemory(@InfoStart, SizeOf(StartupInfo));
    ZeroMemory(@CText, SizeOf(TContext));

    CreateProcess(nil, pchar(ParamStr(0)), nil, nil, False, CREATE_SUSPENDED, nil, nil, InfoStart, InfoProc);
    CText.ContextFlags := Context_FULL;
    GetThreadContext(InfoProc.hThread, CText);

    ReadProcessMemory(InfoProc.hProcess, pointer(CText.Ebx + 8), @AddressBase, 4, BytesCode);
    VirtualAllocEx(InfoProc.hProcess, pointer(HeaderImage.OptionalHeader.ImageBase), SizeInject, MEM_RESERVE or MEM_COMMIT, PAGE_EXECUTE_READWRITE);

    WriteProcessMemory(InfoProc.hProcess, pointer(HeaderImage.OptionalHeader.ImageBase), MemoryInject, SizeInject, BytesCode);
    WriteProcessMemory(InfoProc.hProcess, pointer(CText.Ebx + 8), @HeaderImage.OptionalHeader.ImageBase, 4, BytesCode);
    CText.Eax := HeaderImage.OptionalHeader.ImageBase + HeaderImage.OptionalHeader.AddressOfEntryPoint;
    SetThreadContext(InfoProc.hThread, CText);

// вот эта функция походу не поддерживается семеркой (вернее не совместима с ней):
    ResumeThread(InfoProc.hThread);


может кто знает что можно сделать? 

Автор: Snowy 15.7.2011, 19:27
Ну раз обе программы свои, то можно создать во второй отдельную функцию для запуска и экспортировать ее.
А в первой программе подключить вторую, как dll, создать отдельный тред и запустить в нем на выполнение стартовую функцию.

Автор: ConstantinXXX 15.7.2011, 22:19
вторая программа зашифрована, она расшифровывается первой программой и по идеи должна запуститься вторым потоком в первой же программе... Тут возникает проблема в том, что до расшифровки запустить стартовую функцию не получиться. :( 

Автор: Snowy 15.7.2011, 23:18
Можно расшифровать в память и подключить уже из памяти.
Где-то на форуме пробегали решения, как подключить dll из памяти.
Вот http://uinc.ru/files/ есть класс TFakeDll. Там уже все реализовано. Нужно только предварительно расшифровать файл в память.

Автор: ConstantinXXX 16.7.2011, 14:59
Snowy, спасибо большое smile посмотрел, правда не понял как запустить программу когда подключаешь её как dll. По идеи стартовой функцией в программе должна быть TForm1.FormCreate? И еще небольшая проблема в том, что моя программа (которую подключаю как dll) будет в конечном результате накрыта другим протектором и скорее всего там нельзя будет найти начальную функцию по имени, может есть какие то идет? )) 

вообще я использую последний протектор сделанный на базе вот этого: http://www.delphibasics.info/home/delphibasicscounterstrikewireleases/opencrypterbyp0ke

это как бы и есть первая программа в которую засовываю другую. Проблема, что он не работает на windows 7 :( 

нашел обсуждение этой проблемы на одном забугорном форуме http://www.opensc.ws/delphi-help/13352-help-64bit-resumethread.html

они там пишут, что это из - за того, что win 7 x 64 и упоминается ссылка на якобы решение проблемы вот эта:  http://www.delphibasics.info/home/delphibasicssnippets/uexecfrommembysteve10120-fixedforwin7x64bytestest

только вот я не совсем понял как это можно использовать... :( 

Автор: Snowy 18.7.2011, 10:21
Стартовую функцию ты должен написать сам и проэкспортировать ее.
В качестве содержимого можно тупо скопировать из dpr.
Чем она там закрыта - не важно. Секцию экспорта шифровать никто не станет.
Да и вообще лучше переделать ее в dll - напрямую все равно запускать никто не будет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)