цикле к lpShellcode переменную i (тут уже прошу пояснения, кто чего то понял) и затем сначала присваивает этому месту в памяти (?) lpMessageBoxA, а затем таким же циклом присваивает этому месту original entry point. Помогите пожалуйста, как это работает? Тоесть какая взаимосвязь этого адреса и того, что он делает в функции последней. Если что, lpShellcode выглядит так:
LPVOID lpShellcode = new char[SHELLCODE_SIZE];
Зачем в цикле к массиву, при итерации,прибавлять сам индекс — это вам уже не к ассемблеру, а к банальнейшим азам программирования.. Если кратко, побайтово перебирается сам шеллкод. Если встречается 0xAA первый раз, вставляется туда ранее полученный адрес на MessageBox (виртуальные адреса на функции могут быть разными, поэтому нужно получать их в ран-тайме), и собственно на второй раз подставляет туда оригинальную точку входа, дабы вернуть управление оригинальному коду программы.
Обсуждают сегодня