PDA

View Full Version : ایجاد پوشه ای مانند پوشه KasperSky!



Pr0grammer
سه شنبه 14 آبان 1387, 00:57 صبح
سلام...
چطوری میشه یه پوشه ای ایجاد کرد که مثه فولدر آنتی ویروس Kaspersky باشه؟! :متفکر: وقتی این آنتی ویروس رو نصب می کنیم اگه به مسیری که نصب کردیم نگاه بندازیم، متوجه میشم که توی این پوشه نه میشه فایلی ایجاد کرد نه فایلی توش کپی کرد! حتی نمیشه فایل های توش رو حذف ، کپی، کات یا Rename کرد!

vcldeveloper
سه شنبه 14 آبان 1387, 04:23 صبح
احتمالا توابع API مربوطه را هوک می کند.

Zahed2008
سه شنبه 14 آبان 1387, 09:56 صبح
سلام به دوستان.
یعنی چی هوک می کنند. اگه می شه واسه منم توضیح بدین.
با تشکر.

mortezakiaee
سه شنبه 14 آبان 1387, 11:14 صبح
تا جایی که من چک کردم از روی security های ویندوز این کارو می کنه. از تو msdn میشه پیدا کنی

Pr0grammer
سه شنبه 14 آبان 1387, 11:29 صبح
احتمالا توابع API مربوطه را هوک می کند.

جناب کشاورز ممکنه چند تا از این توابع رو معرفی کنید؟!

acilios
سه شنبه 14 آبان 1387, 18:58 عصر
با سلام.
این تابع برای ایجاد دایرکتوری (پوشه) استفاده میشه :


CreateDirectory('C:\Program Files\Kaspersky Lab',nil);من توی یک کتابی این تابع رو دیدم ولی در مورد پارامتر دوم تابع یعنی nil توضیحی نداده بود فقط نوشته بود این پارامتر در زمینه امنیت استفاده میشه!!!
:متفکر::متفکر::متفکر:

lord_viper
سه شنبه 14 آبان 1387, 20:08 عصر
با سلام
hookapi تابع خواصی نداره بلکه یک تکنیک هست شما با زیر نظر گرفتن یک تابع میتونین تشخیص بدین چه برنامه ای الان چکار میخواهد بکنه و اجازه انجام اون کار رو بهش بدین یا نه
معمولا به این صورت عمل میشه شما یه تابع با مشخصات همون تابع api مینویسین و اونو تو dll مربوطه در مکان اون تابع جایگزاری میکنین مکان تابع اصلی تغییر میکنه و تابع شما جای اونو میگیره در این حالت شما مکان تابع اصلی رو در اختیار دارین هر برنامه ای که بخواهد از اون تابع استفاده کنه اطلاعات رو به تابع شما میفرسته و تابع شما اونو به تابع اصلی میفرسته و خروجی تابع اصلی بعد از پردازش(این دیگه بستگی به شما داره چکاری انجام بدین مثلا حذف اسم برنامه شما از لیست پروسسها یا ...)خروجی رو به برنامه اصلی فرستاده میشه

Mask
سه شنبه 14 آبان 1387, 20:16 عصر
با سلام
hookapi تابع خواصی نداره بلکه یک تکنیک هست شما با زیر نظر گرفتن یک تابع میتونین تشخیص بدین چه برنامه ای الان چکار میخواهد بکنه و اجازه انجام اون کار رو بهش بدین یا نه
معمولا به این صورت عمل میشه شما یه تابع با مشخصات همون تابع api مینویسین و اونو تو dll مربوطه در مکان اون تابع جایگزاری میکنین مکان تابع اصلی تغییر میکنه و تابع شما جای اونو میگیره در این حالت شما مکان تابع اصلی رو در اختیار دارین هر برنامه ای که بخواهد از اون تابع استفاده کنه اطلاعات رو به تابع شما میفرسته و تابع شما اونو به تابع اصلی میفرسته و خروجی تابع اصلی بعد از پردازش(این دیگه بستگی به شما داره چکاری انجام بدین مثلا حذف اسم برنامه شما از لیست پروسسها یا ...)خروجی رو به برنامه اصلی فرستاده میشه

با سلام به cayberfox (http://barnamenevis.org/forum/member.php?u=9257)
من که خودم رو کشتم تو این سایت و آخر یه نفر پیدا نشد لا اقل یه نمونه سورس کد برا هوک کردن یه تابع بزاره. اگه جستجو کنی من کلی پست در این مورد زدم اما بی فایده.
اگه شما بلدید یه یه مثال بزنید.

lord_viper
سه شنبه 14 آبان 1387, 20:35 عصر
این یه مدلشه که اسم برنامه شما رو کامل از بخش پروسس تسک منجر حذف میکنه



HookDllMain.pas

´ْآë:--------------------------------------------------------------------------------
interface
uses
Windows , Messages , TlHelp32 , Sysutils ,
NTHookUnit;
const
MappingFileName = 'M_File_HKHP_1.0'
FileNameLength = 100;
Trap = True; {Trueدفعهت½,False¸ؤز‎بë±يت½}

type
TShareMem = packed record
FileCount : integer;
FileNames : array [0..2000] of char;
end;
PShareMem = ^TShareMem;
TPDWord = ^DWORD;
UNICODE_STRING = Record
Length : SHORT;
MaxLen : SHORT ;
Name : Pointer;
end;
TProcessInfo=Record
NextEntryDelta : ULONG;
ThreadCount : ULONG;
Reserved1 : array [1..6] of ULONG;
CreateTime : LARGE_INTEGER;
UserTime : LARGE_INTEGER;
KernelTime : LARGE_INTEGER;
ProcessName : UNICODE_STRING;
BasePriority : ULONG;
ProcessId : ULONG;
end;
PProcessInfo = ^TProcessInfo;
Function NtQuerySystemInformation(infoClass: DWORD;
buffer: Pointer;
bufSize: DWORD;
returnSize: TPDWord): DWORD; stdcall;
procedure HideProcess(FileName : Pchar); stdcall;
procedure StopHook; stdcall;
implementation
var
pShMem : PShareMem;
hMappingFile : THandle;
Hook : THookClass;
MessageHook : Thandle;
Function NtQuerySystemInformation ; external 'NTDLL.DLL' name 'NtQuerySystemInformation'
Function CheckFileIsHideFile(var lppe : TProcessEntry32) : Boolean;stdcall;
begin
Result := Uppercase(Lppe.szExeFile)='KBP.EXE'
end;
Function HideProcessStru(HideFile : PChar ; Buf : Pointer) : integer;stdcall;
var
P , LastP : PProcessInfo;
PW : PWideChar;
FileName : String;
begin
Result := NO_ERROR;
FileName := Uppercase(HideFile);
P := Buf;
LastP := NIL;
while P.NextEntryDelta<>0 do begin
PW := P.ProcessName.Name;
if Uppercase(String(PW))=FileName then begin
if LastP<>NIL then
LastP.NextEntryDelta := LastP.NextEntryDelta + P.NextEntryDelta;
end;
LastP := P;
P := Ptr(DWORD(P) + P.NextEntryDelta);
end;
end;

Function NewNtQuerySystemInformation(infoClass: DWORD;
buffer: Pointer;
bufSize: DWORD;
returnSize: TPDWord): DWORD; stdcall;
type
TNtQuerySystemInformation = Function(infoClass: DWORD;
buffer: Pointer;
bufSize: DWORD;
returnSize: TPDWord): DWORD; stdcall;
begin
Hook.Restore; {¸ؤز‎بë±يت½؟ةزش²»ت¹سأ´ثسï ¾ن}
Result := TNtQuerySystemInformation(Hook.OldFunction)(infoCl ass,
buffer,
bufSize,
returnSize);
if infoClass=5 then begin
HideProcessStru(pShMem^.FileNames,Buffer);
end;
Hook.Change; {¸ؤز‎بë±يت½؟ةزش²»ت¹سأ´ثسï ¾ن}
end;
function GetMsgProc(code: integer; wPar: integer; lPar: integer): Integer; stdcall;
begin
Result := CallNextHookEx(MessageHook, Code, wPar, lPar);
end;
procedure HideProcess(FileName : Pchar); stdcall;
begin
if MessageHook=0 then begin
MessageHook := SetWindowsHookEx(WH_GetMessage, GetMsgProc, HInstance, 0);
end;
StrlCopy(pShMem^.FileNames + pShMem^.FileCount * FileNameLength ,
FileName ,
FileNameLength);
Inc(pShMem^.FileCount);
end;
procedure StopHook; stdcall;
begin
if MessageHook<>0 then begin
UnhookWindowsHookEx(MessageHook);
MessageHook := 0;
SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);
end;
end;
initialization
hMappingFile := OpenFileMapping(FILE_MAP_WRITE,False,MappingFileNa me);
if hMappingFile=0 then
hMappingFile := CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,S izeOf(TShareMem),MappingFileName);
if hMappingFile = 0 then Exception.Create('²»ؤـ½¨ء¢¹²ديؤع´و !');
pShMem := MapViewOfFile(hMappingFile,FILE_MAP_WRITE or FILE_MAP_READ,0,0,0);
pShMem.FileCount := 0;
if pShMem = nil then begin
CloseHandle(hMappingFile);
Exception.Create('²»ؤـس³ةن¹²ديؤع´و !');
end;
MessageHook := 0;
Hook := THookClass.Create(Trap,@NtQuerySystemInformation,@ NewNtQuerySystemInformation);{Trap=False¸ؤز‎ ë±يت½}
finalization
Hook.Destroy;
UnMapViewOfFile(pShMem);
CloseHandle(hMappingFile);
StopHook;
end.



یا این که برای hook کردن یه تابع تو برنامه خودتونه (میشه با یه تغییر کوچیک رو برنامه های دیگه هم اجراییش کرد)



type
TSaveRedir = packed record
Addr: Pointer;
Bytes: array[0..4] of Byte;
end;
PSaveRedir = ^TSaveRedir;

procedure RedirectCall(FromAddr, ToAddr: Pointer; SaveRedir: PSaveRedir);
var
OldProtect: Cardinal;
NewCode: packed record
JMP: Byte;
Distance: Integer;
end;
begin
if not VirtualProtect(FromAddr, 5, PAGE_EXECUTE_READWRITE, OldProtect) then
RaiseLastWin32Error;
if Assigned(SaveRedir) then
begin
SaveRedir^.Addr := FromAddr;
Move(FromAddr^, SaveRedir^.Bytes, 5);
end;
NewCode.JMP := $E9;
NewCode.Distance := PChar(ToAddr) - PChar(FromAddr) - 5;
Move(NewCode, FromAddr^, 5);
if not VirtualProtect(FromAddr, 5, OldProtect, OldProtect) then
RaiseLastWin32Error;
end;

procedure UndoRedirectCall(const SaveRedir: TSaveRedir);
var
OldProtect: Cardinal;
begin
if not VirtualProtect(SaveRedir.Addr, 5, PAGE_EXECUTE_READWRITE, OldProtect) then
RaiseLastWin32Error;
Move(SaveRedir.Bytes, SaveRedir.Addr^, 5);
if not VirtualProtect(SaveRedir.Addr, 5, OldProtect, OldProtect) then
RaiseLastWin32Error;
end;


// Example: Replace Application.MessageBox with your own.

function MyNewMessageBox(Self: TApplication; const Text, Caption: PChar;
Flags: Longint): Integer;
begin
ShowMessage(New Messagebox);
//....
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Application.MessageBox(Youll never see this Text /
Diesen Text wirst du nie sehen, ..., MB_OK);
end;

var
S: TSaveRedir;

initialization
RedirectCall(@TApplication.MessageBox, @MyNewMessageBox, @S);

finalization
UndoRedirectCall(S);

DAMAVAND
سه شنبه 14 آبان 1387, 23:40 عصر
این یه مدلشه که اسم برنامه شما رو کامل از بخش پروسس تسک منجر حذف میکنه
[/code]

ممکنه يک مثال بزنيد چطوري ازش استفاده کنيم ???
من هر کاري کردم نتونستم اسم برنامه رو از ليست پروسس ها حذف کنم ? !

Pr0grammer
چهارشنبه 15 آبان 1387, 00:59 صبح
ممکنه يک مثال بزنيد چطوري ازش استفاده کنيم ???
من هر کاري کردم نتونستم اسم برنامه رو از ليست پروسس ها حذف کنم ? !

بهتر نیست این موضوع در یه تاپیک دیگه مطرح بشه؟! :متفکر:
موضوع تاپیک داره عوض میشه ظاهراً!

Mask
چهارشنبه 15 آبان 1387, 08:07 صبح
من هم نتونستم.

.:KeihanCPU:.
یک شنبه 03 آذر 1387, 22:03 عصر
اگر اشتباه نکنم kaspersky یه برنامه kernel moden هست.

as13851365
دوشنبه 04 آذر 1387, 09:57 صبح
اگه شما دو تا ویندوز داشته باشید با اون یکی ویندوز به راحتی می تونید تغییرات مورد نظر رو درباره پوشه مزبور انجام بدید.

حالا اگر می شه درباره پست 9 جناب cayberfox کمی توضیح بدید من هرکاری کردم نتونستم از این کدها استفاده کنم . مخصوصا این کد (این یه مدلشه که اسم برنامه شما رو کامل از بخش پروسس تسک منجر حذف میکنه) رو اگر کمی توضیح بدید ممنون می شم ( نحویه فراخوانیش رو هم اگر بگید ممنون می شم )

mossaferin
دوشنبه 04 آذر 1387, 20:54 عصر
سلام
البته به نظر من اینکه نمیشه با فلدر کسپر کاری کرد علتش اینه که خود ویندوز براش محدودیت (permission)تعیین میکنه

یه نگاهی به کامند cacls توی ویندوز بنداز میشه یه کارایی کرد
مثلا


cacls test.txt /d administrator
فایل test.txt از هر نظر قفل شده

موفق باشی

joker
دوشنبه 04 آذر 1387, 21:42 عصر
سلام
البته به نظر من اینکه نمیشه با فلدر کسپر کاری کرد علتش اینه که خود ویندوز براش محدودیت (permission)تعیین میکنه

یه نگاهی به کامند cacls توی ویندوز بنداز میشه یه کارایی کرد
مثلا


cacls test.txt /d administrator
فایل test.txt از هر نظر قفل شده

موفق باشی
اگه اینطور باشه ، درایوی فرمتش FAT32 باشه باید کسپراسکای اون مورد عنایت قرار بگیره :) چون ویندوز هیچ پرمیشن خفنی روی این مدل فت نداره

توابع ReadFile - WriteFile در سطح سیستم هوک میشن و اگه قرار باشه مسیری که باید فعالیت کننن مسیر کسپراسکای باشه توابع خنثی میشن.

mossaferin
سه شنبه 05 آذر 1387, 15:05 عصر
سلام


اگه اینطور باشه ، درایوی فرمتش FAT32 باشه باید کسپراسکای اون مورد عنایت قرار بگیره :) چون ویندوز هیچ پرمیشن خفنی روی این مدل فت نداره

توابع ReadFile - WriteFile در سطح سیستم هوک میشن و اگه قرار باشه مسیری که باید فعالیت کننن مسیر کسپراسکای باشه توابع خنثی میشن.

صحبتهای شمارو قبول دارم ولی چند بار تجربه دارم روی FAT32 که حتی بعد از عوض شدن ویندوز هم نمیشد با اون فلدر کاری کرد
راجع به این چی میگید؟

lord_viper
چهارشنبه 06 آذر 1387, 08:44 صبح
اینم همون سورس به صورت dll که کافیه pid برنامه رو بهش بدین تا اونو از تسک منجر حذف کنه