J'ai trouvé et j'ai lu cette question mais je n'ai pas trouvé ma réponse SSDT Accrochage alternative dans les systèmes X64 forts>
Je tiens à protéger ma demande de résiliation par d'autres programmes. Dans la version 32 bits de Windows, j'ai utilisé l'accrochage code> SSDT CODE> pour connecter Pour effectuer ce travail, j'ai utilisé la fonction suivante ( zwterminateProcess code> ou
zwopenprocess code>. Je dois mettre à niveau mon programme pour utiliser la version 64 bits de Windows maintenant.
Et malheureusement dans les fenêtres 64 bits, nous ne pouvons pas utiliser
ssdt code> Hook (
NewzwopenProcess code>) et remplacez-le par l'original
zwopenprocess code> dans SSDT mais dans X64 Windows, je ne sais pas que dois-je faire :(: p>
NTSTATUS NewZwOpenProcess(
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId OPTIONAL)
{
HANDLE ProcessId;
__try
{
ProcessId = ClientId->UniqueProcess;
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
return STATUS_INVALID_PARAMETER;
}
if (ProcessId == (HANDLE)11) //Check if the PID matches our protected process PID (My programm)
{
return STATUS_ACCESS_DENIED;
}
else
return OldZwOpenProcess(ProcessHandle, DesiredAccess,ObjectAttributes, ClientId);
}
4 Réponses :
J'ai trouvé ma réponse, j'utilise Mode Kernel Callbacks.
#include <ntddk.h> // coded by Behrooz //----------------------------------------------- // Defines //----------------------------------------------- //Process Security and Access Rights #define PROCESS_CREATE_THREAD (0x0002) #define PROCESS_CREATE_PROCESS (0x0080) #define PROCESS_TERMINATE (0x0001) #define PROCESS_VM_WRITE (0x0020) #define PROCESS_VM_READ (0x0010) #define PROCESS_VM_OPERATION (0x0008) #define PROCESS_SUSPEND_RESUME (0x0800) #define MAXIMUM_FILENAME_LENGTH 256 //----------------------------------------------- // callback //----------------------------------------------- PVOID _CallBacks_Handle = NULL; typedef struct _OB_REG_CONTEXT { __in USHORT Version; __in UNICODE_STRING Altitude; __in USHORT ulIndex; OB_OPERATION_REGISTRATION *OperationRegistration; } REG_CONTEXT, *PREG_CONTEXT; //----------------------------------------------- // PID2ProcName //----------------------------------------------- extern UCHAR *PsGetProcessImageFileName(IN PEPROCESS Process); extern NTSTATUS PsLookupProcessByProcessId( HANDLE ProcessId, PEPROCESS *Process ); typedef PCHAR (*GET_PROCESS_IMAGE_NAME) (PEPROCESS Process); GET_PROCESS_IMAGE_NAME gGetProcessImageFileName; LPSTR GetProcessNameFromPid(HANDLE pid); //----------------------------------------------- // Forward Declaration //----------------------------------------------- NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ); VOID UnloadDriver( IN PDRIVER_OBJECT DriverObject ); OB_PREOP_CALLBACK_STATUS ObjectPreCallback( IN PVOID RegistrationContext, IN POB_PRE_OPERATION_INFORMATION OperationInformation ); VOID ObjectPostCallback( IN PVOID RegistrationContext, IN POB_POST_OPERATION_INFORMATION OperationInformation ); NTSTATUS RegisterCallbackFunction() ; NTSTATUS FreeProcFilter();
Merci de partager, dites-moi quelle version de WDK utilisez-vous?
@navossoc de votre choix, Winddk Ver 7600.16385.1
J'ai essayé ce code mais le obregistristercallbacks code> retour
Status_access_denied code> Même si j'ai signé mon pilote. aidez-moi s'il vous plaît,
@Behroz, votre solution fonctionne également dans Windows 32 bits?
@Behroz, pouvez-vous partager le fichier .inf que vous avez utilisé?
Quelqu'un peut faire "obunregistercallbacks" et même enregistrer leur propre pour vous empêcher de le détecter. P>
Et votre propre code peut vérifier si le rappel est toujours présent. C'est ce que le plus décent AVS ou ACS le fait, ils tentent d'enregistrer à nouveau le rappel, et si l'action réussit, le rappel a été supprimé de manière à punir!
Merci pour votre code et je l'essaie de réussir Win10 x64. BTW, j'ai été trouvé que l'ObregisterCallbacks retour Statut_access_denied, même si j'ai signé mon pilote. Donc, je demande beaucoup de peuples, puis je trouve une solution pour cela. Ajouter ce texte dans votre fichier "source": Linker_Flags = / IntegrityCheck P>
Ensuite, vous pouvez reconstruire et résoudre votre conducteur. Il a été trouvé dans bbs.pediy.com p>
On dirait que le fichier .inf n'est pas nécessaire. Juste SC Créer un nom de serveur = noyau binpath = pathtoyourfile. p>
Et c'est pourquoi nous aimons le protège-patch.
@Hanspassant :), oui, nous aimons PG, mais je développe un logiciel de sécurité et c'est important pour moi de protéger mes programmes.
Microsoft a développé PG afin que vous n'ayez plus besoin de ce genre de hacks gawdawful.
@Hanspassant Oui Vous avez raison, mais PG n'empêche que les cochons malveillants de rootkits et de mode noyau et n'est pas pour la défense des utilisateurs.