逆向笔记3
来源:互联网 发布:java语言编译器win10 编辑:程序博客网 时间:2024/05/19 13:45
反调试技术
静态调试技术
1,PEB结构体信息可以判断当前进程是否处于反调试技术
#1,Beingdebugged(+0X2),破解之法,将PEB.BeingdeBugged值修改为0(FALSE)即可。
#2,Ldr(+OXC),破解之法,只要将0xFEEEFEEE值的区域全部覆写为NULL即可。
#3,ProcessHeap(+0x18),破解之法,只要将HEAP.Flags与HEAP.ForceFlags的值重新设置为2与0即可
#4,NtGlobalFlag(+0x68),破解之法,重设PEB.NtGlobalFlag的值为0即可
#5,NtQueryInformationProcess()API,破解之法ProcessInforamtionClass参数值分别修改为0,0,1.
#6,NtQuerySystemInformation(),破解之法,WinXp下编boot.ini文件,删除“/debugport=com1/baudre=115200/Debug”值。在Windows7系统的命令行窗口执行“bcdedit/debug off”命令即可。
#7,NtQueryObject(),破解之法,ntdll.ZwQueryObject()API,查看栈,第二个参数的值为ObjectAllTypesInformation(3),将该值修改为0。
#ZwSetInformationThread(),破解之法,查找存储在栈中的第二个参数ThreadInformationClass值,若其值为ThreadHideFromDebugger(0x11),则修改为0.
#8,ETC,破解之法,使用NULL覆盖WindowsClass名称字符串缓冲区。将GetDesktopWindows()与GetWindows()API的返回值修改为NULL值或FindWindows()API与GetWindows()API
动态调试技术
1,SEH,
#1,SEH的异常处理,破解之法,用OD设置忽略被调试进程中发生的异常。
#2,SEH未处理或注册的SEH根本不存在,此时会调用执行系统的kernel32!UnhandledExceptionFilter()API,(kernel32!UnhandledExceptionFilter()API内部调用了ntdll!NtQueryInformationProcessAPI,以判断是否正在调试进程。若进程正常运行(非调试运行),则运行系统最后的异常处理器;若进程处于调试中,则将异常派送给调试器)破解之法,通过kernel32!SetUnhandledExceptionFilter()可以修改系统最后的异常处理器(TopLevelExceptionFilter)
2,ThmingCheck,破解之法,直接操作获取的时间信息或比较时间的语句即可。
#1,RDTSC,是一条汇编指令,用来将TSC值读入EDX:EAX寄存器(TSC为64位,其高32位保存至EDX寄存器,低32位被保存至EAX寄存器),两次调用RDTSC之间有一定的时间间隔。通过计算时间间隔来判断进程是否处于反调试状态。
破解之法,##1,不用跟踪指令,直接使用RUN越过相关代码。##2,操作第二个RDTSC的结果值(EDX:EAX),使之与第一个结果值相同,从而顺利通过CMP语句。
##3,操作条件分支指令(CMP/Jcc),将CF与ZF之一的值修改为1,JA指令即失效。
##4,利用内核模式驱动程序使RDTSC指令失效。
3,陷阱标志,指EFLAGS寄存器的第九个(Index8)比特位
4,OxCC,断点对应的X86指令为0xCC ,若能检测到该指令,即可判断是否处于调试状态。
#1,比较特定代码区域的校验和值
高级反调试技术
1,垃圾代码
2,扰乱代码对齐
静态调试技术
1,PEB结构体信息可以判断当前进程是否处于反调试技术
#1,Beingdebugged(+0X2),破解之法,将PEB.BeingdeBugged值修改为0(FALSE)即可。
#2,Ldr(+OXC),破解之法,只要将0xFEEEFEEE值的区域全部覆写为NULL即可。
#3,ProcessHeap(+0x18),破解之法,只要将HEAP.Flags与HEAP.ForceFlags的值重新设置为2与0即可
#4,NtGlobalFlag(+0x68),破解之法,重设PEB.NtGlobalFlag的值为0即可
#5,NtQueryInformationProcess()API,破解之法ProcessInforamtionClass参数值分别修改为0,0,1.
#6,NtQuerySystemInformation(),破解之法,WinXp下编boot.ini文件,删除“/debugport=com1/baudre=115200/Debug”值。在Windows7系统的命令行窗口执行“bcdedit/debug off”命令即可。
#7,NtQueryObject(),破解之法,ntdll.ZwQueryObject()API,查看栈,第二个参数的值为ObjectAllTypesInformation(3),将该值修改为0。
#ZwSetInformationThread(),破解之法,查找存储在栈中的第二个参数ThreadInformationClass值,若其值为ThreadHideFromDebugger(0x11),则修改为0.
#8,ETC,破解之法,使用NULL覆盖WindowsClass名称字符串缓冲区。将GetDesktopWindows()与GetWindows()API的返回值修改为NULL值或FindWindows()API与GetWindows()API
动态调试技术
1,SEH,
#1,SEH的异常处理,破解之法,用OD设置忽略被调试进程中发生的异常。
#2,SEH未处理或注册的SEH根本不存在,此时会调用执行系统的kernel32!UnhandledExceptionFilter()API,(kernel32!UnhandledExceptionFilter()API内部调用了ntdll!NtQueryInformationProcessAPI,以判断是否正在调试进程。若进程正常运行(非调试运行),则运行系统最后的异常处理器;若进程处于调试中,则将异常派送给调试器)破解之法,通过kernel32!SetUnhandledExceptionFilter()可以修改系统最后的异常处理器(TopLevelExceptionFilter)
2,ThmingCheck,破解之法,直接操作获取的时间信息或比较时间的语句即可。
#1,RDTSC,是一条汇编指令,用来将TSC值读入EDX:EAX寄存器(TSC为64位,其高32位保存至EDX寄存器,低32位被保存至EAX寄存器),两次调用RDTSC之间有一定的时间间隔。通过计算时间间隔来判断进程是否处于反调试状态。
破解之法,##1,不用跟踪指令,直接使用RUN越过相关代码。##2,操作第二个RDTSC的结果值(EDX:EAX),使之与第一个结果值相同,从而顺利通过CMP语句。
##3,操作条件分支指令(CMP/Jcc),将CF与ZF之一的值修改为1,JA指令即失效。
##4,利用内核模式驱动程序使RDTSC指令失效。
3,陷阱标志,指EFLAGS寄存器的第九个(Index8)比特位
4,OxCC,断点对应的X86指令为0xCC ,若能检测到该指令,即可判断是否处于调试状态。
#1,比较特定代码区域的校验和值
高级反调试技术
1,垃圾代码
2,扰乱代码对齐
0 0
- 逆向笔记3
- 逆向笔记
- 逆向笔记
- Android学习笔记3--逆向1--Dex
- Android学习笔记3--逆向2--Smali
- 逆向工程学习笔记
- 逆向QBasic7.1笔记
- 逆向扫雷笔记
- 驱动逆向学习笔记
- Python逆向工程笔记
- 逆向工程学习笔记
- 逆向笔记【壹】
- 逆向笔记【贰】
- 逆向笔记【贰】
- ios逆向笔记
- 逆向初级笔记
- 逆向笔记<1>
- 逆向笔记2
- 0基础学爬虫(视频)解决BTS过程
- scp -r拷贝目录(其中有软链)之坑------被404问题折腾一个晚上啊!!!
- 设置tomcat默认启动项目
- 逆向笔记2
- js与php对象数组的不同点分析以及怎样应用json数据
- 逆向笔记3
- 无法查找或打开 PDB 文件解决办法
- Codeforces-----233B---Non-square Equation暴力枚举
- Deep Learning Libraries by Language
- 结束Activity
- 关于Div弹出层无法取值的解决方法
- java集合类概述(学习笔记)
- NDK配置常见错误及解决
- tomcat系列-04-启用APR