[发明专利]一种反调试的方法有效
申请号: | 202010461206.X | 申请日: | 2020-05-27 |
公开(公告)号: | CN111814119B | 公开(公告)日: | 2021-03-19 |
发明(设计)人: | 吴建亮;胡鹏;张振林 | 申请(专利权)人: | 广州锦行网络科技有限公司 |
主分类号: | G06F21/14 | 分类号: | G06F21/14 |
代理公司: | 北京精金石知识产权代理有限公司 11470 | 代理人: | 杨兰兰 |
地址: | 510095 广东省广州*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 调试 方法 | ||
1.一种反调试的方法,其特征在于,包括如下步骤:
S1:对创建线程的函数设置Hook;
S2:在被保护程序中嵌入检测函数;
S3:当被保护程序被附加调试时,会调用步骤S1中所述的创建线程的函数,此时所述创建线程的函数由于被Hook而进入检测函数;
S4:检测函数执行所述创建线程的函数创建线程,所述创建线程的函数为步骤S3中被Hook的所述创建线程的函数;
S5:检测函数创建线程后,通过检测该线程的相关信息来判断是否被附加调试;如果判断结果为未被附加调试,则检测结束;否则如果判断结果为被附加调试,则结束步骤S4中创建的所述线程,检测结束;
所述线程的相关信息包括:线程的上下文指针和该线程的标志位。
2.根据权利要求1所述的方法,其特征在于,步骤S1中所述创建线程的函数为ntdll.dll模块里的RtlCreateUserThread()函数。
3.根据权利要求1所述的方法,其特征在于,步骤S5包括以下步骤:
S501:创建线程结束;
S502:检测当前线程的上下文指针ActivationContextStackPointer和当前线程的标志位SameTebFlags中的SkipThreadAttach和RanProcessInit;如果ActivationContextStackPointer=0,或者,SkipThreadAttach=1并且RanProcessInit=0,则认为被附加调试;如果不满足SkipThreadAttach=1并且RanProcessInit=0,同时ActivationContextStackPointer不等于0,则认为未被附加调试,其中,SkipThreadAttach指的是线程是否被附加调试,没被附加调试SkipThreadAttach为0;
S503:如果步骤S502中判断结果为未被附加调试,则检测结束;否则如果步骤S502中判断结果为被附加调试,则结束步骤S4中创建的所述线程,检测结束。
4.根据权利要求1所述的方法,其特征在于,步骤S1中由被保护程序对创建线程的函数设置Hook。
5.根据权利要求1所述的方法,其特征在于,步骤S5中,结束步骤S4中创建的所述线程之前,找到调试断点处,把断点“int3”指令改为“nop”指令。
6.根据权利要求1所述的方法,其特征在于,步骤S5中,结束步骤S4中创建的所述线程之前,修改内存属性为不可写。
7.根据权利要求1所述的方法,其特征在于,步骤S3中,通过GetProcessAddress()函数获取创建线程的函数的地址。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于广州锦行网络科技有限公司,未经广州锦行网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010461206.X/1.html,转载请声明来源钻瓜专利网。