PDA

View Full Version : سوال: پی بردن به زمان ورود به یک تابع



python_85
سه شنبه 28 مهر 1394, 14:17 عصر
با سلام
یه سوال داشتم اصلا نمی دونم از نظر فنی سوال درستی هست یا نه ، لطفا راهنمایی بفزمایید که
فرض کنید در یه اپلیکیشن تابعی به عنوان myfunction وجود داره
من این اپلیکیشن رو اجرا م کنم ، حالا می خوام ببینم راهی وجود داره که در یه برنامه دیگه متوجه این بشم که کی این تابع فراخونی میشه

negative60
چهارشنبه 29 مهر 1394, 09:17 صبح
برای ارسال و دريافت ديتا بين دو برنامه لوکال ميتونيد از Pipe استفاده کنيد البته به شرطی که هر دو برنامه رو خودتون ساخته باشيد
مثال در ويندوز (https://msdn.microsoft.com/en-us/library/windows/desktop/aa365780(v=vs.85).aspx)

hamedBB
چهارشنبه 29 مهر 1394, 09:21 صبح
راه دیگه ای هم که میتونی استفاده کنی message queue هست

مستند لینوکس message queue :
http://man7.org/tlpi/download/TLPI-52-POSIX_Message_Queues.pdf

مستند ویندوز message queue :
https://msdn.microsoft.com/en-us/library/ms711472%28v=vs.85%29.aspx

python_85
چهارشنبه 29 مهر 1394, 14:44 عصر
سپاسگزارم
متاسفانه به کد نرم افزار اول دسترسی ندارم
یه گیم هست که با اپن جی ال نوشته شده و نیاز بدونم کی این گیم اجرا شده



راه دیگه ای هم که میتونی استفاده کنی message queue هست


برای استفاده از msmq هم نیاز به کد برنامه اول هست؟

hamedBB
چهارشنبه 29 مهر 1394, 14:58 عصر
سپاسگزارم
متاسفانه به کد نرم افزار اول دسترسی ندارم
یه گیم هست که با اپن جی ال نوشته شده و نیاز بدونم کی این گیم اجرا شده


برای استفاده از msmq هم نیاز به کد برنامه اول هست؟ (منظورت از کد برنامه اول چیه؟)

...................

python_85
چهارشنبه 29 مهر 1394, 15:11 عصر
برنامه اوپن جی الی که نیاز دارم بدونم توش اون تابع کی فراخونی شده

hamedBB
چهارشنبه 29 مهر 1394, 15:25 عصر
برنامه اوپن جی الی که نیاز دارم بدونم توش اون تابع کی فراخونی شده

آهان. این مسئله دیگه بسته به نحوه ی پیاده سازی خودته. همونطوری که از اسمش معلمومه (message Queue) یک صف پیغام بین پروسه های یک سیستم هست . شما می تونی هر نوع پیغامی که خواستی توش بذاری و در پروسه های دیگر سیستمت اونها را بخونی! حالا یک تابع کارش رو انجام داد کافیه یک پیغام روی message Queue بذاره. و در برنامه ی دیگه کافیه یه call back function برای خوندن از صف پیغام داشته باشی.
برای تمامی این کارها message Queue توابع و کنترل های بسیار کارایی داره. اگر کوتاه بود همینجا توضیحش میدادم ولی چون حجمش زیاده بهتره همون منابعی که بهت گفتم رو دنبال کنی.
-------------------------------------
ویرایش : الان دیدم که گفتی به کد برنامه اول دسترسی نداری. پس از این روش نمی تونی استفاده کنی. باید پیغامی روی message Queue گذاشته بشه تا پروسه ی دیگری اون رو بخونه. اگه دنبال کار فقط یک تابع هستی که نمیشه ، اما اگر میخوای با اجرای یک برنامه کاری انجام بشه که دیگه مشخصه باید PID موردنظرت رو روی سیستم عامل پیدا کنی و چک کنی که اون پروسه زندست یا نه که فرمان های متفاوتی در لینوکس یا ویندوز داره. البته فکر نکنم منظورت این بوده باشه.

python_85
چهارشنبه 29 مهر 1394, 15:47 عصر
بله اگر دسترسی به کد نرم افزار اول داشتم به غیر از مواردی که گفتید ، راه کارهای دیگه ای هم وجود داشت

من از داخل برنامه دوم ، گیم رو اجرا می کنم و با استفاده از یه سری ای پی آی ، از اجرا شدن ایجاد شدن پنجره اون گیم مطلع میشم. مشکل اینجاست که می خوام زمانی که گیم لود شد و آماده پلی شدن بود( میدونم که تابعی به سم StartGame() وجود داره) من تو برنامم یکسری اطلاعات رو ثبت کنم (مثل زمان شروع بازی)

rahnema1
چهارشنبه 29 مهر 1394, 16:05 عصر
سلام
سوال شما بیشتر مربوط به مهندسی معکوس می شه
برنامه هایی به نام API Monitor هستند که می تونند تشخیص بدن تابعها کی صدا زده می شن که فکر کنم توی تالار امنیت این سایت هم این سوال را بپرسید اونجا می تونند راهنمایی بهتری کنند

negative60
چهارشنبه 29 مهر 1394, 17:54 عصر
بله اگر دسترسی به کد نرم افزار اول داشتم به غیر از مواردی که گفتید ، راه کارهای دیگه ای هم وجود داشت

من از داخل برنامه دوم ، گیم رو اجرا می کنم و با استفاده از یه سری ای پی آی ، از اجرا شدن ایجاد شدن پنجره اون گیم مطلع میشم. مشکل اینجاست که می خوام زمانی که گیم لود شد و آماده پلی شدن بود( میدونم که تابعی به سم StartGame() وجود داره) من تو برنامم یکسری اطلاعات رو ثبت کنم (مثل زمان شروع بازی)

در اين صورت بايد مثل چيت گيم عمل کنيد
دو تا راه وجود داره:
در مرحله اول بايد تابع اي رو پيدا کنيد که فقط زمان شروع بازی فراخانی ميشه يا تابع پيدا کنيد که زمان شروع بازی پارامتر خاصی رو ارسال يا دريافت ميکنه که همونطور گفته شد با برنامه های نظير api monitor ميتونيد توابع که توسط برنامه استفاده ميشوند رو مشاهده کنيد (البته فکر ميکنم اين برنامه فقط توابع ويندوز رو نشون ميده نه توابع اختصاصی برنامه رو) بعد از اينکه يک يا تابع خاص رو پيدا کرديد در مرحله بعد با تزريق dll و هوک کردن تابع مشخص ميتونيد زمان شروع بازی رو تشخيص بديد.



راه بعدی که آسونتر هست اينه که با استفاده از برنامه های نظير Cheat Engine بازی رو اسکن کنيد تا آدرس متغير ثابتی رو پيدا کنيد که تا زمان شروع بازی مقدار منحصر به فردی داشته باشه ، بعد از پيدا کردن اين متغير تو برنامه خودتون از زمان باز شدن بازی ميبايست مموری پروسه بازی مورد نظر رو اسکن کنيد تا زمانی که آدرسی که از متغير داريد مقدار مشخص رو داشته باشه که اين به معنی شروع بازی هست .