/
MadDAD
/
alterplast
Обзор
Документация
Войти
/
MadDAD
/
alterplast
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
openconf_src/HackVirtual.cpp
63 строки
1 KB
trdm
24 мар 2017, 13:27
24 мар 2017, 13:27
886e846
Код
Авторство
О чём код?
// HackVirtual.cpp: implementation of the CTrapVirtual class. #include "stdafx.h" #include "HackVirtual.h" CTrapVirtual::CTrapVirtual() { m_pVtable=NULL; m_pRealAdress=NULL; } CTrapVirtual::~CTrapVirtual() { UnTrap(); } void CTrapVirtual::SetTrap(void* pObject,int offset,AFX_PMSG pFunc) { m_pVtable=*(AFX_PMSG**)pObject; m_pVtable+=offset; DWORD old; VirtualProtect(m_pVtable,4,PAGE_EXECUTE_READWRITE,&old); m_pRealAdress=*m_pVtable; *m_pVtable=pFunc; } void CTrapVirtual::UnTrap() { if(!m_pVtable) return; *m_pVtable=m_pRealAdress; m_pVtable=NULL; } static void SetTrap(CTrapSwap* pTrap,void* pNewFunc) { if(!pTrap->m_pFuncTrapped.pFunc) return; DWORD old; VirtualProtect(pTrap->m_pFuncTrapped.pFunc,8,PAGE_EXECUTE_READWRITE,&old); // ��������� ����� �� ����� ����� ������� BYTE* p=(BYTE*)&pTrap->m_SwapBuf; *p++=0xE9; *(DWORD*)p=((DWORD)pNewFunc)-((DWORD)pTrap->m_pFuncTrapped.pFunc)-5; // � ��������� � ������ ������� �������������� ����� pTrap->Swap(); } void CTrapSwap::SetTrap(LPCTSTR dll,LPCTSTR func,void* pNewFunc) { HINSTANCE hInst=GetModuleHandle(dll); if(!hInst) return; m_pFuncTrapped.pFunc=GetProcAddress(hInst,func); ::SetTrap(this,pNewFunc); } void CTrapSwap::SetTrapOnImportFunc(void *pOldFunc, void *pNewFunc) { char* ptr=(char*)pOldFunc; ptr+=2; m_pFuncTrapped.pFunc=(void*)**(DWORD**)ptr; ::SetTrap(this,pNewFunc); }