黃易群俠傳M脫機外掛應用程式黃易神行
12648
8

[原創] 越過XTRAP教學

白步2005 發表於 2011-11-30 19:58:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |
越過XTRAP教學
by desinner
2011/11/30
這篇文章不是供新手閱讀的
在所有XTRAP 功能中, 最煩擾的是SSDT hook
修改內存是駭客最常用的方法, 因這是最直接修改遊戲資料
但就因為SSDT hook, 大多有關內存的api 也會被HOOK掉
當你嘗試用一些關於內存的API, 像openprocess, 這個api 就會調用ssdt的table中NtOpenProcess 進入Ring0
Xtrap 不會hook OpenProcess, 但會hook NtOpenProcess, 透過修改ssdt api基址。
這是ssdt 所hook 的api:
NtOpenProcess
NtDeviceIoControlFile
NtWriteVirtualMemory
NtOpenSection
NtProtectVirtualMemory
NtTerminateProcess
那我們要做的事很簡單, 只是把ssdt unhook 就是了
以下的原碼是由c++寫的, 目的是unhook ssdt
如果你不明白以下的code, 請在google 找ssdt unhook, 很多相關解釋也可找到
當你unhook SSDT後, 你就可以直接調用有關api, 如 OpenProcess , ReadProcessMemory, 等來修改內存
如有任何查詢, 請送電郵去 [email=desinner415●禁留聯繫資訊●.hk]desinner415●禁留聯繫資訊●.hk[/email]
原碼:

#include <ntddk.h>
#include "PE.h"
typedef struct _tagSSDT {
    PVOID pvSSDTBase;
    PVOID pvServiceCounterTable;
    ULONG ulNumberOfServices;
    PVOID pvParamTableBase;
} SSDT, *PSSDT;
extern PSSDT    KeServiceDescriptorTable;
typedef struct _SYSTEM_MODULE
{
    ULONG Reserved[2];
    ULONG Base;
    ULONG Size;
    ULONG Flags;
    USHORT Index;
    USHORT Unk●嚴禁張貼廣告●n;
    USHORT LoadCount;
    USHORT ModuleNameOffset;
    CHAR ImageName[256];
} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
typedef struct _SYSTEM_MODULE_INFORMATION
{
ULONG    uCount;
SYSTEM_MODULE_INFORMATION aSM[];
}MODULE_LIST,*PMODULE_LIST;
NTSYSAPI
NTSTATUS
NTAPI
ZwQuerySystemInformation(
ULONG   SystemInformationClass,
PVOID   SystemInformation,
ULONG   SystemInformationLength,
PULONG   ReturnLength
);
ULONG GetKernelBaseAddress(char* lpszModule)
{
NTSTATUS nResult;
ULONG ulNeededSize, uLoop, uKernelAddr;
    PMODULE_LIST pModuleList;
uKernelAddr = 0;
ZwQuerySystemInformation(11, &ulNeededSize, 0, &ulNeededSize);
    pModuleList = ExAllocatePool(NonPagedPool, ulNeededSize);
nResult = ZwQuerySystemInformation(11, pModuleList, ulNeededSize, Null);
if (NT_SUCCESS(nResult))
{
   //ntoskrnl is always first there
   uKernelAddr = pModuleList->aSM[0].Base;
   strcpy(lpszModule,"");
   strcat(lpszModule,pModuleList->aSM[0].ModuleNameOffset+pModuleList->aSM[0].ImageName);
}
ExFreePool(pModuleList);
return uKernelAddr;
}
ULONG RVAToRaw(PVOID lp●禁私人部落格● VirtualAddress)
{
IMAGE_DOS_HEADER *pDosHeader;
IMAGE_NT_HEADERS *pNtHeader;
IMAGE_SECTION_HEADER *pSectionHeader;
ULONG NumOfSections,uLoop;
pDosHeader=(IMAGE_DOS_HEADER*)lpBase;
if (pDosHeader->e_magic != IMAGE_DOS_SIGNATURE)
   return 0;
pNtHeader=(IMAGE_NT_HEADERS*)((unsigned char*)lpBase+pDosHeader->e_lfanew);
NumOfSections=pNtHeader->FileHeader.NumberOfSections;
pSectionHeader = (IMAGE_SECTION_HEADER*)((ULONG)pNtHeader + sizeof(ULONG) + sizeof(IMAGE_FILE_HEADER) + pNtHeader->FileHeader.SizeOfOptionalHeader);
VirtualAddress -= (ULONG)lpBase;
for (uLoop=0;uLoop<NumOfSections;uLoop++)
{
   pSectionHeader = (IMAGE_SECTION_HEADER*)((ULONG)pSectionHeader + sizeof(IMAGE_SECTION_HEADER) * uLoop);
   if(VirtualAddress>pSectionHeader->VirtualAddress&&VirtualAddress<pSectionHeader->VirtualAddress+pSectionHeader->SizeOfRawData)
   {
    ULONG Offset = VirtualAddress-pSectionHeader->VirtualAddress + pSectionHeader->PointerToRawData;
    return Offset;
   }
}
return 0;
}
void DriverUnload(PDRIVER_OBJECT pDriverObj)
{
DbgPrint("DriverUnload!");
}
NTSTATUS DriverEntry( IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath )
{
NTSTATUS status=STATUS_SUCCESS;
ULONG uKernelMoule,uImageBase,uSSDTCount,uSSDTBase,uSSDTRaw,uLoop,uOldAddress,uNewAddress;
PULONG lpArraySSDT;
char szKernelPath[256];
ANSI_STRING aFileName;
UNICODE_STRING uFileName;
OBJECT_ATTRIBUTES ObjAttr;
IO_STATUS_BLOCK ioStatus;
FILE_POSITION_INFORMATION FilePos;
HANDLE hFile;
theDriverObject->DriverUnload=DriverUnload;
// get system modules
memset(szKernelPath,0,256);
uKernelMoule = GetKernelBaseAddress(szKernelPath);
    uImageBase   = ((IMAGE_NT_HEADERS*)(uKernelMoule + ((IMAGE_DOS_HEADER*)uKernelMoule)->e_lfanew))->OptionalHeader.ImageBase;
DbgPrint("Kernel ImageBase: 0x%.8X", uImageBase);
DbgPrint("Kernel Base: 0x%.8X", uKernelMoule);
DbgPrint("Kernel Module Path: %s", szKernelPath);
//
uSSDTCount = KeServiceDescriptorTable->ulNumberOfServices;
uSSDTBase = (ULONG)KeServiceDescriptorTable->pvSSDTBase;
DbgPrint("SSDT BaseAddress: 0x%8X, SSDT Count: 0x%X", uSSDTBase, uSSDTCount);
lpArraySSDT = ExAllocatePool(PagedPool, uSSDTCount * sizeof(ULONG));
if (lpArraySSDT == Null) return status;
uSSDTRaw = RVAToRaw(uKernelMoule, uSSDTBase);
DbgPrint("SSDT RAW: 0x%.8X", uSSDTRaw);
if (uSSDTRaw == 0)
{
   DbgPrint("SSDT RAW Error");
   ExFreePool(lpArraySSDT);
   return status;
}
RtlInitAnsiString(&aFileName,szKernelPath);
status = RtlAnsiStringToUnicodeString(&uFileName, &aFileName, TRUE);
if(!NT_SUCCESS(status))
{
   DbgPrint("RtlAnsiStringToUnicodeString Error");
   ExFreePool(lpArraySSDT);
   return status;
}
InitializeObjectAttributes(&ObjAttr, &uFileName, OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE, Null, NULL);
    status = ZwOpenFile(&hFile, FILE_READ_DATA, &ObjAttr, &ioStatus, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, FILE_SYNCHRONOUS_IO_NONALERT);
    if (NT_SUCCESS(status) && hFile)
{
   FilePos.CurrentByteOffset.LowPart = uSSDTRaw;//1000;//uSSDTRaw;
   FilePos.CurrentByteOffset.HighPart = 0;
   status = ZwSetInformationFile(hFile, &ioStatus, &FilePos, sizeof(FILE_POSITION_INFORMATION), FilePositionInformation);
   if (NT_SUCCESS(status))
   {
    status = ZwReadFile(hFile, NULL, NULL, NULL, &ioStatus, lpArraySSDT, uSSDTCount * sizeof(ULONG), NULL, NULL);
    if (NT_SUCCESS(status))
    {
     for (uLoop=0; uLoop<uSSDTCount; uLoop++)
     {
      uOldAddress = *(lpArraySSDT + uLoop) - uImageBase + uKernelMoule;
      uNewAddress = *((PULONG)uSSDTBase + uLoop);
      if (uOldAddress != uNewAddress)
      {
       DbgPrint("SSDT No.%X, Old: 0x%.8X, New: 0x%.8X", uLoop, uOldAddress, uNewAddress);
       __asm
        cli
        mov eax,cr0
        and eax,~0x10000
        mov cr0,eax
       }
       *((PULONG)uSSDTBase + uLoop) = uOldAddress;
       //fast_InterlockedExchange(*(uSSDTBase + uLoop), uOldAddress);
       __asm
        mov eax,cr0
        or   eax,0x10000
        mov cr0,eax
        sti
       }
      }
     }
     DbgPrint("SSDT TheEnd...");
    }
    else
     DbgPrint("Read File Error!");
   }
//   else
//    DbgPrint("Set File Pos Error!");
   if(hFile)
    ZwClose(hFile);
}
else
DbgPrint("Open File Error!");
    RtlFreeUnicodeString(&uFileName);
ExFreePool(lpArraySSDT);
return status;
}
/////////////////////////////////////////////////////////////////
//PE.H
#ifndef _PE_H_
#define _PE_H_
   
#define IMAGE_DOS_SIGNATURE                 0x5A4D      // MZ
#define IMAGE_SIZEOF_SHORT_NAME             8
#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES    16
typedef unsigned char BYTE, *PBYTE;
typedef unsigned int UINT, *PUINT;
// headers PE
typedef struct _IMAGE_SECTION_HEADER {
    BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
    union {
      ULONG PhysicalAddress;
      ULONG VirtualSize;
    } Misc;
    ULONG VirtualAddress;
    ULONG SizeOfRawData;
    ULONG PointerToRawData;
    ULONG PointerToRelocations;
    ULONG PointerToLinenumbers;
    USHORT NumberOfRelocations;
    USHORT NumberOfLinenumbers;
    ULONG Characteristics;
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;

#define IMAGE_FIRST_SECTION( ntheader ) ((PIMAGE_SECTION_HEADER)       \
   ((ULONG)ntheader +                                                  \
    FIELD_OFFSET( IMAGE_NT_HEADERS, OptionalHeader ) +                 \
    ((PIMAGE_NT_HEADERS)(ntheader))->FileHeader.SizeOfOptionalHeader   \
   ))
typedef struct _IMAGE_DOS_HEADER {
    USHORT e_magic;  
    USHORT e_cblp;  
    USHORT e_cp;   
    USHORT e_crlc;  
    USHORT e_cparhdr;
    USHORT e_minalloc;
    USHORT e_maxalloc;
    USHORT e_ss;
    USHORT e_sp;   
    USHORT e_csum;  
    USHORT e_ip;
    USHORT e_cs;
    USHORT e_lfarlc;  
    USHORT e_ovno;  
    USHORT e_res[4];  
    USHORT e_oemid;  
    USHORT e_oeminfo;  
    USHORT e_res2[10];
    LONG e_lfanew;
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
typedef struct _IMAGE_FILE_HEADER {
    USHORT Machine;
    USHORT NumberOfSections;
    ULONG TimeDateStamp;
    ULONG PointerToSymbolTable;
    ULONG NumberOfSymbols;
    USHORT SizeOfOptionalHeader;
    USHORT Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
typedef struct _IMAGE_DATA_DIRECTORY {
ULONG VirtualAddress;
ULONG Size;
} IMAGE_DATA_DIRECTORY,
*PIMAGE_DATA_DIRECTORY;
typedef struct _IMAGE_OPTIONAL_HEADER {
    USHORT   Magic;
    BYTE   MajorLinkerVersion;
    BYTE   MinorLinkerVersion;
    ULONG SizeOfCode;
    ULONG SizeOfInitializedData;
    ULONG SizeOfUninitializedData;
    ULONG AddressOfEntryPoint;
    ULONG BaseOfCode;
    ULONG BaseOfData;
    ULONG ImageBase;
    ULONG SectionAlignment;
    ULONG FileAlignment;
    USHORT   MajorOperatingSystemVersion;
    USHORT   MinorOperatingSystemVersion;
    USHORT   MajorImageVersion;
    USHORT   MinorImageVersion;
    USHORT   MajorSubsystemVersion;
    USHORT   MinorSubsystemVersion;
    ULONG Win32VersionValue;
    ULONG SizeOfImage;
    ULONG SizeOfHeaders;
    ULONG CheckSum;
    USHORT   Subsystem;
    USHORT   DllCharacteristics;
    ULONG SizeOfStackReserve;
    ULONG SizeOfStackCommit;
    ULONG SizeOfHeapReserve;
    ULONG SizeOfHeapCommit;
    ULONG LoaderFlags;
    ULONG NumberOfRvaAndSizes;
    IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
} IMAGE_OPTIONAL_HEADER, *PIMAGE_OPTIONAL_HEADER;
typedef struct _IMAGE_NT_HEADERS {
ULONG Signature;
IMAGE_FILE_HEADER FileHeader;
IMAGE_OPTIONAL_HEADER OptionalHeader;
} IMAGE_NT_HEADERS, *PIMAGE_NT_HEADERS;
   
   
   
      
// PEB
   
#pragma pack(4)
typedef struct _PEB_LDR_DATA
{
ULONG Length;
BOOLEAN Initialized;
PVOID SsHandle;
LIST_ENTRY InLoadOrderModuleList;
LIST_ENTRY InMemoryOrderModuleList;
LIST_ENTRY InInitializationOrderModuleList;
} PEB_LDR_DATA, *PPEB_LDR_DATA;
#pragma pack()
typedef struct _PEB_ORIG {
    BYTE Reserved1[2];
    BYTE BeingDebugged;
    BYTE Reserved2[229];
    PVOID Reserved3[59];
    ULONG SessionId;
} PEB_ORIG, *PPEB_ORIG;
typedef void (*PPEBLOCKROUTINE)(PVOID PebLock);
struct _PEB_FREE_BLOCK {
struct _PEB_FREE_BLOCK *Next;
ULONG Size;
};
typedef struct _PEB_FREE_BLOCK PEB_FREE_BLOCK;
typedef struct _PEB_FREE_BLOCK *PPEB_FREE_BLOCK;
typedef struct _RTL_DRIVE_LETTER_CURDIR {
USHORT Flags;
USHORT Length;
ULONG TimeStamp;
UNICODE_STRING DosPath;
} RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
typedef struct _RTL_USER_PROCESS_PARAMETERS {
ULONG MaximumLength;
ULONG Length;
ULONG Flags;
ULONG DebugFlags;
PVOID ConsoleHandle;
ULONG ConsoleFlags;
HANDLE StdInputHandle;
HANDLE StdOutputHandle;
HANDLE StdErrorHandle;
UNICODE_STRING CurrentDirectoryPath;
HANDLE CurrentDirectoryHandle;
UNICODE_STRING DllPath;
UNICODE_STRING ImagePathName;
UNICODE_STRING CommandLine;
PVOID Environment;
ULONG StartingPositionLeft;
ULONG StartingPositionTop;
ULONG Width;
ULONG Height;
ULONG CharWidth;
ULONG CharHeight;
ULONG ConsoleTextAttributes;
ULONG WindowFlags;
ULONG ShowWindowFlags;
UNICODE_STRING WindowTitle;
UNICODE_STRING DesktopName;
UNICODE_STRING ShellInfo;
UNICODE_STRING RuntimeData;
RTL_DRIVE_LETTER_CURDIR DLCurrentDirectory[0x20];
} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
typedef struct _PEB {
BOOLEAN InheritedAddressSpace;
BOOLEAN ReadImageFileExecOptions;
BOOLEAN BeingDebugged;
BOOLEAN Spare;
HANDLE Mutant;
PVOID ImageBaseAddress;
PPEB_LDR_DATA LoaderData;
PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
PVOID SubSystemData;
PVOID ProcessHeap;
PVOID FastPebLock;
PPEBLOCKROUTINE FastPebLockRoutine;
PPEBLOCKROUTINE FastPebUnlockRoutine;
ULONG EnvironmentUpdateCount;
PVOID *KernelCallbackTable;
PVOID EventLogSection;
PVOID EventLog;
PPEB_FREE_BLOCK FreeList;
ULONG TlsExpansionCounter;
PVOID TlsBitmap;
ULONG TlsBitmapBits[0x2];
PVOID ReadOnlySharedMemoryBase;
PVOID ReadOnlySharedMemoryHeap;
PVOID *ReadOnlyStaticServerData;
PVOID AnsiCodePageData;
PVOID OemCodePageData;
PVOID UnicodeCaseTableData;
ULONG NumberOfProcessors;
ULONG NtGlobalFlag;
BYTE Spare2[0x4];
LARGE_INTEGER CriticalSectionTimeout;
ULONG HeapSegmentReserve;
ULONG HeapSegmentCommit;
ULONG HeapDeCommitTotalFreeThreshold;
ULONG HeapDeCommitFreeBlockThreshold;
ULONG NumberOfHeaps;
ULONG MaximumNumberOfHeaps;
PVOID **ProcessHeaps;
PVOID GdiSharedHandleTable;
PVOID ProcessStarterHelper;
PVOID GdiDCAttributeList;
PVOID LoaderLock;
ULONG OSMajorVersion;
ULONG OSMinorVersion;
ULONG OSBuildNumber;
ULONG OSPlatformId;
ULONG ImageSubSystem;
ULONG ImageSubSystemMajorVersion;
ULONG ImageSubSystemMinorVersion;
ULONG GdiHandleBuffer[0x22];
ULONG PostProcessInitRoutine;
ULONG TlsExpansionBitmap;
BYTE TlsExpansionBitmapBits[0x80];
ULONG SessionId;
} PEB, *PPEB;
收藏收藏 分享分享 讚 幹 分享分享 FB分享
己退穩巨商
回覆

使用道具 舉報


chgz2009 當前離線
UID
1312720
熱心
17 值
嘉獎
0 次
違規
0 次
在線時間
3 小時
經驗
13 點
積分
53
精華
0
最後登錄
2018-8-6
閱讀權限
20
註冊時間
2009-9-16
論壇幣
14 幣
聯合幣
6 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
chgz2009 2011-12-1 13:50:36
確實比較內行!普通人看不明白!感謝了!
回覆

使用道具 舉報

chgz2009 當前離線
UID
1312720
熱心
17 值
嘉獎
0 次
違規
0 次
在線時間
3 小時
經驗
13 點
積分
53
精華
0
最後登錄
2018-8-6
閱讀權限
20
註冊時間
2009-9-16
論壇幣
14 幣
聯合幣
6 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
chgz2009 2011-12-1 13:52:15
確實比較內行!普通人看不明白!感謝了!
回覆

使用道具 舉報

ricky0522 當前離線
UID
1589544
熱心
100 值
嘉獎
0 次
違規
0 次
在線時間
9 小時
經驗
79 點
積分
188
精華
0
最後登錄
2018-8-6
閱讀權限
20
註冊時間
2011-1-6
論壇幣
-6 幣
聯合幣
6 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
ricky0522 2011-12-17 17:17:34
港服巨商辅助
本文章轉自外掛聯合國http://www.wgun.net
回覆

使用道具 舉報

andrewyiu 當前離線
UID
145706
熱心
52 值
嘉獎
0 次
違規
0 次
在線時間
16 小時
經驗
31 點
積分
99
精華
0
最後登錄
2015-7-22
閱讀權限
20
註冊時間
2007-1-10
論壇幣
44 幣
聯合幣
6 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
5
andrewyiu 2012-1-22 15:16:24
確實比較內行!普通人看不明白!感謝了!
回覆

使用道具 舉報

samtty01020 當前離線
UID
1602164
熱心
20 值
嘉獎
0 次
違規
0 次
在線時間
0 小時
經驗
21 點
積分
84
精華
0
最後登錄
2018-8-6
閱讀權限
20
註冊時間
2012-1-26
論壇幣
37 幣
聯合幣
6 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
6
samtty01020 2012-1-29 15:49:25
確實比較內行!普通人看不明白!感謝了!
回覆

使用道具 舉報

002202 當前離線
UID
1281571
熱心
52 值
嘉獎
0 次
違規
0 次
在線時間
6 小時
經驗
46 點
積分
110
精華
0
最後登錄
2018-8-6
閱讀權限
20
註冊時間
2009-7-31
論壇幣
0 幣
聯合幣
6 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
7
002202 2012-2-19 12:42:07
確實比較內行!普通人看不明白!感謝了!
回覆

使用道具 舉報

ckcxdxd 當前離線
UID
1247129
熱心
120 值
嘉獎
0 次
違規
0 次
在線時間
17 小時
經驗
77 點
積分
381
精華
0
最後登錄
2018-8-6
閱讀權限
25
註冊時間
2009-6-24
論壇幣
52 幣
聯合幣
114 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 3
8
ckcxdxd 2012-3-10 00:31:43
咁可唔可以講d新手睇得明既????期待中.........................................
回覆

使用道具 舉報

fung3103 當前離線
UID
1312253
熱心
39 值
嘉獎
0 次
違規
0 次
在線時間
17 小時
經驗
33 點
積分
101
精華
0
最後登錄
2018-8-6
閱讀權限
20
註冊時間
2009-9-15
論壇幣
3 幣
聯合幣
6 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
9
fung3103 2012-3-25 01:32:52
還記得我嗎?
其實過xtrap方法早已找到
而最近Xtrap更新後 方法不變 只要加多一小步驟也能過
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊


手機版 | Archiver | 外掛聯合國

GMT+8, 2024-4-29 18:57 , Processed in 0.070429 second(s), 18 queries , Memcache On.

版權說明:
  本站不會製作、經銷、代理外掛程式。僅免費提供外掛程式下載前之掃毒及掃木馬等安全檢測驗證,協助會員遠離盜號危險程式。本站所有資料均來自網際網路收集整理,說明文字暨下載連結轉載自原程 式開發站。站上出現之公司名稱、遊戲名稱、程式等,商標及著作權,均歸各公司及程式原創所有,本站程式所有權歸外掛聯合國所有。本程式所有權歸外掛聯合國所有.......

回頂部
第二步?
第三步?