View Full Version : get system call windows
arashmidos2020
جمعه 07 اسفند 1388, 20:43 عصر
دوباره سلام.من دوتا موضوع رو درک نکردم.اول سوالمو می گم بعد میرم سر بحث:
سوال:یک پروسه چه system call هایی رو صدا می کنه؟ این رو چطور میشه فهمید؟
خب حالا چند تا مسله که نمی دونم چطوری به هم باید مرتبط شون کنم:
1. PE files structure: برای حل پیدا کردن جوابم رتم این ساختار رو نگاه کردم اما با استفاده از این می شه توابع درون یک کتابخانه رو دید و تمام ساختار یک پروسه رو وقتی تو رم لود میشه نشون میده.اما من فقط سیستم کال ها رو که این پروسه به سیستم عامل می فرسته می خوام نه تمام توابع اون پروسه exe و یا کتابخانه!!
2. windows hook: فکر می کنم این دقیقا همون چیزیه که من می خوام ولی نمی دونم چطوری میشه ازش استفاده کنم. تو این سایتم فقط یا همه مثال ها در مورد ماوس و کیبورد هست و یا در مورد kernel32!!
createRemoteThread3. : من موندم این تابع فقط برای تزریق کد تو یک پروسه هست ولی آیا در این سوال منم کاربرد داره که هر جا میرم سرو کلش پیدا میشه؟
خلاصه اینکه میشه یک pid داد و سیستم کال اون پروسه رو گرفت؟ کار نشد نداره فقط چطوری؟
(تشکر زیاد از دوستانی که این مدت کمک کرده اند)
tdkhakpur
جمعه 07 اسفند 1388, 22:15 عصر
خب وقتی یک فایل اجرای از هر نوع وارد ram میشود اولا آدرس فرود آمد داخل ram فرق خواهد کرد و دوم اینکه همچین کاری را نمیتوانید با استفاده از برنامه انجام بدید تا بنوانید بفهمید که چه پردازشهایی نیاز یک پردازش میشود به این دلیل که شما باید دنبال آدرسها باشید نه نامها.(در ram).
و در آخر
میتوانید از توانایی های خودتان استفاده کنید و لود کننده فایل را خودتان شبیه سازی کنید در این صورت مشکلتان کاملا حل خواهد شد.
arashmidos2020
شنبه 08 اسفند 1388, 01:16 صبح
خب وقتی یک فایل اجرای از هر نوع وارد ram میشود اولا آدرس فرود آمد داخل ram فرق خواهد کرد و دوم اینکه همچین کاری را نمیتوانید با استفاده از برنامه انجام بدید تا بنوانید بفهمید که چه پردازشهایی نیاز یک پردازش میشود به این دلیل که شما باید دنبال آدرسها باشید نه نامها.(در ram).
و در آخر
میتوانید از توانایی های خودتان استفاده کنید و لود کننده فایل را خودتان شبیه سازی کنید در این صورت مشکلتان کاملا حل خواهد شد.
می دونم که فرق داره.منم نمی خوام بفهمم که یک پردازش به چه پردازش هایی نیاز داره!!! من فقط می خوام سیستم کالی که به سیستم عامل می فرسته رو در هر لحظه برای یک پروسه مخصوص بگیرم همین.(نمی دونم چرا هیچکس حرفمو متوجه نمی شه شاید من بد توضیح دادم سوالمو؟)
یعنی چه که لودکننده خودم بسازم؟ لطفا بیشتر توضیح بدید چطوریه چه ویژگی هایی داره این لود کننده؟
تشکر
arashmidos2020
شنبه 08 اسفند 1388, 14:32 عصر
فقط یک رهنمایی کوچولو ...
hoax3r
شنبه 08 اسفند 1388, 15:01 عصر
سلام
1 - هر API ی سطح کاربر که برنامه استفاده میکنه در نهایت به یک تابع سیستمی ختم میشه، پس با دونستن همین توابع میتونین توابع سیستمیشون رو هم پیدا کنید.
مثلا اگه برنامه ای از CreateFileA یا CreateFileW استفاده کنه تابع سیستمی ZwCreateFile صدا زده میشه یا در مورد تابع ReadFile که تابع ZwReadFile رو صدا میزنه و WriteFile تابع ZwWriteFile و ....
ساده ترین راه برای پیدا کردن توابع سیستمی معدل خود در سطح کاربری استفاده از یه Disassembler است.
2 - در مود هوک، اول اینکه یه نکته باید گفته بشه اونم اینکه هوک کردن توابع سیستمی سطح کرنل (kernel mode)با هوک کردن توابع سطح کاربر (user mode) متفاوت و به مراتب مشکلتر از این مطالبی هستن که تا الان در تاپیک های اخیر گفته شده.
اگه در همین سطح کاربر خواستین اینکارو کنید بجای هوک توابع kernel32 می تونین توابع ntdll رو هوک کنید(که البته لزومی نداره)، در این کتابخانه توابع سیستمی سطح کرنل با همان نام ها در سطح کاربر وجود داره
در زمینه هوک میتونین این دو کتاب رو پیدا کنید بخونید برای هر دو سطح مطالبی دارن که کمکتون میکنه
Rootkits Subverting the Windows Kernel
The Rootkit Arsenal Escape and Evasion in the Dark Corners of the System
3 - برای هوک کردن سطح کابر عموما یه dll به پروسه هدف تزریق میشه که یکی از راههای تزریق استفاده از این تابع است
__Genius__
شنبه 08 اسفند 1388, 20:36 عصر
سوال:یک پروسه چه system call هایی رو صدا می کنه؟ این رو چطور میشه فهمید؟سلام ، مفهوم System Call چیز عجیب یا سختی نیست ، وقتی که یک تابع از درون یک کتابخانه Export شده و توسط همون کتابخانه ارائه میشه و به وسیله سیستم عامل سرویس دهی میشه بهش System Call میگن .
وقتی یک SystemCall فراخوانی میشه نحوه Execution یا اجرا کردن به وسیله کرنل route میشه ، توسط یک سری از توابع از پیش معین شده .
حالتی رو در نظر بگیرید که SystemCall با نام A میخواد فراخوانی بشه ، توابع X - Y - Z به ترتیب توسط هسته فراخوانی میشن ( تاکید میکنم به ترتیب ! ) ، حالا با استفاده از Ring0 و بکار گیری windows Driver Kit یا Driver Development Kit میتونید عملیات Hijack کردن این Routing path Execution رو انجام بدین ، به چه صورت !؟ به این صورت که پس از فراخوانی SystemCall با نام A اول تابع EvilFunction ( تابع مورد نظر شما ) فراخوانی بشه و بعد X-Y-Z فراخوانی بشن ( هر کدام یک تابع هستن ) ، این عملیات Hijack کردن رو اصطلاحاً توی برنامه نویسی بهش Hook کردن میگن .
2 نوع Hook وجود داره ،
1 ) هوک های سطح کاربر .
2 ) هوک های سطح هسته .
اصولاً خود هوک های سطح کاربر میتونن به صورت Wide باشن ؛
هوک های سطح هسته به مراتب دارای پیچیدگی های بیشتری هستن و توصیه اکیدم این هست که تا وقتی مفاهیم System Internals و Native Code رو متوجه نشدید با استفاده از Sample Code ها در سطح هسته Hook رو انجام ندین ، الان 80% هوک های سطح هسته به راحتی قابل شناسائی هستن ، متدهایی که بتونن عملیات hook رو مخفی کنن ارزش دارن .
2. windows hook: فکر می کنم این دقیقا همون چیزیه که من می خوام ولی نمی دونم چطوری میشه ازش استفاده کنم. تو این سایتم فقط یا همه مثال ها در مورد ماوس و کیبورد هست و یا در مورد kernel32!!
windows hook ها تنها یکی از متدهای هوک های سطح کاربر هستن ، با استفاده از Microsoft Detours هم میتونید هوک های سطح کاربر رو پیاده سازی کنید .
اما پیشنهاداً روی Wide System Hook ها کار کنید ، مقاله های خوبی توی سایت Code Project پیدا میشه .
createRemoteThread3. : من موندم این تابع فقط برای تزریق کد تو یک پروسه هست ولی آیا در این سوال منم کاربرد داره که هر جا میرم سرو کلش پیدا میشه؟
احتمالاً مواردی که شما میخونید بحث Hook کردن با استفاده از SetWindowsHook و CallNextHook هست ، چون کلاً برای Hook کردن توی سطح کاربر شما نیاز به تکنیکی به Dll Injection دارید .
میتونه به چند صورت انجام بگیره که یکیش استفاده از CreateRemoteThread و بکار گیری ()LoadLibrary هست .
( البته اخیراً روشی رو پیدا کردم که بدون تزریق Dll به پروسه میشه Hook در سطح کاربر رو انجام داد ) .
به هر صورت فکر میکنم شما یکمی گنگ مباحث رو مطرح میکنید ، یکمی بازتر صحبت کنید بهتر میشه روی مبحث کار کرد .
ضمناً کتاب Professional Rootkits از انتشارات Wrox هر دوی مباحث عملیات hook و یا Function Hijacking رو در سطح کاربر و در سطح هسته توضیح داده ... .
arashmidos2020
شنبه 08 اسفند 1388, 21:48 عصر
به این صورت که پس از فراخوانی SystemCall با نام A اول
.
پس یعنی با استفاده از پیدا کردن آدرس توابعی که در یک PE file هستند باید سیستم کال ها رو تشخیص بدیم و برای تشخیص اینکه یک پروسه(Pe file) چه سیستم کال هایی را کال کرده نیاز به هوک نداریم؟؟؟
و یک چیز دیگه من فقط می خوام هر وقت A فراخوانی شد به من اطلاع داده بشه.همین و بس.
حالا این موضع مربوط به هوک میشه؟ یا اینجکشن؟ یا جستجو درون PE file ها ؟؟؟؟ هر کدوم رو رفتم دیدم ولی واقعا نمی دونم برای این کار باید از کدوم استفاده کنم.(بی سوادی منو به با سوادی خودتون ببخشید)
دیگه چطوری توضیح بدم واقعا ببخشید. اگر لطف کنید شما چندتا سوال بکنید از فرض هایی که کردید تا من جواب بدم و بتونیم این مسئله رو که مدت زیادیه منو کلافه کرده تمومش کنیم.
تشکر
__Genius__
یک شنبه 09 اسفند 1388, 03:39 صبح
سلام ،
دوست من ، آرش جان ، شما مفهوم PE FILE رو با Process (پروسه) اشتباهاً قاطی کردید .
PE یک فرمتی هست که برای سیستم عامل قابل تشخیص هست ، یک Compiler و Linker وقتی دستور generate کردن بهشون داده میشه Format ی رو تولید میکنن که برای سیستم عامل قابل تشخیص باشه ، توی سیستم عامل ویندوز به این فرمت PE میگن ، و تنها محدود به فایل های EXE نیست ، فایل های DLL هم دارای فرمت PE هستن .
یک Process نمونه ای از یک فایل قابل اجرا توی سیستم هست که بهش حافظه اختصاص داده میشه و حداقل دارای یک Thread هست .
( خدا خیر بده به کسی که به شما گفته برید در مورد فرمت PE تحقیق کنید ) .
برای مطلع شدن از یک فراخوانی باید Hook بکنید .
بله مربوط به هوک میشه ، اگه خواستید هوک رو در سطح کاربر انجام بدین همونطوری که گفتم باید Dll-Injection انجام بدین .
وقتی نیاز دارید که مثلاً برخی از توابع مربوط به پروسه A رو Hook کنید باید Dll رو به اون Process اختصاص بدین ، نهایتاً باید یک برنامه Thrid Party بنویسید ( یا از برنامه های آماده در این مورد استفاده کنید ) که یک Dll رو به صورت صحیح در Address Space یک پروسه تزریق کنه.
سوال اینکه ، دقیقاً شما چه کاری میخواهید انجام بدین ، تاپیک جداگانه ای باز نکنید ، توی همینجا تمام اون برنامه ای که میخواهید بنویسید رو بگین تا من و دیگر دوستان بیشتر مطلع باشیم و راهنمائی های درخوری رو بتونیم به شما ارائه بدیم دوست من :لبخندساده:
arashmidos2020
یک شنبه 09 اسفند 1388, 04:54 صبح
یعنی چی که باید فقط یک سری توابع از یک پروسه رو هوک کرد؟مگه ما کل پروسه رو هوک نمی کنیم؟
با توجه به اینکه میگید dll injection ، یعنی این نوع هوک اصلا مثل کدهایی که با SetWindowsHook دیدم رو نداره؟
یعنی باید ببینیم یک پروسه از چه کتابخانه و فایلهای exe ی استفاده می کنه سپس بریم سراغ اونها.من که نمی فهمم. مگه در سیستم عامل چندتا یا چند نوع سیستم کال داره؟
ببینید من دارم حرف غیر منطقی می زنم؟؟؟
مگه یک پروسه با یک سیستم عامل از طریق سیستم کال ها صحبت نمی کنه؟؟؟ فقط بگید گرفتن این سیستم کال در هر لحظه چطور ممکنه؟
فقط می دونم سیستم کال ها در دو نوع user mode هست که به صورت فانکشنی هست و instruction set هست که واسه برای سطح کرنل هست.من فقط می خوام سطح یوزر مد رو بگیرم و ببینم چی میگه؟نمی دونم این چجور هوک هست و اصلا چه ربطی به اینجکشن داره؟؟ من که الان نمی خوام برم کدی رو جایگزین کنم؟؟!!
خب پس اگر ممکن در مورد این نوع هوک کردن بیشتر توضیح بدید.
(اگر کسی هست که بتونه بیشتر همکاری کنه من استقبال می کنم لطفا روی یاهو آنلاین به من پی ام بده)
تشکر
__Genius__
یک شنبه 09 اسفند 1388, 05:35 صبح
با توجه به اینکه میگید dll injection ، یعنی این نوع هوک اصلا مثل کدهایی که با SetWindowsHook دیدم رو نداره؟عرض کردم Dll-Injection از نامش پیدا هست ، این تنها یک متد هست که اجباراً باید استفاده کنید برای وقتی که قصد Hook در سطح کاربر رو دارید ؛ خود Dll-Injection ربطی به Hook نداره و مستقیماً Hook رو برای شما انجام نمیده ، شما Hook رو از طریق یک فایل Dll و ساختن اون انجام میدین ، بعد از اون لازم هست که این Dll به یکی از پروسه ها تزریق بشه ، مثلاً با استفاده از CreateRemoteThread شما یک Thread توی یک پروسه ایجاد میکنید که بعد از اینکه اجرا بشه کد Dll شما رو Load میکنه ، حالا هر چی کد در داخل اون Dll باشه در محتوای اون پروسه Execute میشه ، پس اگه Hook کرده باشین کد Hook شما به صورت یک Dll در داخل اون پروسه ایجاد میشه و عملیات Hook انجام خواهد شد ، ولی تا وقتی از طریق Dll-Injection فایل یا Dll مورد نظراتون رو به پروسه مورد نظر تزریق نکنید عملاً کد Dll شما بی مصرف هست .
یعنی چی که باید فقط یک سری توابع از یک پروسه رو هوک کرد؟مگه ما کل پروسه رو هوک نمی کنیم؟ چیزی به نام Process Hooking نداریم ، اون Function Hooking هست ، شما که نمیتونی یک پروسه رو هوک کنی ، باید توابعی که داخل اون فراخوانی میشه رو هوک کنی ، ممکنه 2000 تا تابع رو فراخوانی بکنه ، ممکنه نیاز شما تنها هوک کردن 4 تا تابع بیشتر نباشه پس شما همون 4 تا رو هوک میکنی ، هوک کردن هم به این معنا نیست که توابع رو هوک کنید برای اینکه الزاماً فقط کار شما رو انجام بده ، پس از عملیات hook باید ادامه تابعی که قرار بوده اجرا بشه و شما Hijack کردین اون رو اجرا بشه تا عملیات مشکوک نباشه .
یعنی باید ببینیم یک پروسه از چه کتابخانه و فایلهای exe ی استفاده می کنه سپس بریم سراغ اونهاتقریباً ؛ شما باید اول بررسی کنید که یک پروسه ای که میخواهین توابعش رو هوک کنید چه توابعی رو فراخوانی میکنه ، بعد شروع کنید اونها رو Hook کردن .
ربط Dll-Injection رو با user mode Hook هم توضیح دادم امیدوارم دیگه در این مورد سوال نکنید ، هوک هم فقط به معنای جایگزین کردن کد نیست ، میتونه برای اطلاعی که شما هم میفرمائید باشه .
توی Debugger هم میتونید با قرار دادن Function Breakpoint روی آدرس تابع مورد نظرتون مطلع بشید .
arashmidos2020
یک شنبه 09 اسفند 1388, 05:49 صبح
لطفا یک سورس روی code project یا جای دیگه معرفی کنید در همین مورد.
باز هم ممنون از شما
__Genius__
یک شنبه 09 اسفند 1388, 06:20 صبح
Api Hooking using LoadLibrary
http://www.codeproject.com/KB/threads/APIHooking.aspx
Api Hooking with MS Detours
http://www.codeproject.com/KB/DLL/funapihook.aspx
arashmidos2020
پنج شنبه 12 فروردین 1389, 20:53 عصر
اساتید اگه میشه این لینک رو ببینید که با این موضع هم مرتبط هست و راهنمایی کنید. تشکر
http://barnamenevis.org/forum/showthread.php?t=212433
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.