وبلاگ تخصصي برنامه نويسي با VB

آشنايی با نرم افزار PE Explorer


بررسی کلی

PE Explorer يک مجموعه کامل از ابزارهای چند منظوره برای کاربا فايلهای PE می باشد . اين مجموعه دارای بخشهايي چون مشاهده گر سرآيند PE  ، مشاهده گر API های import و export شده ، جستجوگر سينتکس توابع API ، مشاهده گر/ تغيير دهنده منابع ، اسکنر وابستگی و دي اسمبلر است .
در بالای همه اين امکانات ، اين برنامه دارای يکی از بهترين بازکننده  (Unpacker) های UPX است . با کمک اين مجموعه شما قادر خواهيد بود تا ساختار درونی فايلهای PE را مشاهده ، ويرايش و تعمير کنيد .
اين مجموعه به شما امکان می دهد تا ساختار درونی فايلهای PE را آناليز نموده و تغيير دهيد ، checksum ها را تصحيح نمائيد ، منابع آسيب ديده را تعمير کنيد ، کدهای مخرب در برنامه ها را تشخيص دهيد ، بتوانيد header و جداول موجود در فايلها را تغيير دهيد ، مهندسی معکوس را برای سورس کدهای گمشده انجام دهيد ، import ها و export های DLL های استاندارد را بيابيد ، منابع اطلاعاتی درونی فايلها را تغيير دهيد و ...


فايل PE چيست ؟

فايلهای ( PE ( portable executable ، فايلهای باينری اجرايي در ويندوزهای 32 بيتی می باشد ( مانند DLL ها ، درايور ها و برنامه های اجرايي ) . مجموعه PE Explorer قادراست تا انواع گوناگونی از فايلهای PE را مديريـت کند مانند : EXE ، DLL ، SYS ، DRV ، CPL ، OCX ، SCR و غيره .

برخی از ابزارهای موجود در PE Explorer

1 -  ويرايشگر منبع Resource Editor
PE Explorer دارای يکی از بهترين و کاراترين ويرايشگرهای منبع می باشد . شما توسط اين بخش براحتی می توانيد منابع فايلهای اجرايي را از درون آنها بدون نوشتن هيچگونه اسکريپتی جستجو کرده و تغيير دهيد .
2 - Function Syntax Lookup جستجوگر سينتکس تابع
در زمان مشادهد توابع موجود در يک فايل PE با کليک روی آن تابع می توان سينتکس آن تابع را مشاهده کرد . پارامترهای تابع و مقدير بازگشتی آن نمايش داده می شوند . همچنين می توان با انتخاب يک تابع ، می توان کامنتهایي را به تابع اضافه کرده و يا جزئيات را تغيير داد .
3 - Dependency Scanner اسکنر وابستگی
اين ابزار به شما اجازه می دهد تا بطور بازگشتی ، تمام ماژوال های لينک شده به يک فايل PE را اسکن کنيد . اسکنر وابستگی همچنين وابستگی های delay-load را تشخيص می دهد . اين نوع از وابستگی در Visual C++ 6.0 معرفی شده است .
4 - DisAssembler دی اسمبلر
اين ابزار قادراست سورس اسمبلی اکثر برنامه های نوشته شده با کامپايلرهای مختلف را استخراج نمايد .

دريافت نرم افزار

آخرين نسخه اين مجموعه ( ورژن 1.94 ) را می توانيد از اينجا دريافت کنيد .
کرک اين برنامه را از اينجا می توانيد دريافت کنيد .

+ حامد شیدائیان ; ۳:۳۱ ‎ب.ظ ; سه‌شنبه ٢٥ آذر ،۱۳۸٢
comment نظرات ()

پاسخ به سوالات-۴

1 – نحوه دسترسی به پورت سريال را بيان کنيد .
پاسخ : با چندين روش می توان به پورت سريال در ويژوال بيسيک دسترسی داشت :

- استفاده از کنترل MSCOMM موجود در خود ويژوال بيسيک . برای استفاده از اين کنترل وارد منوی Project شده و از بخش Component مورد Microsoft Comm Control را انتخاب کنيد . سپس می توانيد تنظيمات مورد نظر خود را از قبل bitrate ، وجود parity و تعداد   stop bit  و غيره انجام دهيد . پارامترهایي مانند RThreshold ، InputMode و Settings مربوط به اين کنترل را می توانيد تنظيم کنيد .
برای اطلاعات بيشتر به اين آدرس مراجعه کنيد .

- استفاده از کنترلهای پيشرفته تر : با جستجو در اينترنت می توانيد کنترلهای پيشرفته تری پيدا کنيد که البته اکثر آنها رايگان نيستند . مثل اين آدرس يا اين آدرس

- دسترسی مستقيم به پورت سريال : برای اطلاعات بيشتر به کتاب زير مراجعه کنيد :
80X86 IBM PC & Compatible Computers : Design & Interfacing of IBM PC, PS & Compatible Computers, Volume II
By Muhammad Ali Mazidi, Janice Mazidi

در اين آدرس و اين آدرس در مورد چگونگی دسترسی به پورت سريال در .NET توضيح داده شده است .

اين آدرس دارای لينکهای بسيار خوبی در زمينه مفاهيم پورت سريال ، کاربردهای آن ، نحوه برنامه نويسی آن و معرفی کتابهای مرتبط می باشد .

2 – چگونه می توان با پورت USB در ويژوال بيسيک کار کرد ؟
پاسخ : به اين آدرس و اين آدرس مراجعه کنيد .

3 -  چگونه می توان بين ويژوال بیسيک و اکسس ارتباط برقرار کرد .
پاسخ : به کتاب برنامه نويسی بانکهای اطلاعاتی در ويژوال بيسيک 6 چاپ شده توسط انتشارات نص مراجعه کنيد .
در ضمن قبلاً در همين وبلاگ بطور خلاصه ، کار با بانکهای اطلاعاتی با استفاده از ADO را توضيح داده ام .

4 – دوست عزيزی سوالهای زير را در مورد Reporting در ويژوال بيسيک پرسيده اند :
- چگونه  می توان در زمان اجرا در Data Environment ، Command جديد ساخت ؟
- چگونه می توان در Data Report ، گزارشهای ديناميک ساخت ؟
- چگونه می توان Data Source يک Data Report را بدون استفاده از Data Environment تنظيم کرد ؟
پاسخ : : به کتاب برنامه نويسی بانکهای اطلاعاتی در ويژوال بيسيک 6 چاپ شده توسط انتشارات نص مراجعه کنيد . در ضمن دوستان اگر نظری دارند بدهند .

5 – چگونه می توان کامپوننتهايي در ويژوال بيسيک را که خاصيت رنگ ندارند مثل یک scrollbar را تغيير رنگ داد . الته اينکار با استفاده از API های setsyscolor و getsyscolor امکان پذير است اما اين API ها باعث تغيير رنگ کل scrollbar ها می شوند که اين درست نيست ؟
پاسخ : دوستان اگر نظری دارند بدهند .

6 – فايلهای RES چه فايلهايي هستند ؟
پاسخ : فايلهای RES فايلهای منبع يا resource می باشند و همانطور که از نامشان پيداست برای ذخيره برخی منابع برنامه مثل آيکون ، کرسر و يا برخی تصاوير بيت مپ مورد استفاده در برنامه که نمی خواهيم فايل آنها بطور جداگانه در کنار برنامه باشد استفاده می شوند .
برای ايجاد فايلهای res در ويژوال بيسيک ابتدا از منوی Add-Ins مورد Add-In Manager را انتخاب کرده و در آنجا VB6 Resource Editor را انتخاب کرده و گزينه Loaded آنرا علامت بزنيد و OKکنيد . حال می توان با استفاده از اين برنامه Res های مورد نظر خود را ايجاد کرده و منابعتان را به آن اضافه کنيد  . پس از ايجاد فايل Res ، با استفاده از منوی Project و انتخاب Add File می توانيد Res مورد نظر را به پروژه اضافه نموده  و از منابع موجود در آن استفاده کنيد .
برای مثال اگر آيکونی به اسم MyImage در فايل Res قرار داده باشيد با دستور زير می توانيد آنرا در  PictureBox مورد نظرتان Load کنيد :

Picture1.Picture=LoadResPicture("MyImage",vbResIcon)

برای اطلاعات بيشتر به اين آدرس مراجعه کنيد .

7 – در مورد  نحوه استفاده از تابع WNetEnumCachedPasswords در ويژوال بيسيک توضيح دهيد .
پاسخ : به اين آدرس مراجعه کنيد .

8 – چگونه می توان يک dll نوشته شده توسط C++ را به refrence های  ويژوال بيسيک اضافه کرد ؟
پاسخ : بايستی علاوه بر آن dll ، فايلهاي منبعی را که آن dll به آنها نياز دارد را در کنار آن قرار دهيد . توسط ابزارهای Dependency Checker مانند نرم افزار PE Explorer می توانيد نام اين dll ها استخراج کنيد .
در مورد نرم افزار PE Explorer بزودی توضيح خواهم داد .

9 - لطفا سايتی برای دانلود کردن ebook های انگليسی به صورت مجانی معرفی کنيد که در زمينه برنامه نويسی باشند ؟
پاسخ : در سايتهای FTP می توانيد بدنبال EBook های مورد نظرتان بگرديد . سايت  www.ftpsearchengines.com آرشيو بسيار خوبی از ليست سايتهای FTP در خود دارد .

10 - در مورد خاصيت راست به چپ كه بعد از كامپايل شدن برنامه بر روي سيستم بدون ويژوال جواب نمي‌دهد ، راهنمايي ام كنيد .
پاسخ : دوستان اگر نظری دارند بدهند . در ضمن مشکل خود را واضحتر بيان کنيد .

11 – در VB.Net چطور ميتونم فايل exe بسازم؟آيا فايل Exe ی من همونيه که در شاخه/Bin جاييه که پروژه رو ذخيره کردم؟اگه همونه من ميتونم اونو بدون نیاز به اکتيو ايکس ديگه ای به کسی بدم(اگه از اکتيوايکس خاصی در برنامم استفاده نکرده باشم)
پاسخ : فايل EXE مورد نظر شما در زمان کامپايل کردن پروژه در دايرکتوری Bin ساخته می شود اما برای Publish کردن برنامه تان بايستی ساير فايلهای منبع برنامه به آن افزوده شده و يک فايل Setup ساخته شوند . برای اينکار شما بايستی از ابزارهای ساخت Setup استفاده کنيد . برای مثال در visual Studio .Net پروژه های از نوع Setup and Deployment اينکار را برای شما انجام می دهند .

12 - در صورت امکان به مبحث کار با شی پرينتر در وی بی بپردازيد .
پاسخ : بزودی در اين زمينه مطالبی خواهم نوشت .

13 – چگونه می توان فرمهای بدونControl box را با کد نويسیMinimize کرد؟
پاسخ : با استفاده از خاصيت WindowsState . برای مثال اگر نام فرم شما Form1 باشد کد زير فرم شما را مينيمم می کند :
Form1.WindowState = 1
و کد زير فرم شما را ماکزيمم می کند :
Form1.WindowState = 2

14 - چه طوری ميشه فونتtooltiptex t را عوض کرد ؟ مثلا فونت اونو فارسی کرد؟
پاسخ : ؟؟؟؟

+ حامد شیدائیان ; ۱۱:۳٧ ‎ق.ظ ; چهارشنبه ۱٩ آذر ،۱۳۸٢
comment نظرات ()

مثالی از کار با توابع DialUp موجود در کتابخانه WinInet

در اين بخش که آخرين بخش از مباحث WinInet API است برنامه ای نمونه برای کار با توابع مودمی اين کتابخانه ارائه خواهيم داد :

برای نوشتن برنامه ای که بتوان از طريق آن با استفاده از مودم به اينترنت متصل شد بصورت زير عمل می کنيم :
در ابتدا بايستی تابع InternetDial را Declare کنيم :

Private Declare Function InternetDial Lib "wininet.dll" Alias "InternetDialA" (ByVal hwndParent As Long, ByVal lpszConnectoid As String, ByVal dwFlags As Long, lpdwConnection As Long, ByVal dwReserved As Long) As Long

سپس وضعيت شماره گيری را در متغيری به اسم lOption قرار می دهيم . اين متغير می تواند مقادير زير را داشته باشد :
- DF_FORCE_ONLINE
- DF_FORCE_UNATTENDED
- DF_DIAL_FORCE_PROMPT
- DF_DIAL_UNATTENDED
حال نام اتصالی را که می خواهيم از آن استفاده شود در متغيری به اسم ConnectionName قرار می دهيم .
همچنين دو متغير به اسم ConnectionID و RetVal را از نوع long تعريف می کنيم .

حال تابع InternetDial را بصورت زير صدا می کنيم :

RetVal = InternetDial(Me.hwnd, ConnectionName, lOption, ConnectionID, 0)

اگر RetVal مخالف صفر باشد عمل Dial بدرستی انجام شده است .

برای قطع اتصال فوق بايستی از تابع InternetHangUp استفاده کنيم . برای اينکار ابتدا تابع فوق را Declare می کنيم :

Private Declare Function InternetHangUp Lib "wininet.dll" (ByVal dwConnection As Long, ByVal dwReserved As Long) As Long

سپس اين تابع را بصورت زير فراخوانی می کنيم :

RetVal = InternetHangUp(ConnectionID, 0)

برای اينکه مودم را مجبور کنيم تا بطور اتوماتيک از اتصال پيش فرض سيستم برای شماره گيری استفاده کند از تابع InternetAutodial  استفاده می کنيم .
برای اينکار ابتدا تابع را Declare می کنيم :

Private Declare Function InternetAutodial Lib "wininet.dll" (ByVal dwFlags As Long, ByVal hwndParent As Long) As Long

سپس تابع را بصورت زير فراخوانی می کنيم :

RetVal = InternetAutodial(ADF_FORCE_UNATTENDED, Me.hwnd)

اگر RetVal مخالف صفر باشد عمل AutoDial بدرستی انجام شده است .

برای قطع اتصالی که توسط AutoDial ايجاد شده از تابع InternetAutodialHangup استفاده می کنيم . ابتدا اين تابع را Declare می کنيم :

Private Declare Function InternetAutodialHangup Lib "wininet.dll" (ByVal dwReserved As Long) As Long

فراخوانی اين تابع بصورت زير است :

    Call InternetAutodialHangup(0)

برای اينکه بفهيم آيا اتصال به اينترنت وجود دارد يا نه از تابع InternetGetConnectedStateEx استفاده می کنيم . برای اينکار ابتدا تابع را Declare می کنيم :

Private Declare Function InternetGetConnectedStateEx Lib "wininet.dll" Alias "InternetGetConnectedStateExA" (lpdwFlags As Long, lpszConnectionName As Long, dwNameLen As Long, ByVal dwReserved As Long) As Long

سپس تابع را بصورت زير فراخوانی می کنيم :

strConnectionName = Space(256)
lNameLen = 256
lPtr = StrPtr(strConnectionName)
lNameLenPtr = VarPtr(lNameLen)
RetVal = InternetGetConnectedStateEx(lConnectionFlags, ByVal lPtr, ByVal lNameLen, 0)

که strConnectionName از نوع String و بقيه متغيرها از نوع Long هستند .

اگر RetVal مخالف صفر باشد اتصال برقرار است .

ثابتهايی که در کدهای فوق استفاده شده عبارتند از :

Private Const INTERNET_AUTODIAL_FORCE_ONLINE = 1&
Private Const INTERNET_AUTODIAL_FORCE_UNATTENDED = 2&
Private Const INTERNET_AUTODIAL_FAILIFSECURITYCHECK = 4&

Private Const INTERNET_DIAL_FORCE_PROMPT = &H2000
Private Const INTERNET_DIAL_SHOW_OFFLINE = &H4000
Private Const INTERNET_DIAL_UNATTENDED = &H8000

+ برای مبحث بعدی پيشنهاد بدهيد :
- آموزش RasAPI
- آموزش  Multimedia API
- آموزش  تهيه DataReport در ويژوال بيسيک
- آموزش  مباحث .NET
- مباحث پيشنهادی ديگر


 + بزودی بخش چهارم پاسخ به سوالات را ارائه خواهم کرد .

+ حامد شیدائیان ; ۱٠:٤٤ ‎ق.ظ ; شنبه ۸ آذر ،۱۳۸٢
comment نظرات ()