能力值:
( LV6,RANK:90 )
|
-
-
2 楼
要发代码 就发全
|
能力值:
( LV15,RANK:520 )
|
-
-
3 楼
来膜拜我了?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
if(Handles->Information[i].ObjectTypeNumber == 0x8)
这个索引值不同系统不同,这样不大可靠
应该先创建一个debugport句柄获取 ObjectTypeNumber
|
能力值:
( LV6,RANK:90 )
|
-
-
5 楼
*****!你给kernelMode打开看看你的东西还能跑不?
我做的是一些列的,就算你开启KernelMode也可以过啊
没有这个技术 就别逞这个能
|
能力值:
( LV6,RANK:90 )
|
-
-
6 楼
竟然还挑衅我
|
能力值:
( LV6,RANK:90 )
|
-
-
7 楼
也可能我才疏学浅 你没有给出能跑的代码
我替你整了一下
如果是如下代码 那肯定过不了sod的kernelMde,还有你的代码检测到我的vs2008了,但是closehandle后异常了,我也难得理睬了
#include <stdio.h>
#include <shlwapi.h>
#include "PEInfo.h"
#pragma comment(lib,"shlwapi")
typedef NTSYSAPI NTSTATUS (NTAPI *ZWQUERYSYSTEMINFORMATION)(
IN ULONG SystemInformationClass,
IN PVOID SystemInformation,
IN ULONG SystemInformationLength,
OUT PULONG ReturnLength);
DWORD OldProtect=0;
DWORD NewProtect=0;
typedef struct _SYSTEM_HANDLE_INFORMATION
{
ULONG ProcessId;
UCHAR ObjectTypeNumber;
UCHAR Flags;
USHORT Handle;
PVOID Object;
ACCESS_MASK GrantedAccess;
}SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
typedef struct _SYSTEM_HANDLE_INFORMATION_EX
{
ULONG NumberOfHandles;
SYSTEM_HANDLE_INFORMATION Information[1];
}SYSTEM_HANDLE_INFORMATION_EX, *PSYSTEM_HANDLE_INFORMATION_EX;
#define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0)
void KillPeHeader()
{
char *pBaseAddr = (char*)GetModuleHandle(NULL);
VirtualProtect(pBaseAddr, 0x1000,PAGE_READWRITE, &OldProtect);
ZeroMemory(pBaseAddr, 0x1000);
VirtualProtect(pBaseAddr, 0x1000,PAGE_NOACCESS, &NewProtect);
}
//anti debug
bool KillDebugHandle()
{
ULONG* pHandleInfor = NULL;
NTSTATUS ntStatus;
ZWQUERYSYSTEMINFORMATION ZwQuerySystemInformation = NULL;
ULONG ulSize = 0x4000;
HMODULE hHanlde = GetModuleHandle(L"ntdll.dll");
if(NULL == hHanlde) return false;
ZwQuerySystemInformation = (ZWQUERYSYSTEMINFORMATION)GetProcAddress(hHanlde, "ZwQuerySystemInformation");
if(NULL == ZwQuerySystemInformation) return false;
do
{
pHandleInfor = (ULONG*)malloc(ulSize);
if(NULL == pHandleInfor) return false;
ntStatus = ZwQuerySystemInformation(16,pHandleInfor,ulSize,NULL);
if(!NT_SUCCESS(ntStatus))
{
free(pHandleInfor);
ulSize = ulSize * 2;
if(ulSize > 0x4000000) return false;
}
}while(!NT_SUCCESS(ntStatus));
PSYSTEM_HANDLE_INFORMATION_EX Handles = (PSYSTEM_HANDLE_INFORMATION_EX)pHandleInfor;
if(NULL == Handles) return false;
for(ULONG i = 0; i < Handles->NumberOfHandles; i++)
{
if(GetCurrentProcessId() != Handles->Information[i].ProcessId)
{
if(Handles->Information[i].ObjectTypeNumber == 0x8) // Handle Type "DebugObject"
{
MessageBox(GetActiveWindow(),L"run debugger",L"run debugger",MB_OK);
CloseHandle((HANDLE)Handles->Information[i].Handle);
break;
}
}
}
free(Handles);
return true;
}
int main()
{
KillDebugHandle();
return 0;
}
|
能力值:
( LV15,RANK:520 )
|
-
-
8 楼
哥懒得和你讲,哥还要上班,还要写代码,我挑衅你?你想多了.
|
能力值:
( LV15,RANK:520 )
|
-
-
9 楼
BTW:这份代码肯定是我测试过才敢发出来的.
|
能力值:
( LV15,RANK:520 )
|
-
-
10 楼
[QUOTE=elianmeng;1161617]膜拜个狗屁啊!你给kernelMode打开看看你的东西还能跑不?
我做的是一些列的,就算你开启KernelMode也可以过啊
没有这个技术 就别逞这个能[/QUOTE]
说脏话,留个证据.
|
能力值:
( LV6,RANK:90 )
|
-
-
11 楼
我用原版的od sod打上kenelMode 你的检测真的没有用啊
让我怎么膜拜你啊
|
能力值:
( LV13,RANK:400 )
|
-
-
12 楼
[QUOTE=loqich;1161614]if(Handles->Information[i].ObjectTypeNumber == 0x8)
这个索引值不同系统不同,这样不大可靠
应该先创建一个debugport句柄获取 ObjectTypeNumber[/QUOTE]
说的对。
你这里直接hardcode一个值问题很大。
楼主可以用WinObj查看一下ObjectTypes
在xp下面和win7下面是ObjectType的数量是不一样的,没有探究过有没有影响之前的index值。
另外:
过不过调试器还要看是怎么调的,就如楼主这样一个函数,你说你放在哪里去调用呢?如果你放在main函数里面那就几乎跟没反调措施一样,多trace几回就知道反调代码在哪里启动了。
退一步说你放在mainCRTStartup里面还是能被Trace出来。
如果能做到你的反调措施在exe的image加载之前就生效就比较可靠了。
|
能力值:
(RANK:350 )
|
-
-
13 楼
- 对海风大侠很尊敬,没别的意思,请不要介意. [CODE]namespace AntiDebug { void KillPeHeader() ……
即发出来就不要删除了。
这个回帖同样送给你:
http://bbs.pediy.com/showpost.php?p=1161675&postcount=11
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
DT吃饱了撑着。。。。
|
能力值:
( LV3,RANK:20 )
|
-
-
15 楼
分享即是美。。
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
又是一个老虎屁股,哈哈。。。
|
|
|