首页
社区
课程
招聘
[原创]Ryuk勒索病毒反调试记录
发表于: 2020-11-4 16:36 3614

[原创]Ryuk勒索病毒反调试记录

2020-11-4 16:36
3614


反调试属于反逆向技术,顾名思义,你想逆我的程序,我给你加点料,至少让你没有那么顺利。反调试针对的是调试器,在分析Ryuk勒索病毒的时候遇到一次反调试,记录一下。




进入程序一开始就遇到了ZwQueryInformationProcess,通过网页端的MSDN查询发现没有多少参考信息,无奈只能寻求网页相关文章。最终找到关于这个API函数的一些重要信息(以下来源于网络):



该函数第二个参数ProcessInformationClass设定特定的值,函数执行结果会保存在第三个参数ProcessInformation中。第二个参数为枚举类型,其中与反调试相关的参数有ProcessDebugPort(0x07),ProcessDebugObject-Handle(0x1E),ProcessDebugFlags(0x1F)。




第一次调用ZwQueryInformationProcess,使用了0x1F作为第二个参数值,通过查询实际为ProcessDebugFlags。ProcessDebugFlags (0x1F)参数返回EPROCESS结构体的NoDebugInherit的相反数,意思是当调试器存在时, 返回值为0, 不存在时则返回1。

结果为1,表明此时不存在调试器(实质此时正在调试)。



接着使用了PEB作为反调试的手段,如使用FS:[30]寻址PEB,偏移加2找到BeingDebugged(+0x2),同样的可以通过IsDebuggerPresent() API可以获取PEB.BeingDebugged的值,若为1则表示进程处于被调试状态,由于ollydbg自身带有的插件对该反调试进行了限制,所以基本不用理会,会自动置为0。




随着慢慢的调试,第二次也调用ZwQueryInformationProcess,使用了0x7作为第二个参数值,通过查询实际为ProcessDebugPort。

ProcessDebugPort(0x7),非调试状态下debugport等于0,由于第三个参数的地址存在异常,执行完后并不能如期获得结果,不过这里是故意触发异常,但由于该异常后续没有被人为处理,此处并不影响后续的调试。




[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 7104
活跃值: (3166)
能力值: ( LV4,RANK:52 )
在线值:
发帖
回帖
粉丝
2
学习了!
2020-11-4 18:27
0
游客
登录 | 注册 方可回帖
返回
//