78 lines
3.0 KiB
Plaintext
78 lines
3.0 KiB
Plaintext
{*******************************************************}
|
|
{ }
|
|
{ ApiHookNet }
|
|
{ }
|
|
{ Copyright (C) 2023 kku }
|
|
{ }
|
|
{*******************************************************}
|
|
|
|
unit ApiHookNet;
|
|
|
|
interface
|
|
|
|
uses
|
|
Winapi.Windows, EM.Dnsapi, System.SysUtils;
|
|
|
|
const
|
|
DNS_ERROR_RCODE_YXDOMAIN = $232E;
|
|
|
|
type
|
|
TFun_DnsQuery_A = function(lpstrName: LPSTR; wType: WORD; fOptions: DWORD; aipServers: PDWORD;
|
|
var ppQueryResultsSet: PDWORD; pReserved:pdword): DWORD; stdcall;
|
|
TFun_DnsQuery_UTF8 = function(lpstrName: LPSTR; wType: WORD; fOptions: DWORD; aipServers: PDWORD;
|
|
var ppQueryResultsSet: PDWORD; pReserved:pdword): DWORD; stdcall;
|
|
TFun_DnsQuery_W = function(lpstrName: LPWSTR; wType: WORD; fOptions: DWORD; aipServers: PDWORD;
|
|
var ppQueryResultsSet: PDWORD; pReserved:pdword): DWORD; stdcall;
|
|
TFun_DnsQueryEx = function(pQueryRequest: PDnsQueryRequest; pQueryResults, pCancelHandle: Pointer): DWORD; stdcall;
|
|
|
|
var
|
|
ozDnsQuery_A: TFun_DnsQuery_A = nil;
|
|
ozDnsQuery_UTF8: TFun_DnsQuery_UTF8 = nil;
|
|
ozDnsQuery_W: TFun_DnsQuery_W = nil;
|
|
ozDnsQueryEx: TFun_DnsQueryEx = nil;
|
|
|
|
implementation
|
|
|
|
function CheckBlockDomain(sDomain: String): Boolean;
|
|
begin
|
|
// _AppHook.Log('CheckBlockDomain() ..');
|
|
Result := Pos('google', LowerCase(sDomain)) > 0;
|
|
end;
|
|
|
|
function DnsQuery_AHook(lpstrName: LPSTR; wType: WORD; fOptions: DWORD; aipServers: PDWORD;
|
|
var ppQueryResultsSet: PDWORD; pReserved:pdword): DWORD; stdcall;
|
|
begin
|
|
if CheckBlockDomain(StrPas(lpstrName)) then
|
|
Result := DNS_ERROR_RCODE_YXDOMAIN
|
|
else
|
|
Result := ozDnsQuery_A(lpstrName, wType, fOptions, aipServers, ppQueryResultsSet, pReserved);
|
|
end;
|
|
|
|
function DnsQuery_UTF8Hook(lpstrName: LPSTR; wType: WORD; fOptions: DWORD; aipServers: PDWORD;
|
|
var ppQueryResultsSet: PDWORD; pReserved:pdword): DWORD; stdcall;
|
|
begin
|
|
if CheckBlockDomain(StrPas(lpstrName)) then
|
|
Result := DNS_ERROR_RCODE_YXDOMAIN
|
|
else
|
|
Result := ozDnsQuery_UTF8(lpstrName, wType, fOptions, aipServers, ppQueryResultsSet, pReserved);
|
|
end;
|
|
|
|
function DnsQuery_WHook(lpstrName: LPWSTR; wType: WORD; fOptions: DWORD; aipServers: PDWORD;
|
|
var ppQueryResultsSet: PDWORD; pReserved:pdword): DWORD; stdcall;
|
|
begin
|
|
if CheckBlockDomain(StrPas(lpstrName)) then
|
|
Result := DNS_ERROR_RCODE_YXDOMAIN
|
|
else
|
|
Result := ozDnsQuery_W(lpstrName, wType, fOptions, aipServers, ppQueryResultsSet, pReserved);
|
|
end;
|
|
|
|
function DnsQueryExHook(pQueryRequest: PDnsQueryRequest; pQueryResults, pCancelHandle: Pointer): DWORD; stdcall;
|
|
begin
|
|
if CheckBlockDomain(StrPas(pQueryRequest.sQueryName)) then
|
|
Result := ERROR_INVALID_PARAMETER
|
|
else
|
|
Result := ozDnsQueryEx(pQueryRequest, pQueryResults, pCancelHandle);
|
|
end;
|
|
|
|
end.
|