|
[分享]Win7 x64禁止终止进程保护驱动代码
好文,学习了 |
|
[讨论]为什么搞安全工资不如搞前端开发滴高?
搞前端的比高低层的多了去了。关键是看市场需求。打铁还需自身硬,牛逼了薪水自然就上去了 |
|
[原创]Windows内核源码详尽分析
受教了,有几处笔误,无伤大雅 |
|
[原创]我的学写外挂之路
激情依旧还在,只是没有以前那么强烈了 |
|
我做为一名程序员,在计算机软件这个行业的成长道路
不予置评,25岁+就开不得玩笑?认真你就输了 |
|
我做为一名程序员,在计算机软件这个行业的成长道路
膜拜大牛,楼主,你这么牛X,你妈妈知道吗? |
|
[原创]一年了互联网摸爬滚打的个人感想
加油吧,楼主,"先有深度再有广度。往一个方向发展",能看到这点,离你走上正途也就不远了.我也是自学,中间走过了太多太多的弯路.楼主还年轻,不必妄自菲薄,也切忌好高骛远.Come On |
|
[原创][分享]冷饭热炒 - 再读Windows对象管理
mark再来看 |
|
[原创]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 }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值