PDA

View Full Version : بدست آوردن آدرس هگز يك تابع درون فايل اجرايي



دنیای دلفی
چهارشنبه 27 شهریور 1387, 01:48 صبح
دوستان سلام

فرض كنيد يك تابعي به نام test وجود دارد كه درون يك dll است .

من اين تابع را درون برنامه ام استفاده مي كنم . وقتي برنامه را كامپايل مي كنم فايل اجرايي ساخته مي شود . بعد با استفاده از يك Hex Editor يا هر برنامه اي ديگر مي توانم فايل اجرايي را باز كنم . و كدهاي اسمبلي معادل برنامه را مشاهده كنم . و به همان راحتي دنبال تابع test بگردم و آدرس قرار گرفتن آن را در فايل اجرايي پيدا كنم .

سوال : آيا راهي هست كه من با يك تابعي يا يك الگوريتمي نام تابع test را بدهم و نام فايل اجرايي را و به من آدرس هگز قرار گرفتن اين تابع را درون فايل اجرايي را برگرداند .

ممنون اگر راهنمايي كنيد

vcldeveloper
چهارشنبه 27 شهریور 1387, 02:27 صبح
احتمالا باید بتونید با بدست آوردن Image Base اون DLL در فضای آدرس Process، و آدرس تابع در DLL (با استفاده از GetProcAddress)، محل تابع در فضای آدرس Process را محاسبه کنید.

دنیای دلفی
یک شنبه 31 شهریور 1387, 00:04 صبح
آقاي كشاورز دستتون درد نكنه من با استفاده از GetProcAddress و GetModule و . . . آدرس تابع Test رو توي dll بدست مي آورم ولي من مي خواهم توي فايل اجرايي اين كار را انجام بدم . من Image Base فايل Dll را هم مي دانم . ولي راهي براي بدست آوردن آدرس در فايل اجرايي پيدا نكرده ام . گيرم . آيا لطف مي كنند راهنمايي يا كدي در اين زمينه بگذاريد لطف بزرگي مي كنيد .

ممنون از همكاري

vcldeveloper
یک شنبه 31 شهریور 1387, 00:23 صبح
من با استفاده از GetProcAddress و GetModule و . . . آدرس تابع Test رو توي dll بدست مي آورم ولي من مي خواهم توي فايل اجرايي اين كار را انجام بدم . من Image Base فايل Dll را هم مي دانم . ولي راهي براي بدست آوردن آدرس در فايل اجرايي پيدا نكرده ام .
آدرس یک تابع در DLL براساس ImageBase اون DLL محاسبه میشه. وقتی شما ImageBase اولیه DLL را داشته باشید، آدرس تابع در DLL هم داشته باشید، می تونید با یک تفریق حساب کنید که فاصله نقطه شروع اون تابع با ImageBase چقدر هست.
حالا وقتی DLL در فضای یک Process لود میشه، دو حالت براش پیش میاد:
1- ImageBase ایی که براش تعریف شده، در فضای اون Process آزاد هست و DLL در همون فضا لود میشه، در این حالت آدرس تابع همون آدرس اولیه هست.
2- ImageBase مربوطه در فضای اون Process اشغال شده، پس DLL باید در آدرس دیگه ایی لود بشه، با لود شدن DLL در آدرس دیگه، آدرس توابع آن هم تغییر میکنه، اگر آدرس ImageBase جدید بدست بیاد، میشه با اضافه کردن مقداری، که در مرحله قبل بدست آوردیم، به آن به آدرس تابع در فضای Process مربوطه برسیم.

البته ممکن هست توابع مربوط به Debug برای همچین کارهایی روال های آماده ایی داشته باشند تا دیگه نیاز به محاسبات مختلف نباشه.


كدي در اين زمينه بگذاريد
من کد خاصی برای همچین کاری بصورت آماده ندارم، فقط منطق تئوری اش که به ذهنم رسید را گفتم.