0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 17
1

Перехват выполнения скрипта

12.11.2015, 15:41. Показов 1340. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Недавно начал заниматься реализацией перехвата функций dll. (на примерах с MessageBox, в интернете их куча), по средствам Detours MS (v1.5) у меня получилось перехватить. Хочу сейчас перехватить выполнение скрипта с использованием jscript.dll или vbscript.dll. В импорте у них имеются 4 функции:

1. DllCanUnloadNow;
2. DllGetClassObject;
3. DllRegisterServer;
4. DllUnregisterServer;

Достаточно будет их перехватить ? в какую сторону мне копать, что бы реализовать данный метод?

Добавлено через 4 часа 46 минут
Поправка по теме:
Есть ли возможность в памяти пошагово отследить выполнение скрипта, то есть придется писать свой дебагер или же есть функция в dll(не экспортируемая), которую можно перехватить?

Поправьте если несу бред) не понимая этого)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.11.2015, 15:41
Ответы с готовыми решениями:

Получить результат выполнения скрипта perl во время выполнения скрипта bash
доброго времени суток. знатоки, нужна ваша помощь- подскажите как из bash-скрипта вызвать...

Результат выполнения программы в консоли пропадает после выполнения скрипта
нужно отпарсить файл , но мне надо видеть что выводит сценарий , иначе мне его неотладить....

перехват загрузки скрипта
на странице имеется скрипт, мне надо отловить окончание его загрузки пишу: var script =...

Задержка выполнения скрипта
Добрый вечер господа, вот у меня возник интересный вопрос существует ли определенная функция на ...

8
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,424
14.11.2015, 23:45 2
Цитата Сообщение от Doomrunner Посмотреть сообщение
Достаточно будет их перехватить ?
для того что бы перехватить скрипт наверное нет.
Цитата Сообщение от Doomrunner Посмотреть сообщение
в какую сторону мне копать, что бы реализовать данный метод?
тема настолько обширная что легче наверное будет копать к центру земли
Цитата Сообщение от Doomrunner Посмотреть сообщение
Поправьте если несу бред) не понимая этого)
есть немного)
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 17
15.11.2015, 13:09  [ТС] 3
Нашел и реализовал метод перехвата функции IActiveScriptParse::ParseScriptText, соответственно получаю текст скрипта перед выполнением. А как можно отследить вызовы всех методов в скрипте(во время выполнения), то есть получать название метода до выполнения его?
0
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,424
15.11.2015, 16:11 4
Цитата Сообщение от Doomrunner Посмотреть сообщение
А как можно отследить вызовы всех методов в скрипте
подозреваю что все вызовы идут через IDispatch - пробейте его функции и у вас будет картина всех вызовов

Добавлено через 1 минуту
...если мудрый пользователь скриптов цепляется к конкретному интерфейсу то конечно придется перехватывать все что вас интересует
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 17
20.11.2015, 09:02  [ТС] 5
Решил перехватить вот такую функцию __int32 __stdcall JsCreateObject2(class CSession*, class VAR*, class VAR*, int, class VAR*) из jscript.dll, таким способом ( за счет Detour):
C++
1
2
3
4
5
6
7
8
9
10
11
12
typedef __int32 (__stdcall *PFN_JsCreateObject)(class CSession*, class VAR*, class VAR*, int, class VAR*);
 
__int32 __stdcall GFN_JsCreateObject(class CSession*, class VAR*,class VAR*, int, class VAR*);
 
PFN_JsCreateObject      n_JsCreateObject    = NULL;
 
__int32 __stdcall GFN_JsCreateObject(class CSession* c , class VAR* a , class VAR* b , int Ti, class VAR* d )
{
    DebugBreak(); // В попытки отладить
    MessageBox(NULL,L"??",L"???",MB_OK); // Выполняю что то свое, после возникает ошибка
    return n_JsCreateObject(c,a,b,Ti,d);
}
Я тут подозреваю что, нужным образом не получаю параметры, нужно ли в этом случае восстанавливать структуру классов? После моего MessageBox происходит вылет WSH. Правильно я передаю параметры?
0
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,424
20.11.2015, 09:48 6
Цитата Сообщение от Doomrunner Посмотреть сообщение
Правильно я передаю параметры?
к сожалению тут ничем не помогу...единственное что приходит в голову - может функция ждет их в обратном порядке
1
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 17
20.11.2015, 10:49  [ТС] 7
Извините, забыл в посте выше указать, что return __int32 __stdcall GFN_JsCreateObject(class CSession* c , class VAR* a , class VAR* b , int Ti, class VAR* d ).

Добавлено через 8 минут
Хотя указал)
0
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,424
20.11.2015, 10:52 8
Цитата Сообщение от Doomrunner Посмотреть сообщение
Хотя указал)
да, я видел это, просто иногда бывает немножко магии) недавно передавал параметры через IDispatch и в функции AutoWrap почему то было с тремя восклицательными указано что передавать надо наоборот) просто мысли на уровне "а не попробовать ли протереть фары"
1
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 17
03.12.2015, 14:20  [ТС] 9
Нашел решение с помощью IDA, там передавалось всего два параметра __int16* и __int32 , проблема была при вызове оригинальной функции, пришлось вызов писать по средства asm вставок, т.к регистр EAX поролся. Теперь думаю если выполнять свой код просто сохранить регистры а потом восстановить. Тему можно закрыть.
0
03.12.2015, 14:20
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.12.2015, 14:20
Помогаю со студенческими работами здесь

Порядок выполнения скрипта
Помогите разобраться! Не могу понять, как в python скрипте можно вернуться на шаг или несколько...

Скорость выполнения скрипта
Как проверить скорость выполнения скрипта?

Время выполнения скрипта
как понять такую ситуацию на сервере установлено время выполнения скрипта 60 сек запускаю скрипт...

Процент выполнения скрипта
Ребят помогите как мне настроить так чтобы он не все числа от 0 до 50 выводил, а когда вывел...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

Новые блоги и статьи
NoSQL базы данных: что это такое и какие существуют
bytestream 22.01.2025
В современную эпоху цифровой трансформации объемы данных растут экспоненциально, создавая новые вызовы для традиционных систем управления базами данных. NoSQL (Not Only SQL) представляет собой. . .
Обновление исследования от команды MCM (январь 2025 г.)
Programma_Boinc 22.01.2025
Обновление исследования от команды MCM (январь 2025 г. ) Мы продолжаем изучать молекулярные сигнатуры, связанные с раком легких, с текущим фокусом на GCM1, факторе транскрипции, участвующем в. . .
Как работать с Kafka в Go (Golang)
bytestream 22.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки событий и интеграции микросервисов. Эта система, изначально. . .
Как использовать RabbitMQ в Go (Golang)
bytestream 22.01.2025
RabbitMQ представляет собой надежный и широко используемый брокер сообщений, который играет ключевую роль в построении современных распределенных систем и микросервисной архитектуры. В основе работы. . .
Как преобразовать список списков в простой список в Python
bytestream 22.01.2025
При работе с Python разработчики часто сталкиваются с необходимостью обработки сложных структур данных, среди которых особое место занимают вложенные списки. Эти структуры представляют собой списки,. . .
Что такое GUID / UUID и как их создать
bytestream 22.01.2025
В мире разработки программного обеспечения существует постоянная потребность в уникальной идентификации объектов, записей и ресурсов. Эта задача становится особенно актуальной в распределенных. . .
Как добавить пустую директорию в репозиторий Git
bytestream 22.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с ситуацией, когда необходимо сохранить пустую директорию в репозитории. Данная задача может показаться простой на первый. . .
Как валидировать адрес email в JavaScript
bytestream 22.01.2025
JavaScript, как основной язык веб-разработки, предоставляет разработчикам множество инструментов для реализации эффективной валидации email-адресов. От простых встроенных решений до сложных. . .
Как заменить все вхождения подстроки в JavaScript
bytestream 22.01.2025
Строки в JavaScript представляют собой неизменяемые последовательности символов, что делает их обработку особенно интересной с точки зрения оптимизации и выбора правильного подхода к решению задач. . . .
Управление версиями пакетов в Node.js. В чем разница между тильдой (~) и кареткой (^) в package.json
bytestream 22.01.2025
В современной разработке программного обеспечения управление версиями пакетов играет ключевую роль в обеспечении стабильности и надежности проектов. Node. js, как одна из самых популярных платформ для. . .
Аутентификация на сайте с помощью формы
bytestream 21.01.2025
В современном цифровом мире безопасная аутентификация становится краеугольным камнем защиты веб-приложений и пользовательских данных. Каждый день миллионы людей используют различные онлайн-сервисы,. . .
Как получить индекс в цикле for в Python
bytestream 21.01.2025
При работе с коллекциями данных в Python часто возникает необходимость не только получить доступ к элементам последовательности, но и знать их позицию в процессе итерации. Индексация в циклах. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru