PDA

View Full Version : سوال: تشخیص Syntax فراخوانی توابع از یک DLL



orion188
یک شنبه 26 خرداد 1387, 19:40 عصر
سلام
جستجوی کلمه DLL هیچ نتیجه ای در سایت نمیاره.

من یک DLL دارم که حتی وقتی با PE Explorer بازش میکنم، در قسمت Export نمیتونه Syntax فراخوانی توابعش رو بیاره. میگه Information not available

چطور میتونم بفهمم اون توابع تایپ پارامترهای ورودی و مقدار خروجیشون چیه؟

پیشاپیش ممنون

Nima_NF
یک شنبه 26 خرداد 1387, 20:33 عصر
جستجوی کلمه DLL هیچ نتیجه ای در سایت نمیاره.شما باید از جستجوی گوگل در سایت استفاده کنید.


چطور میتونم بفهمم اون توابع تایپ پارامترهای ورودی و مقدار خروجیشون چیه؟شما نمی توانید پارامتر های dll را مشاهده کنید. با این نرم افزار ها فقط می توانید نام توابع را مشاهده کنید.
برای این کار به فایل LIB. یا هدر فایل یا document های همراه dll نیاز دارید

orion188
دوشنبه 27 خرداد 1387, 10:48 صبح
سلام.
ممنون از پاسختون.

PE Explorer نسخه 1.99 این کار رو انجام میده. یعنی تایپ پارامترهای ورودی و خروجی یک تابع Export شده رو حتی به همراه اسمشون!!! میاره (نمیدونم چطور این کار رو انجام میده!).

با این همه، با دانستن اینکه این dll هیچ کدوم از اون ملحقاتی که اشاره کردید نداره، چکار می توان کرد؟

hoax3r
دوشنبه 27 خرداد 1387, 11:28 صبح
این برنامه از فایل DLL این اطلاعات رو نمیگیره، این اطلاعات از قبل برای برخی از api ها در برنامه تعریف شده
که احتمالا در این پوشه نگه داری میشه


\PE Explorer\API LIBRARY\BASE\PAS

Nima_NF
دوشنبه 27 خرداد 1387, 15:47 عصر
PE Explorer نسخه 1.99 این کار رو انجام میده. یعنی تایپ پارامترهای ورودی و خروجی یک تابع Export شده رو حتی به همراه اسمشون!!! میاره (نمیدونم چطور این کار رو انجام میده!).

من هم همین نسخه از برنامه را دارم و چنین کاری انجام نمی دهد (مگر اینکه خودتان قبلا در موردش توضیحاتی برای پارامترها در آن برنامه داده باشید)، توضیحات را جناب hoax3r دادند.

تا کنون هیچ نرم افزاری ندیدم و نشنیدم که بتواند این کار را انجام دهد، چون این طوری فایل های کامپایل شده در برنامه نویسی زیر سوال می رود!

تنها راه این است که یک لیسانس از سازنده Dll دریافت کنید و هدر فایل و یا حداقل همان documnet آن را دریافت کنید.

orion188
دوشنبه 27 خرداد 1387, 17:45 عصر
ممنون از نظرات دوستان.

این برنامه این کار رو انجام میده (عکس رو ببینید). ولی انگار نظر اون دوستمون درسته که یک دیتابیس برای خودش داره و محتوای DLL ها رو با اون چک میکنه. چون برای بعضی DLL ها (عموما در شاخه ویندوز) به نتیجه میرسه.

به هر حال من مد نظرم نام پارامترها نیست. حداقل بدونم تابع چند ورودی داره. فکر نمیکنم این با فلسفه Export کردن در DLL در تضاد باشه. هست؟

البته من در حال مکاتبه با شرکت سازنده محصول هستم. اما فکر میکنم بد نباشه یک مطالعه ای روی این موضوع داشته باشیم.

Nima_NF
دوشنبه 27 خرداد 1387, 20:23 عصر
Q: How do I get parameters on function exports? I have the function name, but that is near useless unless I can figure out the parameters.

If you don't have the source code and API documentation, the machine code is all there is. PE Explorer provides a Disassembler. There is only one way to figure out the parameters: run the disassembler and read the disassembly output. This task of reverse engineering the interface cannot be automated, sorry.

PE Explorer comes bundled with descriptions for 39 various libraries, including the core Windows operating system libraries (eg. KERNEL32, GDI32, USER32, SHELL32, WSOCK32), key graphics libraries (DDRAW, OPENGL32) and more. But PE Explorer is unable to provide description sets for all libraries or functions ever written by humankind.


می بینید که راه کار فقط همان مهندسی معکوس و disassembly هست.

orion188
سه شنبه 28 خرداد 1387, 13:40 عصر
ممنون از زحمات شما.

بر اساس اندک آگاهی ای که از زبان ماشین دارم، فکر میکنم بشه نتیجه گرفت که با استفاده از GetProcAddress، آدرس تابعی که بدست میاد رو با هر تعداد پارامتری میشه صدا زد. یعنی اگر ما پارامتری هم ارسال نکنیم، خود تابع همون مقدار قبلی که در حافظه / ثبات بوده رو به عنوان ورودی در نظر میگیره.
نظر شما چیه؟

hoax3r
چهارشنبه 29 خرداد 1387, 10:33 صبح
همونطور که جناب Nima_NF گفتن تنها راهش دی اسمبلر کردن dll و پیدا کردن مقدادیری که از ناحیه stack خوانده میشه
البته به متغییر های محلی هم باید دقت کرد، PE Explorer یه دی اسمبر داره همون کفایت میکنه
اول شما آدرس تابع رو همونطور که خودت گفتی با GetProcAddress (اون برنامه آدرسا رو هم نشون میده)
میگیری بعد برو تو PE Explorer قسمت دی اسمبلرش آدرس رو وارد مکینی،
مقادیری که به این [ebp+XXh] شکلن نشون دهنده آرگومانهاست که از [ebp+08h] شروع میشن
متغییر های محلی هم عموما [ebp-XXh] هستن پس با هم نباید اشتباه بشن

البته برنامه دیگه هم هست با نام PEBrowse که یکم کارو راحتتر میکنه بجای اینکه ما
بیایم این مقادیر رو بگردیم از تو کدا در بیاریم خودش برامون لیست مکنه، فقط زحمت شمردن
اونا با ماست

شاد باشید