Quote:
Originally Posted by origmas
MonsterID - это указатель на ID (в этой именно реализации на VC++)
mov edi, MonsterID; // записывается в регистр
mov edi, [edi]; // из адресса, который и представляет собой этот указатель (по нем и лежит ID) - читаются данные в опять-же в этот регистр - то-есть сам ID
push edi; // и прячется ..
сам ID подготавливается функцией распределения памяти под данные функции потока, записью туда ID-а и открытием потока, а в эту функцию ID передается из основной программы ..
... это не я "Молодца" - это тот кто так догадался сделать на VC++
.. вообще-то работает ..
|
В данной реализации сишника то работает. А вот человек спрашивал про Автоит.А ты ему там советуешь выполнять данную операцию. А для него она НЕ ПРИМЕНИМА. Поэтому в его реализации данная вещь приводит к 100% лаже.
Заметь в его примере:
Code:
MOV_EDI(Dec("801050D6"))
MOV_EDI_DWORD_PTR_EDI()
PUSH_EDI()
Он запихивает само ID в регистр EDI, а не указатель на него. Поэтому операция MOV_EDI_DWORD_PTR_EDI() для него идиотична. К тому же, чтобы использовать пример из твоего сишника, ты сначала должен этот ID писать в адресное пространство клиента, а потом только передавать параметром своей функции (кстати что абсолютно бессмысленно, т.к. по сути при вызове CreateRemoteThread ты передаёшь 1 параметр - в 4 байта, который всего лишь является указателем на число в 4 байта, поэтому в данной конкретной ситуации проще не через указатель передавать, а само ID вместо указателя. Но такой частный случай может привести к тому, что не подойдёт общий код инъекции, расчитанный на большую структуру параметров).
На автоите ID передаётся совсем по другому. Там не делается передача по указателю. Вместо этого динамически формируется исполняемый код, который именно записывает этот ID по самому значению в регистр EDI, и передача параметров просто не осуществляется.
Т.е. в его случае команда:
MOV_EDI(Dec("801050D6"))
должна сформировать исполняемый ассемблерный код команды:
mov edi, 0x801050D6
Как видишь тут передачи параметров, а тем более извлечение их значений по указателям просто нету.
А причина проблем у человека: либо некорректное формирование исполняемого кода инъекции, либо неправильно осуществление самой инъекции.