当前位置: 首页 > news >正文

建设银行网站可以打印流水吗手机网游

建设银行网站可以打印流水吗,手机网游,网上互联网推广,网站建设惠州在调试一些病毒程序的时候#xff0c;可能会碰到一些反调试技术#xff0c;也就是说#xff0c;被调试的程序可以检测到自己是否被调试器附加了#xff0c;如果探知自己正在被调试#xff0c;肯定是有人试图反汇编之类的方法破解自己。为了了解如何破解反调试技术#xf…  在调试一些病毒程序的时候可能会碰到一些反调试技术也就是说被调试的程序可以检测到自己是否被调试器附加了如果探知自己正在被调试肯定是有人试图反汇编之类的方法破解自己。为了了解如何破解反调试技术首先我们来看看反调试技术。 一、Windows API 方法 Win32 提供了两个 API IsDebuggerPresent 和 CheckRemoteDebuggerPresent 可以用来检测当前进程是否正在被调试以IsDebuggerPresent 函数为例例子如下 BOOL ret IsDebuggerPresent();printf(ret %d\n, ret); 破解方法很简单就是在系统里将这两个函数 hook 掉让这两个函数一直返回 false 就可以了网上有很多做 hook API 工作的工具也有很多工具源代码是开放的所以这里就不细谈了。 二、查询进程 PEB 的 BeingDebugged 标志位 当进程被调试器所附加的时候操作系统会自动设置这个标志位因此在程序里定期查询这个标志位就可以了例子如下 bool PebIsDebuggedApproach() {char result 0;__asm{// 进程的PEB地址放在fs这个寄存器位置上mov eax, fs:[30h]// 查询BeingDebugged标志位mov al, BYTE PTR [eax 2] mov result, al}return result ! 0; } 三、查询进程 PEB 的 NtGlobal 标志位  跟第二个方法一样当进程被调试的时候操作系统除了修改 BeingDebugged 这个标志位以外还会修改其他几个地方其中NtDll 中一些控制堆Heap操作的函数的标志位就会被修改因此也可以查询这个标志位例子如下 bool PebNtGlobalFlagsApproach() {int result 0;__asm{// 进程的PEBmov eax, fs:[30h]// 控制堆操作函数的工作方式的标志位mov eax, [eax 68h]// 操作系统会加上这些标志位FLG_HEAP_ENABLE_TAIL_CHECK, // FLG_HEAP_ENABLE_FREE_CHECK and FLG_HEAP_VALIDATE_PARAMETERS// 它们的并集就是x70//// 下面的代码相当于C/C的// eax eax 0x70and eax, 0x70mov result, eax}return result ! 0;} 四、查询 进程堆 的一些 标志位 这个方法是第三个方法的变种只要进程被调试进程在堆上分配的内存在分配的堆的头信息里ForceFlags 这个标志位会被修改因此可以通过判断这个标志位的方式来反调试。因为进程可以有很多的堆因此只要检查任意一个堆的头信息就可以了所以这个方法貌似很强大例子如下 bool HeapFlagsApproach() {int result 0;__asm{// 进程的PEBmov eax, fs:[30h]// 进程的堆我们随便访问了一个堆下面是默认的堆mov eax, [eax 18h]// 检查ForceFlag标志位在没有被调试的情况下应该是mov eax, [eax 10h]mov result, eax}return result ! 0; } 五、使用 NtQueryInformationProcess 函数 NtQueryInformationProcess 函数是一个未公开的 API它的第二个参数可以用来查询进程的调试端口。如果进程被调试那么返回的端口值会是 -1否则就是其他的值。由于这个函数是一个未公开的函数因此需要使用 LoadLibrary 和 GetProceAddress的方法获取调用地址示例代码如下 // 声明一个函数指针。typedef NTSTATUS (WINAPI *NtQueryInformationProcessPtr)(HANDLE processHandle,PROCESSINFOCLASS processInformationClass,PVOID processInformation,ULONG processInformationLength,PULONG returnLength);bool NtQueryInformationProcessApproach() {int debugPort 0;HMODULE hModule LoadLibrary(TEXT(Ntdll.dll ));NtQueryInformationProcessPtr NtQueryInformationProcess (NtQueryInformationProcessPtr)GetProcAddress(hModule, NtQueryInformationProcess);if ( NtQueryInformationProcess(GetCurrentProcess(), (PROCESSINFOCLASS)7, debugPort, sizeof(debugPort), NULL) )printf([ERROR NtQueryInformationProcessApproach] NtQueryInformationProcess failed\n);elsereturn debugPort -1;return false;} 六、NtSetInformationThread 方法 这个也是使用 Windows 的一个未公开函数的方法你可以在当前线程里调用 NtSetInformationThread调用这个函数时如果在第二个参数里指定 0x11 这个值意思是 ThreadHideFromDebugger 等于告诉操作系统将所有附加的调试器统统取消掉。示例代码: // 声明一个函数指针。typedef NTSTATUS (*NtSetInformationThreadPtr)(HANDLE threadHandle,THREADINFOCLASS threadInformationClass,PVOID threadInformation,ULONG threadInformationLength);void NtSetInformationThreadApproach() {HMODULE hModule LoadLibrary(TEXT(ntdll.dll));NtSetInformationThreadPtr NtSetInformationThread (NtSetInformationThreadPtr)GetProcAddress(hModule, NtSetInformationThread);NtSetInformationThread(GetCurrentThread(), (THREADINFOCLASS)0x11, 0, 0);} 七、触发异常的方法 这个技术的原理是首先进程使用 SetUnhandledExceptionFilter 函数注册一个未处理异常处理 函数A如果进程没有被调试的话那么触发一个未处理异常会导致操作系统将控制权交给先前注册的函数A而如果进程被调试的话那么这个未处理异常会被调试器捕捉这样我们的 函数A 就没有机会运行了。 这里有一个技巧就是触发未处理异常的时候如果跳转回原来代码继续执行而不是让操作系统关闭进程。方案是在函数A里修改eip的值因为在 函数A 的 参数 _EXCEPTION_POINTERS 里会保存当时触发异常的指令地址所以在 函数A 里根据这个指令地址修改 寄存器eip 的值就可以了示例代码如下 // 进程要注册的未处理异常处理程序A LONG WINAPI MyUnhandledExceptionFilter(struct _EXCEPTION_POINTERS *pei) {SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)pei-ContextRecord-Eax);// 修改寄存器eip的值pei-ContextRecord-Eip 2;// 告诉操作系统继续执行进程剩余的指令指令保存在eip里而不是关闭进程return EXCEPTION_CONTINUE_EXECUTION; }bool UnhandledExceptionFilterApproach() {SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);__asm{// 将eax清零xor eax, eax// 触发一个除零异常div eax}return false;} 八、调用 DeleteFiber 函数 如果给 DeleteFiber 函数传递一个无效的参数的话DeleteFiber函数除了会抛出一个异常以外还是将进程的LastError值设置为具体出错原因的代号。然而如果进程正在被调试的话这个LastError值会被修改因此如果调试器绕过了第七步里讲的反调试技术的话我们还可以通过验证LastError值是不是被修改过来检测调试器的存在示例代码 bool DeleteFiberApproach() {char fib[1024] {0};// 会抛出一个异常并被调试器捕获DeleteFiber(fib);// 0x57的意思是ERROR_INVALID_PARAMETERreturn (GetLastError() ! 0x57); }
http://www.yutouwan.com/news/137152/

相关文章:

  • 网站建设公司相关资质石家庄 最新
  • 建个简单网站山东新增5个高风险地区
  • 包头网站作风建设年自评材料必应网站建设
  • 如何建设论坛网站福州网站建设的公司
  • 做期货看啥子网站人工智能绘画
  • 免费建站cmspython新手代码
  • 定制 网站潍坊网站制作厂家
  • 软件系统网站建设产品网站建站
  • 重庆奉节网站建设公司哪家好优普南通网站建设
  • 沈阳设计网站网站开发简介
  • 最便宜的外贸网站建设注册安全工程师考试题库及答案
  • 百度新站关键词排名网站建设吕凡科技
  • 济南智能网站建设咨询电话松原做网站平台
  • 苏州企业网站建站品牌形象网站建设
  • 北京联通网站备案软件开发专业专科
  • 网站建设与管理教学视频下载广东seo网站设计多少钱
  • 淘宝客做的好的几个网站拓者设计官网网页版
  • 网站怎么做下拉刷新页面数据网站整站下载带数据库后台的方法
  • 苏州官方网站建站白嫖永久服务器
  • 网站开发 云智互联网站备案费用
  • 重庆网站建设就找承越网站建设培训速成
  • 太原关键词排名首页江苏搜索引擎优化
  • 网站建设找实体还是淘宝会员积分系统
  • 网站开发电话wordpress图片和相册
  • 网站建设的背景及意义佛山新网站制作渠道
  • 佛山网站优化有wordpress自动切换手机主题
  • H5网站建设报价多少网站免费大全
  • 网站备案格式嵌入式软件开发前景怎么样
  • 网站建设中外链与内链的技巧计算机网络技术电商网站建设与运营方向
  • 山西做网站流程步骤免费网站推广软件下载大全