ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

13.09.2008, 20:21
|
|
Постоянный
Регистрация: 04.12.2007
Сообщений: 424
Провел на форуме: 2364957
Репутация:
479
|
|
Сообщение от FrMn
поробуйте не в настройках, а явно, как у 0xc0de.
p.s. ваш перехват не годится для многопоточных приложений. также перехватчик intMessage или как он там, должен возвращать не 1, а то, что возвратит оригинальный MessageBox
Сделал, чтобы возвращал то что и оригинальный messageboxa;
явно, я так понял это так?
#pragma pack (push, 1);
struct jmp_far {
BYTE op_push;
DWORD arg;
BYTE op_ret;
};
#pragma pack (pop, 1);
лишнюю main() убрал.
Ничего не изменилось
|
|
|

13.09.2008, 20:35
|
|
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
Провел на форуме: 4226446
Репутация:
1564
|
|
2ntldr. Перед тем, как переписывать начало функции надо разрешить запись по адресу месадбокса с помощью функции VirtualProtect
http://msdn.microsoft.com/en-us/library/aa366898(VS.85).aspx
Установи защиту в PAGE_EXECUTE_READWRITE
не увидела с начала, что функи нет
И еще при выгрузке либы неплохо было бы байты восстанавливать в начале функции.
if (ul_reason_for_call == DLL_PROCESS_DETACH){
// код снятия перехвата
}
Последний раз редактировалось 0x0c0de; 13.09.2008 в 20:44..
|
|
|

13.09.2008, 21:18
|
|
Постоянный
Регистрация: 04.12.2007
Сообщений: 424
Провел на форуме: 2364957
Репутация:
479
|
|
Добавил:
PHP код:
if(ul_reason_for_call == DLL_PROCESS_DETACH )
{
hookoff();
}
...
PHP код:
void hookoff(void) {
WriteProcessMemory(GetCurrentProcess(), (void*)adrmesbox, (void*)&buf, 6, &written);
}
Изменил:
PHP код:
void intercept(void) {
DWORD oldf;
int prot;
adrmesbox = (DWORD)GetProcAddress(GetModuleHandleA("user32.dll"),"MessageBoxA");
if(adrmesbox == 0)
{
MessageBoxA(NULL, "MessageBoxA не найден", "ошибка", 0);
return;
}
prot = VirtualProtect((void*)adrmesbox,6,PAGE_EXECUTE_READWRITE,&oldf);
if (!prot) {
ExitProcess(0);
}
jump.op_push = 0x68;
jump.arg = (DWORD)&intMesbox;
jump.op_push = 0xC3;
ReadProcessMemory(GetCurrentProcess(), (void*)adrmesbox, (void*)buf, 6, &written);
WriteProcessMemory(GetCurrentProcess(), (void*)adrmesbox, (void*)&jump, 6, &written);
}
|
|
|

13.09.2008, 21:48
|
|
Познающий
Регистрация: 08.08.2008
Сообщений: 55
Провел на форуме: 369629
Репутация:
54
|
|
проверь что возвращают Read(Write)ProcessMemory, можт исчо привилегею потипу SeDebugPrivilege получить?
|
|
|

13.09.2008, 22:07
|
|
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
Провел на форуме: 4226446
Репутация:
1564
|
|
2ntldr
Ненене. мего глючный код.
Надо так
Код:
jump.op_push = 0x68;
jump.arg = (DWORD)&intMesbox;
jump.op_ret = 0xC3;
А вы сначала написали
Код:
jump.op_push = 0x68;
jump.arg = (DWORD)&intMesbox;
jump.op_push = 0xC3;
Разница налицо. Теперь все пашет, проверила под отладчиком
|
|
|

13.09.2008, 22:35
|
|
Постоянный
Регистрация: 04.12.2007
Сообщений: 424
Провел на форуме: 2364957
Репутация:
479
|
|
Спасибо большое) ошибка оказалась глупее чем все думали. пока что проверить возможности нет, тк свет вырубили, но уверен, чтоьпроблема решена.
|
|
|

15.09.2008, 12:14
|
|
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме: 2982851
Репутация:
107
|
|
Есть обычное простенькое серверное приложение принимающее через сокет и выводящее в бесконечном цикле с определенным условием выхода текст.Со всеми пложенными bind,listen,accept.Оно расчитано на подключение одного клиента.Допустим если я захочу добавить в цикл условие выхода с возвратом ожидания на listen,допустим я туда буду возвращатся с помощью goto .Собственно вопрос куда ставить метку на listen?И что при этом надо в памяти очистить что бы можно было повторно подключится?
|
|
|

15.09.2008, 12:22
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
если я правильно понял, то алгоритм таков тебе нужен:
accept - возвращает тебе сокет для работы с присоединившимся человеком.
затем ты запускаешь потом через CreateThread и передешь функции обработки этот самый дискриптор. И далее заново циклом на accept.
А функция которая работает в потоке - там делаешь свои дела юзая переданный в параметрах дискриптор.
|
|
|

15.09.2008, 13:36
|
|
Участник форума
Регистрация: 28.09.2005
Сообщений: 180
Провел на форуме: 749734
Репутация:
34
|
|
эээ...вообще для первоклассников вопрос
есть int x,y поменять местами значение x,y. если возможно без ввода дополнительных переменных, если нельзя, то ввести новые переменные.
тут два слова ответ..но какой? 
|
|
|

15.09.2008, 14:37
|
|
Moderator - Level 7
Регистрация: 21.03.2007
Сообщений: 1,200
Провел на форуме: 7134052
Репутация:
1204
|
|
есть int x,y поменять местами значение x,y. если возможно без ввода дополнительных переменных, если нельзя, то ввести новые переменные.
x = x + y;
y = x - y;
x = y - x;
как-то так =\
__________
как-то не так =\
Последний раз редактировалось iv.; 15.09.2008 в 14:54..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|