首页
社区
课程
招聘
[原创]SharpOD 反反调试插件 v0.6b (增加功能和修复BUG)
发表于: 2017-7-5 10:32 64349

[原创]SharpOD 反反调试插件 v0.6b (增加功能和修复BUG)

2017-7-5 10:32
64349
收藏
免费 22
支持
分享
最新回复 (105)
雪    币: 33
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
51
插件NB,帮助很大,一些资料  https://github.com/CoderAldrich/AntiDebug 
https://github.com/hfiref0x        /DSEFix          /UPGDSED      /TDL 
2017-11-19 21:12
0
雪    币: 1050
活跃值: (1137)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
52
启用该插件之后出现乱码。。
(Win10 x64 + FishcOD)
OS 名称:          Microsoft Windows 10 专业版
OS 版本:          10.0.16299 暂缺 Build 16299



2017-12-11 19:43
0
雪    币: 1036
活跃值: (1326)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
53
NewMai 启用该插件之后出现乱码。。(Win10 x64 + FishcOD)OS 名称:          Micro ...
请先看下说明好吗
2017-12-12 09:20
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
54
vmp  3.1.2版本  int3和硬件断点过不了,  “直接模拟wow64    syscall进内核”这个检测原理能详细说下嘛
2017-12-18 19:48
0
雪    币: 6669
活跃值: (4516)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
55
想知道楼主的  VMP  3.1(above)如何实现。
在内核下
       else  if  (ProcessDebugObjectHandle  ==  ProcessInformationClass)
       {
               if  ((NULL  !=  ProcessInformation)  &&  (MmIsAddressValid(ProcessInformation)))
               {
                       if  (NT_SUCCESS(status))
                       {
                               RtlZeroMemory(ProcessInformation,  ProcessInformationLength);
                       }

                       status  =  STATUS_PORT_NOT_SET;
               }

               if  (NULL  !=  ReturnLength)
               {
                       *ReturnLength  =  sizeof(HANDLE);
               }
       }
发现被XAntidebug2检测到了。
2017-12-19 20:21
0
雪    币: 6669
活跃值: (4516)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
56
NtSetInformationProcess:
if (ProcessBreakOnTermination == ProcessInformationClass)
	{
		if (ProcessInformationLength != sizeof(ULONG))
		{
			return STATUS_INFO_LENGTH_MISMATCH;
		}

		if (ProcessInformation == NULL)
		{
			return STATUS_ACCESS_VIOLATION;
		}

		AddQueryInfoBreak(ProcessHandle, *((ULONG *)ProcessInformation));
		return STATUS_SUCCESS;
	}
	else if (ProcessHandleTracing == ProcessInformationClass)
	{
		bool enable = ProcessInformationLength != 0;

		if (enable)
		{
			if (ProcessInformationLength != sizeof(ULONG) && ProcessInformationLength != (sizeof(ULONG) * 2))
			{
				return STATUS_INFO_LENGTH_MISMATCH;
			}

			if (ProcessInformation == NULL)
			{
				return STATUS_ACCESS_VIOLATION;
			}

			PPROCESS_HANDLE_TRACING_ENABLE_EX phtEx = (PPROCESS_HANDLE_TRACING_ENABLE_EX)ProcessInformation;

			if (phtEx->Flags != 0)
			{
				return STATUS_INVALID_PARAMETER;
			}
		}

		AddQueryInfoTracing(ProcessHandle, enable);
		return STATUS_SUCCESS;
	}
	else if (ProcessDebugFlags == ProcessInformationClass)
	{
		if (ProcessInformationLength != sizeof(ULONG))
		{
			return STATUS_INFO_LENGTH_MISMATCH;
		}

		if (ProcessInformation == NULL)
		{
			return STATUS_ACCESS_VIOLATION;
		}

		ULONG Flags = *(ULONG*)ProcessInformation;

		if ((Flags & ~PROCESS_DEBUG_INHERIT) != 0)
		{
			return STATUS_INVALID_PARAMETER;
		}

		ULONG uFlags = PROCESS_DEBUG_INHERIT;

		if ((Flags & PROCESS_DEBUG_INHERIT) != 0)
		{
			uFlags &= ~PROCESS_NO_DEBUG_INHERIT;
			AddQueryInfoFlags(ProcessHandle, uFlags);
		}
		else
		{
			uFlags |= PROCESS_NO_DEBUG_INHERIT;
			AddQueryInfoFlags(ProcessHandle, uFlags);
		}

		return STATUS_SUCCESS;
	}
NtQueryInformationProcess:
if (NT_SUCCESS(status) && (0 != ProcessInformation) && (0 != ProcessInformationLength))
	{
		ULONG backupReturnLength = 0;

		if ((ReturnLength != nullptr) &&
			((ULONG_PTR)ReturnLength >= (ULONG_PTR)ProcessInformation) &&
			((ULONG_PTR)ReturnLength <= (ULONG_PTR)ProcessInformation + ProcessInformationLength))
		{
			backupReturnLength = *ReturnLength;
		}

		if (ProcessDebugFlags == ProcessInformationClass)
		{
			ULONG uFlags = FindInfoFlags(ProcessHandle);

			*((ULONG *)ProcessInformation) = ((uFlags & PROCESS_NO_DEBUG_INHERIT) != 0) ? 0 : PROCESS_DEBUG_INHERIT;
		}
		else if (ProcessDebugObjectHandle == ProcessInformationClass)
		{
			*((HANDLE *)ProcessInformation) = 0;
			status = STATUS_PORT_NOT_SET;
		}
		else if (ProcessDebugPort == ProcessInformationClass)
		{
			*((HANDLE *)ProcessInformation) = 0;
		}
		else if (ProcessBasicInformation == ProcessInformationClass)
		{
			PEPROCESS pEprocess = (PEPROCESS)Search64Process("explorer.exe");
			HANDLE hPID = PsGetProcessId(pEprocess);

			((PPROCESS_BASIC_INFORMATION)ProcessInformation)->InheritedFromUniqueProcessId = (ULONG_PTR)hPID;
		}
		else if (ProcessBreakOnTermination == ProcessInformationClass)
		{
			*((ULONG *)ProcessInformation) = FindInfoBreak(ProcessHandle);
		}
		else if (ProcessHandleTracing == ProcessInformationClass)
		{
			if (FindInfoTracing(ProcessHandle))
			{
				status = STATUS_SUCCESS;
			}
			else
			{
				status = STATUS_INVALID_PARAMETER;
			}
		}

		if (backupReturnLength != 0)
		{
			*ReturnLength = backupReturnLength;
		}
	}
	else
	{
		if ((ProcessDebugObjectHandle == ProcessInformationClass) && (0 != ProcessInformationLength))
		{
			status = STATUS_PORT_NOT_SET;
		}
	}

搞定了,基本就这个套路,有兴趣的自己拿去研究吧。
如果做成插件,取消附加就被检测到了。
2017-12-20 00:29
0
雪    币: 1036
活跃值: (1326)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
57
yimingqpa 想知道楼主的 VMP 3.1(above)如何实现。 在内核下 else if (ProcessDebugObjectHandle == ProcessInformationClass) { ...
你看我发出来的  XAntiDebug  实现于源码,里面有  改进版的VMP3.1.2  检测方法。
2017-12-20 10:05
0
雪    币: 6669
活跃值: (4516)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
58
看过楼主的加强版2了,主要还是SE的硬件断点占坑和TP的很像。其它的早就已经撸过了……

楼主很巧妙的利用了ProcessDebugObjectHandle
第三个参数和第五个参数一样。(值不为长度检测)
第三个参数给空第四个参数给正常。(拿返回值检测)
2017-12-21 21:50
0
雪    币: 231
活跃值: (2631)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
59
v大的poc代码过pg很稳定,希望能把ssdt也一起干掉
2018-1-19 07:23
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
60
支持一个。
2018-1-19 14:44
0
雪    币: 231
活跃值: (2631)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
61
X64DBG最新版加载完驱动崩溃
ModLoad:  000007fe`db110000  000007fe`db1bb000      F:\x64dbg\release\x64\plugins\SharpOD  x64.dp64
Critical  error  detected  c0000374
(e18.27c4):  Break  instruction  exception  -  code  80000003  (first  chance)
ntdll!RtlReportCriticalFailure+0x2f:
00000000`77d3f3af  cc                            int          3
2018-1-21 00:39
0
雪    币: 1036
活跃值: (1326)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
62
我也不知道咋回事,x64dbg不加任何插件在WIN7上都崩溃。  给官方dump和录了视频也没回复。
2018-1-22 09:48
0
雪    币: 231
活跃值: (2631)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
63
StriveXjun 我也不知道咋回事,x64dbg不加任何插件在WIN7上都崩溃。 给官方dump和录了视频也没回复。
但是不加载你的驱动不使用内核功能的话就不会崩溃,
2018-1-23 05:34
0
雪    币: 965
活跃值: (89)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
64
感谢楼主的分享。
2018-1-23 11:26
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
65
谢谢
最后于 2018-3-23 14:00 被墨汁儿编辑 ,原因:
2018-3-23 14:00
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
66
楼主  se2.4.0貌似过不去了。。只用了sod和sharpod2个插件  程序会自动终止

仔细研究了一番发现好像是程序本身还会检测调试器,和se壳没关系。。搞错了
最后于 2018-4-25 13:35 被皓月苍穹之星编辑 ,原因:
2018-4-23 14:16
0
雪    币: 1036
活跃值: (1326)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
67
皓月苍穹之星 楼主&nbsp; se2.4.0貌似过不去了。。只用了sod和sharpod2个插件&nbsp; 程序会自动终止仔细研究了一番发现好像是程序本身还会检测调试器,和se壳没关系。。搞错了
不要勾选  protect  drx
2018-4-25 18:14
0
雪    币: 1169
活跃值: (396)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
68
压缩包损坏,请确认。。。
2018-7-31 17:40
0
雪    币: 5477
活跃值: (3864)
能力值: ( LV13,RANK:283 )
在线值:
发帖
回帖
粉丝
69
支持功能强大的插件。啥时候出个windbg版^_^
2018-7-31 18:47
0
雪    币: 142
活跃值: (278)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
70
赞一下,x86dbg顺利的过了
2018-8-7 10:45
0
雪    币: 231
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
71
解压密码多少
2018-8-22 22:06
0
雪    币: 231
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
72
Nethgul 解压密码多少
抱歉大牛 是我自己眼瞎- -  表示已经看到密码!
2018-8-22 22:34
0
雪    币: 221
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
73
太强大的插件,万分感谢楼主分享。
2018-9-13 23:25
0
雪    币: 122
活跃值: (117)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
74
压缩包损坏
2018-9-26 23:27
0
雪    币: 8329
活跃值: (4011)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
75
非常棒,希望一直更新下去
2018-9-27 07:09
0
游客
登录 | 注册 方可回帖
返回
//