PDA

View Full Version : سوال: پیدا کردن یک برنامه خاص روی سیستم با استفاده از C



__Genius__
پنج شنبه 26 شهریور 1388, 13:12 عصر
درود ؛
خسته نباشید دوستان .
فرض کنید روی سیستم ما نرم افزاری مثل Driver Genius نصب هست ؛
حالا ما میخواهیم با C برنامه ای رو بنویسیم که به محض اینکه باز بشه با عملیات خاصی که من فعلاً ازش مطلع نیستم مشخص کنه که آیا نرم افزار Driver Genius روی این سیستم موجود هست یا خیر ، مثلاً اگه نرم افزارهای Patcher رو دیده باشین میبینید که خودشون مسیر رو پیدا میکنن و فایل مربوطه رو Crack میکنن ( یا patch ) ؛ من میخوام چنین متدی رو پیاده سازی کنم ، ممنون میشم راهنمائی کنید .

Nima_NF
پنج شنبه 26 شهریور 1388, 14:24 عصر
نرم افزار هایی که نصب می شوند در رجیستری به همراه اسم و مسیر فایل اجرایی ثبت می شوند. از آن می توانید استفاده کنید و مسیر برنامه مورد نظر را پیدا کنید.

تا جایی که یادم هست در بخش HKEY_LOCAL_MACHINE\SOFTWARE هستند.

در هر حال هر برنامه برای خود به شکل خاصی اطلاعات در رجیستری ذخیره می کند، پس باید با توجه به نسخه همان برنامه، از رجیستری بخوانید.

توابع کار با رجیستری بارها در همین بخش و بخش ++VC مطرح شده است، می توانید جستجو کنید.

__Genius__
پنج شنبه 26 شهریور 1388, 14:32 عصر
درود ؛
نیما جان دقایقی پیش به همین مسئله پی بردم و کد زیر رو نوشتم که البته اشکال داره :


#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char regValue[300];
DWORD regLength=1000;
HKEY hKey ;
RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",0, KEY_QUERY_VALUE, &hKey); ;
if(RegQueryValueEx(hKey,"egui.exe",NULL,NULL,(LPBYTE)&regValue,&regLength)==ERROR_SUCCESS)
{
printf("\nNod32 found !") ;
}
else
{
printf("nod32 not found !") ;
}
getch() ;
return 0;

}

نرم افزار Nod32 خودش رو توی این مسیر مینویسه :

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Run
با نام :

egui
حالا من باید ازش Query بگیرم ببینم نصب هست یا خیر ، من کد رو نوشتم ولی مشکل داره ظاهراً ، اگه بتونی راهنمائی کنی ممنون میشم .

__Genius__
پنج شنبه 26 شهریور 1388, 14:35 عصر
درود مجدد ؛
فکر کنم الان درست شد ، من یه exe اضافه میذاشتم برای Query گرفتن .

#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char regValue[300];
DWORD regLength=1000;
HKEY hKey ;
RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",0, KEY_QUERY_VALUE, &hKey); ;
if(RegQueryValueEx(hKey,"egui",NULL,NULL,(LPBYTE)&regValue,&regLength)==ERROR_SUCCESS)
{
printf("\nNod32 found !") ;
}
else
{
printf("nod32 not found !") ;
}
getch() ;
return 0;

}
الان روی سیستمتون اجرا کنین اگه nod32 نصب باشه میگه Nod32 Found اگه نصب نباشه میگه Nod32 not found ؛ کد رو چک کنید ممنون میشم خبرشو بدین .

__Genius__
پنج شنبه 26 شهریور 1388, 21:21 عصر
کسی از دوستان کد رو تست نکرد ؟

negarsoft
جمعه 27 شهریور 1388, 08:09 صبح
سلام
درست بود البته من nod رو نداشتم نوشت "پيدا نشد"