الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

أمثلة وأكواد لتبسيط لغة السي

مغلق
بدأه JAAS في 24 نوفمبر 2004 · 15 رد · 8,999 مشاهدة · في المواضيع و الدروس القيّمة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله ,,,

دائما عندما يبدأ أحدنا في تعلم لغة برمجة فإنة يبحث عن طريقة كتابة الأوامر

فيها , وتجدة يفتح الكود لزر الأمر ولا يعرف مايكتب بداخلة ,,,

فما رأيكم بأن نبدأ بمجموعة من الأكواد والأفكار تعتمد على دوال API ,

تكون مكتوبة بلغة السي , لكي نتعرف على سهولة هذة اللغة

ملاحظة : جميع الدوال و الأفكار التي سنكتبها تستطيع إستخدامها في الدلفي و الفيجول بيسك وحتى منصة الدت نت ,, لأن دوال API لا تختلف في أي مترجم لوندوز

تستطيع إستخدام مشروع MFC وتضع زر أمر وتكتب الأكواد بداخلة

بالإضافة إلى أنك تستطيع فتح مشروع Win32 فارغ وتكتب مباشرة في الدالة الرئيسية main , أو تصنع نافذة وبها زر أمر وتكتب الأكواد بداخلة

لأنك ستلاحظ بأن بعض الدوال تبدأ بنقطتين رأسيتين : للتوافقية بين إختلاف أنواع المشاريع ,,, المهم قص وألصق ... ونفذ الأمر

بسم الله نبدأ :

1- مثال لإيجاد أهم المسارات التي يستخدمها البرنامج :

TCHAR OSDir[MAX_PATH];

// عرض مسار الوندز
GetWindowsDirectory (OSDir,MAX_PATH);
::MessageBox (NULL,OSDir,"1",MB_OK);

// عرض مسار ملفات النظام
GetSystemDirectory (OSDir,MAX_PATH);
::MessageBox (NULL,OSDir,"2",MB_OK);

// عرض مسار البرنامج الحالي
GetModuleFileName (NULL,OSDir,MAX_PATH);
::MessageBox (NULL,OSDir,"3",MB_OK);

2 - مثال لسرد الملفات والمجلدات في دليل معين

WIN32_FIND_DATA fdata;
HANDLE hfind;

hfind=FindFirstFile ("d:\\*.*", &fdata);
if(hfind==INVALID_HANDLE_VALUE)
{
// حدوث خطأ في الدالة أو عدم وجود ملفات للعرض
::MessageBox (NULL,"Error","Dir",MB_OK);
}
else
{

do{

::MessageBox (NULL,fdata.cFileName,"Dir",MB_OK);
}while(FindNextFile (hfind,&fdata));

}
FindClose (hfind);

3 - عرض العمليات والبرامج الموجودة حاليا في الذاكرة

يلزمك تعريف في بداية صفحة الكود وهو

#include <tlhelp32.h>

وبعد ذلك تكتب الكود

HANDLE hthsnt;
PROCESSENTRY32 penn;

hthsnt=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

Process32First(hthsnt,&penn);

do{

::MessageBox (NULL,penn.szExeFile ,"proc",MB_OK);
}while(Process32Next(hthsnt,&penn));

CloseHandle (hthsnt);

4 - إظهار قائمة منسدلة بمجرد الضغط على زر الأمر

HMENU mnu;
POINT po;

mnu = CreatePopupMenu ();
AppendMenu (mnu,MF_STRING,1,"Open");
AppendMenu (mnu,MF_STRING,2,"Save");
AppendMenu (mnu,MF_STRING,3,"Load");

GetCursorPos (&po); 
TrackPopupMenu(mnu,TPM_LEFTALIGN,po.x ,po.y,0,mHwnd,NULL);
DestroyMenu (mnu);

البارمتر mHwnd يمثل مقبض النافذة الرئيسية التي تحتوي على زر الأمر

إذا كنت تستخدم MFC إكتب في هذا البارمتر this->m_hWnd

5 - سرد القيم والمعلومات لمفتاح معين في الريجستري

وسنقوم بعرض البرامج التي تعمل في بداية تشغيل الوندوز , يمكن أن تغير المفتاح

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

HKEY hky;
long rel;

rel=RegOpenKeyEx (HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_READ,&hky);

if(rel==0)
{
TCHAR strval[MAX_PATH];
TCHAR strdat[MAX_PATH];
DWORD szofval=MAX_PATH;
DWORD szofdat=MAX_PATH;

DWORD ntyp;
DWORD ind=0;
while (RegEnumValue (hky,ind,strval,&szofval,NULL,&ntyp,(BYTE*)strdat,&szofdat)==0)
{
::MessageBox (NULL,strdat,strval,MB_OK);
szofval=MAX_PATH;
szofdat=MAX_PATH;

ZeroMemory(strval,MAX_PATH);
ZeroMemory(strdat,MAX_PATH);

ind++;
}
}

RegCloseKey (hky);

6 - إظهار نافذة لإستعراض الملفات وإختيار ملف نصي

ويجب تعريف ملف ,, إذا كنت تستخدم مشروع MFC لا يتطلب

#include <commdlg.h>

static OPENFILENAME Textopen;
static TCHAR szFileTitle[MAX_PATH];  
static TCHAR szFile[MAX_PATH]     ; 
static TCHAR szDefExt[MAX_PATH]   ; 

ZeroMemory(&Textopen,sizeof(OPENFILENAME));
ZeroMemory(szFile,MAX_PATH);
ZeroMemory(szFileTitle,MAX_PATH);
ZeroMemory(szDefExt,MAX_PATH);


Textopen.lStructSize  =sizeof(OPENFILENAME);
Textopen.hwndOwner    =(HWND)NULL;
Textopen.hInstance    =(HINSTANCE)NULL;

Textopen.lpstrFile        =szFile;
Textopen.lpstrFileTitle   =szFileTitle;
Textopen.lpstrDefExt      =szDefExt;
Textopen.lpstrTitle       ="Select an Text file";
Textopen.lpstrFilter      ="Executable file (*.txt)\0*.txt\0Any file (*.*)\0*.*\0\0";
Textopen.lpstrInitialDir  =NULL;
Textopen.lpstrCustomFilter=NULL;
Textopen.lpTemplateName   =NULL;

Textopen.nMaxFile      =MAX_PATH;
Textopen.nMaxFileTitle =MAX_PATH;
Textopen.nMaxCustFilter=NULL;

Textopen.Flags         =OFN_HIDEREADONLY;
Textopen.lCustData     =NULL;
Textopen.lpfnHook      =(LPOFNHOOKPROC)NULL;
Textopen.nFileExtension=0x0000;
Textopen.nFileOffset   =0x0000;
Textopen.nFilterIndex  =0L;


if(GetOpenFileName ((LPOPENFILENAME)&Textopen))
::MessageBox (NULL,Textopen.lpstrFile,NULL,MB_OK);

7 - هذا المثال تكملة للمثال السابق , سنقوم بقرائة محتوى الملف النصي الذي

سيتم إختيارة , لاحظ : سيتم التغيير من عند الدالة GetOpenFileName

if(GetOpenFileName ((LPOPENFILENAME)&Textopen))
{

HANDLE hfile=INVALID_HANDLE_VALUE;
DWORD szbyte,nbb;
LPTSTR data=NULL;
hfile=CreateFile (Textopen.lpstrFile,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,
     (LPSECURITY_ATTRIBUTES)NULL,OPEN_EXISTING ,0,NULL);

if(hfile!=INVALID_HANDLE_VALUE)
{
szbyte=GetFileSize (hfile,NULL);
data=(LPTSTR)VirtualAlloc (NULL,szbyte,MEM_RESERVE|MEM_COMMIT,PAGE_READWRITE);

if(data) {

ReadFile (hfile,data,szbyte,&nbb,NULL);
::MessageBox (NULL,data,"data",MB_OK);
VirtualFree (data,0,MEM_RELEASE);
}

}

CloseHandle (hfile);

8 - عرض لوحة الألوان لإختيار لون

CHOOSECOLOR cc;
COLORREF rgbrr;

cc.lStructSize = sizeof(CHOOSECOLOR);
cc.hwndOwner = NULL;
cc.hInstance=NULL;
cc.Flags = CC_ANYCOLOR|CC_FULLOPEN|CC_RGBINIT;
cc.lpCustColors=&rgbrr;
cc.rgbResult =RGB(255,0,0);

ChooseColor (&cc);

9- عرض المسارات الفرعية للمستخدم

ويتطلب تعريف ملف , إذا كنت تستخدم MFC لا يحتاج أن تضيف شيء

#include <shlobj.h>

LPITEMIDLIST lp;
TCHAR path[MAX_PATH];

/// عرض مسار سطح المكتب للمستخدم
SHGetSpecialFolderLocation(NULL ,CSIDL_DESKTOP ,&lp);
SHGetPathFromIDList (lp,path);

::MessageBox (NULL,path,"path",MB_OK);

/// عرض مسار مجلد الخطوط
SHGetSpecialFolderLocation(NULL ,CSIDL_FONTS  ,&lp);
SHGetPathFromIDList (lp,path);

::MessageBox (NULL,path,"path",MB_OK);

/// عرض مسار الكوكيز
SHGetSpecialFolderLocation(NULL ,CSIDL_COOKIES   ,&lp);
SHGetPathFromIDList (lp,path);

::MessageBox (NULL,path,"path",MB_OK);

/// عرض مسار الحافظة
SHGetSpecialFolderLocation(NULL ,CSIDL_HISTORY    ,&lp);
SHGetPathFromIDList (lp,path);

::MessageBox (NULL,path,"path",MB_OK);

/// عرض مسار المفضلة
SHGetSpecialFolderLocation(NULL ,CSIDL_FAVORITES     ,&lp);
SHGetPathFromIDList (lp,path);

::MessageBox (NULL,path,"path",MB_OK);

/// عرض مسار  الكاش للمتصفح
SHGetSpecialFolderLocation(NULL ,CSIDL_INTERNET_CACHE      ,&lp);
SHGetPathFromIDList (lp,path);

::MessageBox (NULL,path,"path",MB_OK);

/// عرض مسار قائمة بدء التشغيل

SHGetSpecialFolderLocation(NULL ,CSIDL_STARTUP,&lp);
SHGetPathFromIDList (lp,path);

::MessageBox (NULL,path,"path",MB_OK);

وتوجد مسارات أخرى فقط إستبدل القيم

CSIDL_SENDTO

CSIDL_RECENT

CSIDL_PROGRAMS

CSIDL_PRINTHOOD

CSIDL_PRINTERS

CSIDL_PERSONAL

CSIDL_NETWORK

CSIDL_DRIVES

CSIDL_CONTROLS

CSIDL_BITBUCKET

CSIDL_APPDATA

CSIDL_TEMPLATES

CSIDL_ALTSTARTUP

CSIDL_COMMON_DESKTOPDIRECTORY

CSIDL_COMMON_FAVORITES

CSIDL_COMMON_PROGRAMS

CSIDL_COMMON_STARTMENU

ولآن قم بدمج الأفكار لتحصل على برنامج

مثلا هذة الفكرة والفكرة 2 لعرض ملفات الكويكز في الجهاز ومعرفة المواقع التي تمت زيارتها

عن طريق عرض محتوى الحافظة أو عن طريق سرد قيم الريجستري في الفكرة 5

---------------

10 - إيجاد المساحة الحرة في القرص

DWORD aa,bb,cc,dd;
DWORD nbyte=0;
TCHAR show[MAX_PATH];

GetDiskFreeSpace("d:\\",&aa,&bb,&cc,&dd);

nbyte=(cc*aa)*bb;

ZeroMemory(show,100);
itoa(nbyte,show,10);   // هذة المايكرو لتغيير الأرقام إلى حروف
::MessageBox (NULL,show,"Free",MB_OK);

11 - عرض المعلومات الفيزيائية عن القرص مثلا عدد السلندرات والقطاعات

ورأس الكتابة والتجمعات و..و , يجب إضافة ملف تعريف في بداية الصفحة وهو

#include <winioctl.h>

ثم قم بكتابة

DWORD cb;
DISK_GEOMETRY pF={0};
TCHAR data[100];
HANDLE hDevs;

hDevs=CreateFile ("\\\\.\\C:",GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,
      OPEN_EXISTING,0,NULL);

if(hDevs!=INVALID_HANDLE_VALUE)
{
DeviceIoControl (hDevs,IOCTL_DISK_GET_DRIVE_GEOMETRY
     ,NULL,0,&pF,sizeof(pF),&cb,0);

// عدد المسارات في السلندر أو الإسطوانة
ZeroMemory(data,100);
itoa(pF.TracksPerCylinder ,data,10);
::MessageBox (NULL,data,"TracksPerCylinder",MB_OK);

//عدد البايتات في القطاع
ZeroMemory(data,100);
itoa(pF.BytesPerSector ,data,10);
::MessageBox (NULL,data,"BytesPerSector",MB_OK);

/// ومعلومات أخرى  تجدها في البنية
}
CloseHandle (hDevs);

12 - عرض الأقسام في مقدمة القرص وبعض المعلومات الفيزيائية

تستفيد من هذة الدالة في معرفة الأنظمة الموجودة على القرص مثلا وندوز أو لينكس أو كم نظام بالإضافة إلى نوع نظام الملفات ومعلومات أخرى

DWORD cb;
PARTITION_INFORMATION pF={0};
TCHAR data[100];
HANDLE hDevs;

hDevs=CreateFile ("\\\\.\\C:",GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,
      OPEN_EXISTING,0,NULL);

if(hDevs!=INVALID_HANDLE_VALUE)
{
DeviceIoControl (hDevs,IOCTL_DISK_GET_PARTITION_INFO
     ,NULL,0,&pF,sizeof(pF),&cb,0);

// عدد أقسام القرص
ZeroMemory(data,100);
itoa(pF.PartitionNumber ,data,10);
::MessageBox (NULL,data,"PartitionNumber",MB_OK);

// عدد القطاعات المخفية
ZeroMemory(data,100);
itoa(pF.HiddenSectors ,data,10);
::MessageBox (NULL,data,"HiddenSectors",MB_OK);

}
CloseHandle (hDevs);

وتحتوي البنية على معلومات أخرى مثل نوع القسم pF.PartitionType

وهو يأخذ أحد القيم التالية

PARTITION_ENTRY_UNUSED           :Entry unused. 
PARTITION_FAT_12                            :Specifies a partition with 12-bit FAT entries. 
PARTITION_XENIX_1                          :Specifies a Xenix type 1 partition. 
PARTITION_XENIX_2                          :Specifies a Xenix type 2 partition. 
PARTITION_FAT_16                            :Specifies a partition with 16-bit FAT entries. 
PARTITION_EXTENDED                     : Specifies an extended partition entry. 
PARTITION_HUGE                              :Specifies an MS-DOS V4 huge partition. 
PARTITION_IFS                                   :Specifies an IFS partition. 
PARTITION_PREP                               :Specifies a PowerPC Reference Platform partition. 
PARTITION_UNIX                               :Specifies a UNIX partition. 
VALID_NTFT                                         :Specifies an NTFT partition. 
PARTITION_XINT13                             : Windows 95 and Windows 98

أعتقد بأنا خرجنا عن المستوى المحدد لهذا الموضوع , وكنا سندخل في الإسمبلي :)

المهم بقيت دالتين ونرجع للأفكار السريعة

حالة منافذ الإتصال للهاردوير , مثل COM1 , COM2... وأهم شيء حالة وخصائص المودم

13 - لمعرفة حالة المودم بشكل تفصيلي , مثل سرعة النقل

وحجم بايت النقل وبايت التحكم والحماية و بروتكول النقل و..و

HANDLE hDev;
TCHAR data[100];
// ملاحظة قد يتغير رقم المنفذ , على حسب منفذ المودم
hDev=CreateFile ("\\\\.\\COM1",GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL); 

if(hDev!=INVALID_HANDLE_VALUE )
{
DCB dcb;
dcb.DCBlength =sizeof(dcb);
GetCommState(hDev,&dcb);
// تجد كل هذة المعلومات في هذة البنية dcb
//
}
CloseHandle (hDev);

خصائص المنافذ للهاردوير

والطريقة مشابهة للكود السابق فقط غير البنية والدالة إلى

COMMPROP

GetCommProperties

----------------------------------------------

نرجع للأفكار السريعة والمفيدة ,,,

14 - نقل المتصفح لموقع أو عرض صفحة إنترنت

ShellExecute (NULL,"open",(LPCTSTR)"www.arabteam2000.com",NULL,NULL,SW_SHOW);

15- أسهل طريقة لتشغيل ملف تنفيذي

WinExec ("D:\\DIALOG.exe",SW_SHOW);

16 - طريقة إفراغ سلة المحذوفات

SHEmptyRecycleBin (NULL,NULL,NULL);

---------------

وبالتأكيد بقية أفكار ودوال كثيرة , لو كل عضو يكتب كود واحد يمكن نخلصها ؟؟!

المهم : أتمنى المشاركة من الأعضاء ليكون مرجع للمبتدئين في لغة السي

وبالتوفيق ,,,

http://www.jaascois.com

*************************************************

مجموعة مواضيع - إحتراف البرمجة -

ّ~~~~~~~~~~~~~~~~~~~~~~

البرمجة المتقدمة & الهندسة العكسية & برمجة وأمن الأنظمة

/index.php?showtopic=45002

آخر المواضيع :

+- تحليل جرائم الكمبيوتر -+

أنظمة اليونكس(Solaris,HP, AIX,SCO)وانواع المعالجات

ثغرة SMS لأجهزة الجوال Siemens 3568i !

أخطاء وثغرات البرامج العربية !!!

سلسلة مواضيع - أمن وحماية مواقع الويب -

E البرمجة المتقدمة X للملفات التنفيذية E

سلسلة مواضيع ثغرات الأنظمة وإختراق الأجهزة

**************************************************

<span style='font-size:14pt;line-height:100%'>الإرادة تحـــقق السيـــادة</span>

**************************************************

#2

حسنا يا Jaas مصر تفحمنا :)

توجد خدمة رائعة لو كتب الله لها أن تقوم سنحول الموقع لتفحة بوجد أمثالك حقيقة ,, وهي فرصة لنشر هذا العلم وبشكل واسع جدا جدا ,, والفكرة إنشاء شبكة كال MSDN عربية 100 % وأعتقد أنك تعرف الخطوط العريضة للمشروع .

المهم سنضيف كل مانجده أمامنا في هذه الشبكة وستكون جزء من الموقع طبعا ب SubDomain بإذن الله .

============================

سؤال شخصي لك يا Jass من أين تستطيع تجميع كل هذه المعلومات ,, أنا مثلا لدي بعض المذكرات أقوم بكتابتها وقت إستكشاف تقنية أو مجموعة دوال معينة وأدون فيها ملاحظاتي والنتيجة النهائية ,, وطريقة الإستخدام المثلى ,, وأفهرس المراجع التي جاءت بي لهذه التقنية من مواقع وكتب لدي ,,

فكيف تفهرس أنت زخم المعلومات لديك بهذا الشكل ,, لأن المشكلة الأكبر التي أرها كيف تحصل على المعلومة وتثبتها لتصل إليها سريعا لاحقا .. وأعتقد أنها أهم من طريقة الإستفادة منها بعد معرفتها .

=========================

يوجد Set دوال متعددة أريد أن أكتب عنها ,, لكن لاأستطيع أن أفعل أي شيء قبل أن نفتح الشبكة الجديدة لضيق الوقت فقط ليس إلا ,,

والله يعين .

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#3

مرحبا أخي هيثم ,,,

بالنسبة للمكتبة فأنا معكم في قسم المشرفين ومطلع على المشروع

ولكن أنتظر الوقت المناسب للدخول في المشروع ,,

أما عن طريقة تخزين المعلومات

لو كنت تقصد مثل هذة المعلومات مثلا دوال , فأنا لا أخزنها , إذا إحتجت معلومات عن

دالة جديدة أذهب إلى MSDN أو مراجع الدوال

أما المعلومات , مثل البحوث والكتب والمراجع

فطريقتي في تخزينها بدائية ,, ملفات نصية + صفحات إنترنت

اقتباس
يوجد Set دوال متعددة أريد أن أكتب عنها ,, لكن لاأستطيع أن أفعل أي شيء قبل أن نفتح الشبكة الجديدة لضيق الوقت فقط ليس إلا

يا أخي هيثم أنت يكفيك فقط منتدى المشرفين ؟! والله يعينك علية

المهم

تكملة الدوال :

17 - إنشاء مجلد جديد

CreateDirectory ("d:\\mydir",NULL);

18 - نسخ ملف من مجلد إلى آخر

CopyFile ("c:\\my.txt","d:\\Nmy.txt",FALSE);

19 - نقل ملف دون نسخة

MoveFile ("c:\\my.txt","d:\\Nmy.txt");

20 - معرفة الوقت والتاريخ في النظام

SYSTEMTIME syst;
GetSystemTime (&syst);

//syst.wYear 
//syst.wMonth 
//syst.wDayOfWeek 
//syst.wDay 
//syst.wHour 
//syst.wMinute 
//syst.wSecond 
//syst.wMilliseconds

21 - معرفة مساحة منطقة العمل على الشاشة

بمعنى مساحة سطح المكتب دون شريط الأدوات

TCHAR data[100];
RECT rect={0,0,0,0};
SystemParametersInfo(SPI_GETWORKAREA ,0,&rect,0);

wsprintf(data,"%d * %d",rect.right ,rect.bottom );

::MessageBox (NULL,data ,"WorkA",MB_OK);

22 - مدة الإنتظار لعرض حافظة الشاشة ,, أو الشاشة المؤقتة

TCHAR data[100];
DWORD time=0;

SystemParametersInfo(SPI_GETSCREENSAVETIMEOUT,0,&time,0);

time=time/60;

wsprintf(data,"time= %d",time);

::MessageBox (NULL,data ,"TM",MB_OK);

23 - معرفة البرنامج المشغل لملف بإمتداد معين , مثال ضع ملف نصي في المسار

d:\Nmy.txt

ونفذ الكود

TCHAR data[MAX_PATH];

FindExecutable("d:\\Nmy.txt",NULL,data);
::MessageBox (NULL,data,"find",MB_OK);

24 - معرفة إصدار نظام التشغيل

OSVERSIONINFO osv;
osv.dwOSVersionInfoSize =sizeof(OSVERSIONINFO);

GetVersionEx(&osv);

switch(osv.dwPlatformId)
{

case VER_PLATFORM_WIN32s:
::MessageBox (NULL,"Windows 3.1","OS",MB_OK);
break;

case VER_PLATFORM_WIN32_WINDOWS:
::MessageBox (NULL,"Windows 95,98,ME ","OS",MB_OK);
break;

case VER_PLATFORM_WIN32_NT:
::MessageBox (NULL,"Windows 2000,XP,2003","OS",MB_OK);
break;


default:
::MessageBox (NULL,"Windows ?","OS",MB_OK);

break;
}

25 - إغلاق الجهاز

ExitWindowsEx(EWX_SHUTDOWN,0);

-

//restarts 
//ExitWindowsEx(EWX_REBOOT,0);
//LOG OFF
//ExitWindowsEx(EWX_LOGOFF,0);

---------

وكل ما أجد وقت سأكتب بعض الدوال ... والبركة فيكم

-

http://www.jaascois.com

*************************************************

مجموعة مواضيع - إحتراف البرمجة -

ّ~~~~~~~~~~~~~~~~~~~~~~

البرمجة المتقدمة & الهندسة العكسية & برمجة وأمن الأنظمة

/index.php?showtopic=45002

آخر المواضيع :

+- تحليل جرائم الكمبيوتر -+

أنظمة اليونكس(Solaris,HP, AIX,SCO)وانواع المعالجات

ثغرة SMS لأجهزة الجوال Siemens 3568i !

أخطاء وثغرات البرامج العربية !!!

سلسلة مواضيع - أمن وحماية مواقع الويب -

E البرمجة المتقدمة X للملفات التنفيذية E

سلسلة مواضيع ثغرات الأنظمة وإختراق الأجهزة

**************************************************

<span style='font-size:14pt;line-height:100%'>الإرادة تحـــقق السيـــادة</span>

**************************************************

#4

السلام عليكم

موضوع جيد وجزاك الله خيرا على الموضوعات التي تكتبها .

لي تعليق متواضع

اقتباس
3 - عرض العمليات والبرامج الموجودة حاليا في الذاكرة

مجال البحث في هذا الموضوع ممكن نوسعه اكثر باعطاء اكثر من طريقة تعتمد على نوع النظام , فهناك عدة طرق منها التي ذكرتها . واحداها والتي تستخدم في NT Family هي استخدام Native API .

اقتباس
25 - إغلاق الجهاز

أعتقد أنك نسيت -عن غير قصد - الإشارة لشئ هام , On NT Family OSs لابد أن تكون لديك الصلاحيات لذلك (SE_SHUTDOWN_NAME privilege) ...

---

لدي رأي لا أعلم ان كنت توافقني عليه ام لا وهو :

كل فتره نكتب عن دالة API بتعمق اكثر بحيث نحاول فهم عمل الدالة بعد عمل disassebmbling لمكتبات الـ dll التابعة للنظام ( Deep inside API ) .

أو لنقم بعمل تشريح لبرنامج نرى انه مفيد لنعرف الطريقة التي يعمل بها البرنامج . سيقول البعض لا تعد اختراع العجلة مرة أخرى , ولست اريد ذلك لكن لمجرد التعلم وحب الاستطلاع فانا أومن بالمقولة Art for art's sake .

أتذكر زمان كانت لدي فكره بعمل disassembling لملفات exe الموجودة في system32 لفهم طريقة عملها وكتابه برامج مشابهه لكن تكاسلت ...

كم أتمنى أن أجد الوقت لأكتب عن مواضيع تطرق لها كتاب Inside Windows 2000 , أو أترجم مواضيع أكثر من رائعة أجدها في الصفحات الصينية !!

Jaas :

You may try to play with Native API , I think you will enjoy

Best regards

CIONO1

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#5

أوو الباك أب دخل :)

اقتباس
5 - سرد القيم والمعلومات لمفتاح معين في الريجستري

بالمناسبة أفدتني بشكل كبير وأنت لاتعرف يا Jaas يوم أمس بخصوص الرجستري ,, المشكلة كانت في دالة RegQuereyValueEx ,, لم تكن تستعلم بالشكل المطلوب ولاتعيد نتيجة ! لم أعرف السبب بعد ,, عموما دالة RegEnumValue مناسبة جدا لإيجاد إسم المفتاح وقيمته ,,

=================

لإضافة قيم للمفاتيح ,, يجب أن نغير طريقة فتح المسجل أولا وإستلام مقبض صالح للكتابة بتمرير البارمتر KEY_ALL_ACCESS لعمل كل المطلوب على الرجستري من قراءة وكتابة وتغيير وإنشاء وكل الحقوق الموجودة .

HKEY hky;
long rel;

rel=RegOpenKeyEx (HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer",0,KEY_ALL_ACCESS,&hky);

if(rel==0)
{
TCHAR strval[MAX_PATH];
TCHAR strdat[MAX_PATH];
DWORD szofval=MAX_PATH;
DWORD szofdat=MAX_PATH;

DWORD ntyp=3;
DWORD ind=0;

char * data = new char[20];
memcpy(data ,&ntyp,4);
//strcpy(data,"0");
//DWORD data = 1;
if(RegSetValueEx(hky,"SearchHidden",NULL,REG_DWORD,(PBYTE)data,sizeof(data))==ERROR_SUCCESS)
{
	//Evrey Thing Is OK ..

}

يمكن إستخدام دالة RegSetValueEx لإنشاء قيم جديدة وتعمل عمل RegCreateKeyEx في حال لم يكن المفتاح موجودا ,, أو تستخدم RegSetValueEx لتغيير قيم في المسجل موجودة .

توجد دوال أخرى في المسجل مثلا لمعرفة حجم أكبر بيانات موجودة تحت مفتاح فرعي نستخدم الدالة RegQuereyInfoKey كالتالي :

DWORD max;
RegQuereyInfoKey(hkey,NULL,NULL,NULL,NULL,&max,NULL,NULL,NULL,NULL,NULL,NULL);

max++;

char * data = new char[max];

//data is Agood pointer to put any key data in

ويجب أن ننتبه إلى أنه يجب أن يكون للمستخدم الذي يشغل قطعة الكود حق الوصول المطلوب للرجستري لأداء المهمة المطلوبة ,,

اقتباس
- إغلاق الجهاز

أعتقد أنك نسيت -عن غير قصد - الإشارة لشئ هام , On NT Family OSs لابد أن تكون لديك الصلاحيات لذلك (SE_SHUTDOWN_NAME privilege) ...

نعم يجب أن يكون للمستخدم الذي يشغل الدالة ExitWindowsEx أيضا إمتيازات تسمى بال user rights ويمكنك تغييرها بشكل يدوي كالتالي :

إذهب الى run في وندوز ,, وشغل mmc ,, ثم إذهب إلى File ثم Add new snap in ثم إبحث عن group policy و OK ,,

ستجد شجرة ال Plicyes موجودة وتتبع هذا الدليل :

Computer Configuration/Windows Settings/local plicies/user right Assingment ,, وستجد الإمتيازات على مستوى المستخدم وهي حوالي 35 فقط ,, منها إمتياز :

Shut Down the system يجب أن يكون اليوزر الذي يشغل الكود موجود ضمن لائحة من يملك هذا الإمتياز .

طبعا يمكن تغيير الإمتياز برمجيا :D لكن بشرط أن يكون الذي يشغل كود تغيير الإمتيازات User يملك حق تغيير الإمتيازات أيضا :)

بشكل سريع ولي تفصيل لاحق في الموضع , الدالات التي نغير بها الإمتيازات تسمى بدالات LSA ,, وأهم دالة فيها :

LsaAddAccountRights ,, وخذ قطعة الشيفرة لتغيير الإمتياز :

LsaOpenPolicy(...);
LSA_UNICODE_STRING s[2];
ZeroMemory(&s,sizeof(s));
lstrcpy((LPSTR)s[0].Buffer,SE_INTERACTIVE_LOGON_NAME);
s[0].Length=lstrlen((LPSTR)s[0].Buffer)*sizeof(WCHAR);
s[0].MaximumLength=s[0].Length+sizeof(WCHAR);

lstrcpy((LPSTR)s[1].Buffer,SE_SHUTDOWN_NAME );
s[0].Length=lstrlen((LPSTR)s[1].Buffer)*sizeof(WCHAR);
s[0].MaximumLength=s[1].Length+sizeof(WCHAR);

LsaAddAccountRights(hpolicy,psid,s,2);

يجب في البداية الحصول على مقبض ل hpolicy صالح ليمرر لاحقا للدالة LsaAddAccountRights ,, وهنا سيتم إعطاء اليوزر بالمعرف psid وهي من النوع PSID وهو عبارة عن معرف SID خاص بمستخدم معين ,, ويمكن الحصول على معرف SID الخاص بمستخدم معين بمجموعة دوال أخرى أيضا:huh: سأعطي عنها مثال لاحقا ,,

كنت أكتب في هذا الرد الساعة الواحدة ظهرا هنا ,, لكن أضفته للتو لسبب بسيط جدا ,, أني كنت أريد أن أعرف ماذا يفعل ال Right الذي هو :

SE_INTERACTIVE_LOGON_NAME

قلت في نفسي ماذا يفعل ياترى ,, ولم أحب أن أدرج المشاركة وأنا لاأعرف ماذا يفعل ,, فقط أعرف أنه أحد الأذونات ال35 الكلية الموجودة ,, لكن مايفعله عرفته عن طريق التجربة والخطأ :)

في المثال المرفق برنامج وهو أحد أمثلة كتاب برمجة التطبيقات من جانب الملقم لجفري ريش وجايسون كلارك ,, المهم في الكتاب أحد الأمثلة التي تعينك على اللعب والعبث بالسياسات والإمتيازات ,, فيه طريقة تغيير الأذونات هذه ,, ووجدت ال SE_INTERACTIVE_LOGON_NAME وقلت فالأجرب ,, ولحماقتي إخترت المجموعة Administrators وأعطيت حق المنع وكانت الصيغة مربكة ,, المهم غيرت بعض الأمور سابقا ولم أتوقع أن يحدث تغيير بهذا الشكل هذه المرة !!

لم يحدث شيء طبعا ,, فقلت طيب نعمل switch user وأخرج من ال XP لشاشة إدخال اليوزر مرة أخرى فلم أجد شيء غريبا ,, المهم كتبت كلمة المرور لليوزر الخاص بي ,, فكانت شاشة الدخول تظهر بسرعة وتختفي وتعيني مرة أخرى لكتابة كلمة المرور

,, ولم أستطع الدخول !! قلت أسوي ريستارت ربما حدث شيء ما ,, في المرة التالية بعد إعادة التشغيل كتبت كلمة المرور ودخلت ,, وأفاجأ بظهور Message كئيبة تخبرني بأن المستخدم الذي يريد الدخول من مجموعة Administrators لايحق له الدخول Localy للوندوز !!

كدت أجن وإكتشفت فداحة الخطأ بعد أن عرفت أن كل اليوزرز الموجودين لدي هنا في شاشة دخول الوندوز من المجموعة Administrators حتى عند الدخول بال safemode لم تظهر لي شاشة الدخول بكتابة اليوزر وكلمة المرور بل الدخول على طريقة ال XP الكئيبة بخيارين لل administrator واليوزر HGB الخاص بي !! وكلهم في مجموعة Administrators ..

قضيت 3 ساعات من محاولة حل المشكلة وبائت بالفشل وإستسلمت وفرمت الدرايف كاملا بعد عمل repare بال Console وحتى بال repear الخص بال setup ولم أنجح ف تغيير أي شيء !! وهأنا أكتب من وندوز جديد الآن ,, أخيرا إتعظت وفهمت أن هذا الوندوز الأحمق يعمل وفق صيغة القانون لايحمي المغفلين ,, ولايمنعك من القيام بأي نوع من أنواع الحماقات التي تريدها !!

عموما سأضيف المزيد هنا لاحقا بإذن الله بعد أن أثبت طن البرامج التي أحتاجها من جديد بسبب هذا الإمتياز الكئيب !!

تحذير لاتعبث بالبرنامج المرفق لأن قد يسبب مشاكل لغير المتمرسين أمثالي لتتوصل لطريق مسدود في النهاية بعمل فورمات للوندوز !!

Trustee Man.rar

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#6

مرحبتين بالشباب ,,,,,,

بصراحة أردت من هذا الموضوع أن يكون مثل قسم الفيجول بيسك ,, يعني الزبدة بدون مقدمات

أخي tmaaa

بالنسبة لطريقة عرض العمليات ,, بالتأكيد توجد أكثر من طريقة ولكن ليست كلها تعمل في كل إصدارت وندوز

وبما أننا في منتدى فتوقع أن تجرب في كل الأنظمة , ولذلك فإني أستخدم الطرق القياسية التي ستعمل في إصدارات وندوز المختلفة

بالنسبة لإغلاق الجهاز ,, بالفعل قد أكون نسيتها ,, وهي الدالة الوحيدة التي لم أجربها

قبل طرح الموضوع ,,, لأني كنت مستعجل ولا أريد إغلاق الجهاز والدخول مرة أخرى :)

أما عن رأيك , فأنا من أول المشجعيين لهذا الموضوع , وقد بدأنا بة في قسم الإسمبلي

ولكن بطريقة غير مباشرة ,,, إلى أن يظهر لنا محترفين في نبش الأكواد من البرامج

وبعد ذلك سنخوض في برامج النظام

-------------------------

أخي هيثم ,,, أشكرك على الأكواد , وحمد لله على السلامة

بالنسبة للورطة التي وقعت فيها فأنا لم أفهمها , ولذلك سأقوم اليوم بتجربتها لكي أفهمها :)

وبالتوفيق

http://www.jaascois.com

*************************************************

مجموعة مواضيع - إحتراف البرمجة -

ّ~~~~~~~~~~~~~~~~~~~~~~

البرمجة المتقدمة & الهندسة العكسية & برمجة وأمن الأنظمة

/index.php?showtopic=45002

آخر المواضيع :

+- تحليل جرائم الكمبيوتر -+

أنظمة اليونكس(Solaris,HP, AIX,SCO)وانواع المعالجات

ثغرة SMS لأجهزة الجوال Siemens 3568i !

أخطاء وثغرات البرامج العربية !!!

سلسلة مواضيع - أمن وحماية مواقع الويب -

E البرمجة المتقدمة X للملفات التنفيذية E

سلسلة مواضيع ثغرات الأنظمة وإختراق الأجهزة

**************************************************

<span style='font-size:14pt;line-height:100%'>الإرادة تحـــقق السيـــادة</span>

**************************************************

#7
اقتباس
بالنسبة لإغلاق الجهاز ,, بالفعل قد أكون نسيتها ,, وهي الدالة الوحيدة التي لم أجربها

قبل طرح الموضوع ,,, لأني كنت مستعجل ولا أريد إغلاق الجهاز والدخول مرة أخرى

بالمناسبة حتى لو جربتها ستعمل مباشرة في وندوز XP أو أي وندوز موجود خارج نطاق شبكة وليس في شبكة Domain ,, حيث إفتراضيا أغلب المجموعات لها حق عمل Shut Down ,, حتى المستخدمين ك Guest .

اقتباس
بصراحة أردت من هذا الموضوع أن يكون مثل قسم الفيجول بيسك ,, يعني الزبدة بدون مقدمات

تمام فهمت عليك ,, ويوجد Set دوال ومجموعات كثلها طرج أكثر من مرة سابقا ,, علينا أن نهتم بها أيضا .

=====================

كنت سأدرج بعض الدوال الخاصة بالتحكم بالوصول ACL ودول NetAPI ,, لكن نتركهم لاحقا لموضوع منفصل ,, لأنها متخصصة الإستخدام لمجموعة معينة من المبرمجين أكثر ,, غير ذلك تحتاج لبعض التفصيل وهو مالانريده هنا :)

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#8

السلام عليكم

أثناء بحثي عن شئ في المنتدى كانت إحدى النتائج هذا الموضوع ولفت انتباهي ما يلي :

HGB

اقتباس
توجد خدمة رائعة لو كتب الله لها أن تقوم سنحول الموقع لتفحة بوجد أمثالك حقيقة ,, وهي فرصة لنشر هذا العلم وبشكل واسع جدا جدا ,, والفكرة إنشاء شبكة كال MSDN عربية 100 % وأعتقد أنك تعرف الخطوط العريضة للمشروع

JAAS

اقتباس
بالنسبة للمكتبة فأنا معكم في قسم المشرفين ومطلع على المشروع

ولكن أنتظر الوقت المناسب للدخول في المشروع ,,

هل تم هذا المشروع , هل توقف العمل به؟ إن كنتم بدأتم به فما نتائجه؟

إعذروني ... غاوي تنبيش في الماضي :D

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#9

لو استخدمت معرفك الاخر لاستطعت معرفة التطورات فى المشروع لانه سيظهر لك قسم خاص بها باعلى صفحة المنتدى

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#10
اقتباس
لو استخدمت معرفك الاخر لاستطعت معرفة التطورات فى المشروع لانه سيظهر لك قسم خاص بها باعلى صفحة المنتدى

قوية ...

يعني سأضطر لإستخدام المعرف القديم بعد أن كنت قررت عدم استعماله :wacko:

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#11

شكرا لك اخي الغالي JAAS علي تلك الدوال الرائعه ولكن عندي سؤال لو سمحت

انا عايز اعمل مثال زي اللي بيفتح Text File بس يفتح ملف wav ويقوم بتشغيله وانا حاولت فيها كتيير ومعرفتش فارجوا منك ان تقول لي ماهي الطريقه التي يجب اتباعها لعمل هذه الداله

Khaled_Tiger

النجاح الوحيد في الحياة هو أن تستطيع أن تحيا حياتك بالطريقة التي تريدها

يخاطبني السفيه بكل قبح *** فأكره أن أكون له مجيبا

يزيد سفاهة فأزيد حلمــا *** كعود زاده الإحراق طيبا

إذا نطق السفيه فلا تجبه *** فخير من إجابته السكوت

فإن كلَمته فرَجت عنــــه *** وإن خليته كمداً يـمـــوت

#12

بسيطة ضع ملف الـwav فى الـresource وبعد ذلك إستدعي الدالة PlaySound وسيقوم البرنامج بتشغيل ملف الصوت..

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#13

جزاك الله خيرا اخي علي الرد ولقد قمت بعمل البرنامج ولكن هناك ملف Coredll.lib لابد من ان يكون موجود في الlibrary ويظهر link error ولم اجد هذا الملف برجاء ان اخبرني اين اجد هذا الملف(Coredll.lib) وشكرا

Khaled_Tiger

النجاح الوحيد في الحياة هو أن تستطيع أن تحيا حياتك بالطريقة التي تريدها

يخاطبني السفيه بكل قبح *** فأكره أن أكون له مجيبا

يزيد سفاهة فأزيد حلمــا *** كعود زاده الإحراق طيبا

إذا نطق السفيه فلا تجبه *** فخير من إجابته السكوت

فإن كلَمته فرَجت عنــــه *** وإن خليته كمداً يـمـــوت

#16

أتمنى أن ينقل هذا الموضوع الى قسم برمجة الويندوز حتى يسهل ايجاده

هذا الموضوع مغلق.

مواضيع مشابهة