Как я могу изменить адрес в другом процессе со значением, которое также может измениться? - PullRequest
0 голосов
/ 21 февраля 2020

Я использую C ++ с Qt, и я изо всех сил пытаюсь найти способ достичь чего-то, чего я никогда раньше не делал. Вот чего я хочу добиться:

У меня есть клиент (назовем его Client.exe), к которому у меня нет доступа к источнику и средства запуска (назовем его ... Launcher.exe) который у меня есть доступ к источнику.
Cient.exe требуется пароль и имя пользователя, предположительно, из Launcher.exe. Если бы у меня была только одна пара пароль / имя пользователя, я знаю, что мог бы создать .dll и внедрить ее, но, поскольку у меня может быть много комбинаций, это невозможно. Итак, вот мой вопрос: как создать ссылку, позволяющую мне отправить пароль и имя пользователя из Launcher.exe в Client.exe?

Второй вопрос: есть ли способ использовать VirtualProtect, и это что-то вроде (для того, чтобы изменить некоторые инструкции в памяти), с исполняемым файлом, то есть без каких-либо инъекций? (Я думаю, что ответ нет, но я хочу быть уверен)

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Ваш «Launcher.exe» и ваша DLL, введенная в «Client.exe», могут взаимодействовать друг с другом через межпроцессное взаимодействие , например, сопоставление файлов . Это может быть использовано для «Launcher.exe» для передачи любого желаемого имени пользователя и пароля в «Client.exe».

Однако главная проблема, которую я вижу, состоит в том, как заставить «Client.exe» использовать эти данные. , если у вас нет доступа к исходному коду и он также не предоставляет API для этого.

Если вы хотите обмануть "Client.exe", используя данные, предоставленные вами (или вашими вставлен DLL) вместо предполагаемых данных, то вы должны выполнить обратный инжиниринг программы и изменить соответствующие инструкции, чтобы они загружали ваши данные вместо исходных данных. Поскольку у вас нет доступа к исходному коду C / C ++, вам нужно будет понять инструкции на языке ассемблера , чтобы выполнить sh this.

Чтобы выяснить, какие инструкции изменения, вам, вероятно, понадобится инструмент отладки, такой как x64dbg , который предназначен для отладки приложений, для которых вы сами не написали (и не имеете исходного кода), и, возможно, также инструмент анализа stati c например IDA или Гидра . Кроме того, если программа намеренно защищает себя от обратного инжиниринга, вам придется научиться преодолевать это (что может быть очень сложно).

Вы также можете выполнить sh, не вводя DLL, путем используя WriteProcessMemory . Вам также может понадобиться использовать VirtualAllocEx , если вам требуется дополнительная память внутри целевого процесса, например, для ввода инструкций или данных.

В любом случае, прежде чем вмешиваться в инструкции или данные другого процесса, может быть целесообразно приостановить все его потоки с помощью SuspendThread , а затем возобновить все потоки с помощью ResumeThread . В противном случае, если программа запускается, когда ее инструкции или данные находятся в несогласованном состоянии, программа может обработать sh.

0 голосов
/ 21 февраля 2020

Если я вас правильно понимаю, вы хотите каким-то образом изменить память другого процесса, для которого у вас нет исходного кода? Я думаю, что даже если бы это было возможно, используя черных магов c и разделение кучи дочерних процессов, это была бы плохая идея. Изменение памяти других процессов даже с помощью исходного кода - это путь к катастрофе, вы неизменно повредите что-то, и оно загореться будет go.

Итак, в ответ на ваш вопрос об изменении памяти другого процесса. Пожалуйста, ради бога, не делайте этого.

Если Клиент имеет закрытый исходный код и не предоставляет API для этого, я думаю, вам не повезло. Попытка проникнуть в другой процесс в лучшем случае приведет к sh обоим процессам, в худшем - к 1011 * керналу hosts.

Итог - если нет API для этого, и Клиент является закрытым исходным кодом (иначе вы не можете добавить API к нему), то это невозможно. Ссылка, на которую вы ссылаетесь, обычно представляет собой API, предоставляемый целью (в данном случае Client.exe)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...