|
|
[分享]Win7 x64禁止终止进程保护驱动代码
好文,学习了 |
|
|
[讨论]为什么搞安全工资不如搞前端开发滴高?
搞前端的比高低层的多了去了。关键是看市场需求。打铁还需自身硬,牛逼了薪水自然就上去了 |
|
|
[原创]Windows内核源码详尽分析
受教了,有几处笔误,无伤大雅 |
|
|
[原创]我的学写外挂之路
激情依旧还在,只是没有以前那么强烈了 |
|
|
我做为一名程序员,在计算机软件这个行业的成长道路
不予置评,25岁+就开不得玩笑?认真你就输了 |
|
|
我做为一名程序员,在计算机软件这个行业的成长道路
膜拜大牛,楼主,你这么牛X,你妈妈知道吗? |
|
|
[原创]一年了互联网摸爬滚打的个人感想
加油吧,楼主,"先有深度再有广度。往一个方向发展",能看到这点,离你走上正途也就不远了.我也是自学,中间走过了太多太多的弯路.楼主还年轻,不必妄自菲薄,也切忌好高骛远.Come On |
|
|
|
|
|
[原创]Hackshield内幕
进来学习 |
|
|
|
|
|
[原创][分享]冷饭热炒 - 再读Windows对象管理
mark再来看 |
|
|
[原创]一款程序多开器的逆向与实现(带源码)
思路很犀利。。。 |
|
|
[原创]浅谈windows下的隐藏
不错,支持 |
|
|
[原创]DLL自卸载无模块注入源码(一)
学习学习 |
|
|
[原创]ring3下的IAT HOOK
附一个修改版+测试代码
BOOL IATHook( IN HMODULE hModule, IN LPCTSTR pImageName, IN LPCVOID pTargetFuncAddr, IN LPCVOID pReplaceFuncAddr )
{
IMAGE_DOS_HEADER* pImgDosHdr = ( IMAGE_DOS_HEADER* )hModule;
IMAGE_OPTIONAL_HEADER* pImgOptHdr = ( IMAGE_OPTIONAL_HEADER* )( ( DWORD )hModule + pImgDosHdr->e_lfanew + 24 );
IMAGE_IMPORT_DESCRIPTOR* pImgImportDes = ( IMAGE_IMPORT_DESCRIPTOR* )( ( DWORD )hModule + pImgOptHdr->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress );
IMAGE_THUNK_DATA* pImgThunkData = NULL;
wstring TargetLibraryName;
DWORD Value = 0;
DWORD OldProtect = 0;
DWORD NewProtect = 0;
LPDWORD FuncAddress = NULL;
while ( pImgImportDes->Characteristics != 0 )
{
USES_CONVERSION;
LPCTSTR lpszName = A2W( ( ( LPCSTR )( DWORD )hModule + pImgImportDes->Name ) );
TargetLibraryName = lpszName;
if ( TargetLibraryName.compare( pImageName ) == 0 )
{
pImgThunkData = ( IMAGE_THUNK_DATA* )( ( DWORD )hModule + pImgImportDes->FirstThunk );
break;
}
pImgImportDes++;
}
if ( pImgThunkData == NULL )
{
return FALSE;
}
while ( pImgThunkData->u1.Function )
{
//循环查找目标函数地址所在的位置
FuncAddress = ( LPDWORD ) & ( pImgThunkData->u1.Function );
if ( *FuncAddress == ( DWORD )pTargetFuncAddr )
{
//找到目标函数的地址,然后修改为钩子函数的地址
VirtualProtect( FuncAddress, sizeof( DWORD ), PAGE_READWRITE, &OldProtect );
if ( !WriteProcessMemory( ( HANDLE ) - 1, FuncAddress, &pReplaceFuncAddr, 4, NULL ) )
{
return FALSE;
}
VirtualProtect( FuncAddress, sizeof( DWORD ), OldProtect, 0 );
return TRUE;
}
pImgThunkData++;
}
return FALSE;
}
typedef int ( WINAPI* SysMessageBoxW )( HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType );
SysMessageBoxW g_MessageBoxW = 0;
int WINAPI MyMessageBoxW( HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType )
{
return g_MessageBoxW( NULL, _T( "hello world" ), _T( "caption" ), MB_OK );
}
BOOL Rookits(HMODULE hModule,LPCTSTR pImageName,LPCSTR pTargetFuncName)
{
HMODULE hLib = LoadLibrary( pImageName );
if ( NULL != hLib )
{
g_MessageBoxW = ( SysMessageBoxW )GetProcAddress( hLib, pTargetFuncName );
BOOL bRet = IATHook( hModule, pImageName, g_MessageBoxW, MyMessageBoxW );
FreeLibrary( hLib );
return bRet;
}
return FALSE;
}
void Test()
{
Rookits( GetModuleHandle( NULL ), _T( "USER32.dll" ), ( "MessageBoxW" ) );
MessageBox( NULL, _T( "h" ), 0, 0 );
}
|
|
|
[原创]ring3下的IAT HOOK
细节问题还有,pImageImportDescriptor->Name 是ansi字符串,强转为LPCTSTR会有问题的。得用A2W转一下 |
|
|
[原创]ring3下的IAT HOOK
不错不错。。。 |
|
|
[原创]VS2012 ddk驱动编译与虚拟机联机调试设置(已更新)
额。wdk8.1编译出来的驱动只能运行在vista以后的OS上吧?要支持xp还得用ddk? |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
勋章
兑换勋章
证书
证书查询 >
能力值