PDA

View Full Version : سوال: جلوگیری از Kill و دیباگ در دات نت؟!



DarkSoroush
شنبه 22 تیر 1387, 03:24 صبح
راستش علاقه ای به پست زدن نداشتم چون دوست ندارم پستم اسپم باشه یا سوال تکراری به حساب بیاد ولی خب وقتی دیدیم پیام خصوصی هم نمیتونم بفرستم ...
سوال دقیق من اینه که چطوری میشه تحت زبانهای .Net کاری کرد که برنامه نوشته شده قابل Debug نباشه. همچنین قابل Kill کردن از طریق هر برنامه ای. شبیه به آنتی ویروس Norton 360 که نام پروسسش هم هست ccApp
منظورم این نیست که debugger رو شناسایی کنیم. خب من میام خودم یک دیباگر مینویسم که شناسایی نشه. منظور من اینه که چطور میشه از خوندن اطلاعات در حافظه یا رم برنامه جلوگیری کرد. یعنی نشه با openprocess توی مموری برنامه تغییر داد.
در ضمن اگر در مورد Anti-Debug ها هم توضیح بدید ممنون میشم. جایی خوندم با چند کد اسمبلی به عنوان یک anti-debug میشه همین کاری که میخواسم رو انجام بدم.
ممنون
- سروش

smile17
شنبه 22 تیر 1387, 11:47 صبح
يه تكنيكي هست به نام code obfuscate (http://en.wikipedia.org/wiki/Obfuscated_code)
شايد به كارت بياد
به بخش
External links (http://en.wikipedia.org/wiki/Obfuscated_code)

در پايان لينك بالا هم نگاهي بنداز

DarkSoroush
شنبه 22 تیر 1387, 16:12 عصر
يه تكنيكي هست به نام code obfuscate (http://en.wikipedia.org/wiki/Obfuscated_code)
شايد به كارت بياد
به بخش
External links (http://en.wikipedia.org/wiki/Obfuscated_code)

در پايان لينك بالا هم نگاهي بنداز
ممنون. اره من در این مورد یک سری مقاله خوندم ولی متاسفانه در مورد برنامه های تحت .net زیاد فایده ای نداره چون کرکر میتونه از طریق il des که خود ماکروسافت در اختیارش میزاره از کدمون سر در بیاره و این جالب نیست.
در ضمن کد برای فهم خودمونم سنگین میشه!! explorer خود visual studio هم فکر کنم بعضی توابع نرمافزارمون رو نشون بده (حتی اگر friend باشه) که بازم بدتر!!
به نظر من این روش بهتر به درد زبانهای سنتی تر میخوره تا سری .net!
البته منظور اصلی من هم این نبود. من میخواستم کرکر اصلا نتونه روی مموری برنامه تغییر ایجاد کنه.

در هر حال ممنون. :تشویق:
پیشنهاد دیگه ای نیست!!!؟

smile17
شنبه 22 تیر 1387, 18:32 عصر
من اين لينك ها رو با اين عناوين ديدم
اميدوارم به دردت بخوره :
Visual Studio 2008 documentation for built-in .NET obfuscation (http://msdn2.microsoft.com/en-us/library/ms227240.aspx)
How-To-Select an Obfuscation Tool for .NET (http://www.howtoselectguides.com/dotnet/obfuscators/)
Obfuscation tools for .NET, on MSDN (http://msdn2.microsoft.com/en-us/vcsharp/aa336818.aspx#obfuscators)

smile17
شنبه 22 تیر 1387, 18:40 عصر
.NET code protection (http://www.eziriz.com/?gclid=CK6G-Oe7upQCFR30Igod-XPaTw)
.NET Obfuscator (http://www.smartassembly.com/product/index.aspx)
C# Obfuscator (http://www.semdesigns.com/Products/Obfuscators/CSharpObfuscator.html)

DarkSoroush
شنبه 22 تیر 1387, 19:41 عصر
ممنون. این مقالاتی که گذاشتی برای اینکه کد قابل فهم نباشه خوبه. ولی بزار منظورمو بهتر بگم. به تصاویر زیر دقت کن:
Visual Studio 2008:
http://img2.freeimagehosting.net/uploads/7e8c483da1.jpg
OllyDbg:
http://img2.freeimagehosting.net/uploads/c5b03fd084.jpg

هر دو این نرم افزارها اصلا نیمتونند به پروسس ccApp اتچ بشند. چیز اصلی که من میخوام شبیه اینه.کسی اطلاعاتی داره؟!

ممنون از همه و مخصوصا شما ccx70007.

smile17
شنبه 22 تیر 1387, 19:54 عصر
شايد خوب ccapp مياد و نام و عنوان برنامه ها رو چك مي كنه كه اگر اين پروسه در حال باز شدن با برنامه اي باشه كه اسم يا title نرم افزار شامل debugger و ........... باشه جلوگيري كنه
براي اطلاع از نحوه ي كاركرد ccapp يا بايد يه ديباگر نوشت يا اين كه با ديباگر هاي گمنام هم ببينيم ميشه آيا اين پروسه رو باز كرد يا نه؟
راستي با IDA (http://www.hex-rays.com/idapro/) هم نتونستي كاري كني؟
من يه راه ديگه هم به ذهنم ميرسه كه براي ديباگ كردن اين جور موارد بيخيال محيط ويندوز بشي و از يه ديباگر تحت لينوكس استفاده كني.البته مسئله ي شناختن فايل هاي EXE براي ديباگر و محيط لينوكس ميمونه كه اونم قابل حل هستش
آقا بحث بسيار جالبي و شيريني هست....پيگير مورد باش...من هم پيگيري مي كنم و نتيجه را به عرض شما دوستان مي رسونم

HadiDelphi
شنبه 22 تیر 1387, 20:33 عصر
خوب معلومه دیگه برنامه ران کننده CApp یه دیباگر داخلی داره که Capp رو بعد از اجرا تحت دیباگ خودش درمیاره و دیگه سایر دیباگر ها نمیتونن به اون اتچ کنن

HadiDelphi
شنبه 22 تیر 1387, 20:35 عصر
براي اطلاع از نحوه ي كاركرد ccapp يا بايد يه ديباگر نوشت يا اين كه با ديباگر هاي گمنام هم ببينيم ميشه آيا اين پروسه رو باز كرد يا نه؟


با هر نوع دیباگری امتحان کنید (چه مشهور و چه گمنام) همین خطا رو میده

DarkSoroush
شنبه 22 تیر 1387, 22:47 عصر
خوب معلومه دیگه برنامه ران کننده CApp یه دیباگر داخلی داره که Capp رو بعد از اجرا تحت دیباگ خودش درمیاره و دیگه سایر دیباگر ها نمیتونن به اون اتچ کنن
این عملیه ولی درست نیست. چون اگر چه با این کار میشه جلوی باز شدن پروسس توسط یک دیباگر دیگه رو گرفت اما نمیشه جلوی kill شدن پروسس رو گرفت (فکر کنم) در حالی که اگر بخوای این پروسس رو kill هم کنی هم نمیتونی. این دو تصویر دیگه رو ببین:
TuneUp Process Manager:
http://img2.freeimagehosting.net/uploads/3d7a331ff7.jpg
Windows Task Manager:
http://img2.freeimagehosting.net/uploads/12a1e287fa.jpg


شايد خوب ccapp مياد و نام و عنوان برنامه ها رو چك مي كنه كه اگر اين پروسه در حال باز شدن با برنامه اي باشه كه اسم يا title نرم افزار شامل debugger و ........... باشه جلوگيري كنه
براي اطلاع از نحوه ي كاركرد ccapp يا بايد يه ديباگر نوشت يا اين كه با ديباگر هاي گمنام هم ببينيم ميشه آيا اين پروسه رو باز كرد يا نه؟نه. من خودم سعی کردم یکی از بایت های برنامه رو تغییر بدم (خودم برنامه رو نوشتم) ولی ارور Access Denied میده!!

در ضمن من به یک نکته اشاره نکردم. من برنامه ای که دارم مینویسم یک سرویس هستش و البته برنامه ccapp اگر چه یک سرویس نیست ولی در یوزر System Service اجرا میشه. (البته توسط Explorer.exe).

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

DarkSoroush
یک شنبه 23 تیر 1387, 03:20 صبح
اها!! از طریق تغییر privilege ها میشه. دارم سعی میکنم یک برنامه به زبان c# و یا vb بنویسم. اگه تمومش کردم احتمالا سورسش رو براتون میزارم.

smile17
یک شنبه 23 تیر 1387, 11:44 صبح
از طریق تغییر privilege ها میشه
يعني مي خواي حق دسترسي رو افزايش بدي؟؟
چگونه؟؟؟

DarkSoroush
یک شنبه 23 تیر 1387, 14:35 عصر
يعني مي خواي حق دسترسي رو افزايش بدي؟؟
چگونه؟؟؟
کاهش!! تعیین اینکه هیچ یوزری حق بستن یا تغییر اطلاعات مموری این برنامه رو ندارد!!

B-Vedadian
یک شنبه 23 تیر 1387, 16:11 عصر
تغییر privilege به خودی خود هیچ تاثیری در این موضوع نداره، فقط امکان دسترسی برنامه رو به منابع سیستم وسیعتر می کنه.

اگه میخوای جلوی attach شدن یک دیباگر دیگه و یا بستن برنامه رو بگیری، چاره ای جز hook کردن بعضی توابع ویندوز نداری.

تازه با توجه به اینکه میخوای از #c یا vb استفاده کنی، تو ring3 هستی و این خودش یک محدودیت دیگه است.

DarkSoroush
چهارشنبه 26 تیر 1387, 03:12 صبح
تغییر privilege به خودی خود هیچ تاثیری در این موضوع نداره، فقط امکان دسترسی برنامه رو به منابع سیستم وسیعتر می کنه.

اگه میخوای جلوی attach شدن یک دیباگر دیگه و یا بستن برنامه رو بگیری، چاره ای جز hook کردن بعضی توابع ویندوز نداری.

تازه با توجه به اینکه میخوای از #c یا vb استفاده کنی، تو ring3 هستی و این خودش یک محدودیت دیگه است.
کاملا نه.
من تحقیقات زیادی کردم و متوجه شدم راههایی برای این کار وجود داره که الان سه تاشون رو یادم میاد!!
1. تغییر privilege ها
2. نوشتن یک درایور
3. hook کردن تابع termanateprocess در ntoskernal.exe

راه اول بهترین راه هستش. البته اشتباه نباید کرد. منظوم از تغییر privilege ها تغییر اونها برای برنامه نیست. منظورم تغییر privilege های کاربر هستش. تعریف اینکه کاربر ادمینستراتور اجازه دیباگ این پروسس رو نداره!! در مورد این راه مقاله هایی خوندم ولی چون اصلا مثالی ندیدم نمیتونم کاری بکنم!! اکثر برنامه های استاندارد از این روش استفاده میکنند!!
راه دوم رو یادمه میگفتند با نوشتن یک دراویر (به علت وجود در رینگ0) میشه جلوی این موضوع رو گرفت. چگونگیش رو نمیدونم ولی بعضی ها گفته بودند اگر یک درایور مجازی بنویسید که برنامه رو از طریق O/I مشغول کنه اون برنامه بسته نمیشه چون ویدوز ابتدا دنبال آزاد کردن منابع است و چون برنامه مشغول میمونه این اتفاق نمیفته!! (البته این مورد فقط در مورد KILL کردن)
3. سومی رو هم که میدونید. البته دیباگ رو نمیدونم ولی برای جلوگیری از KILL شدن برنامه اینکارو میشه انجام داد. کما اینکه آنتی ویروس NEST فکر کنم یا همچین چیزی از این روش استفاده میکنه.

این اطلاعات من بود. MSDN ای ها هم نتونستند بهم جواب بدهند ولی خب من کماکان دارم تحقیق میکنم.

emdadgar2
یک شنبه 17 آذر 1387, 22:55 عصر
به نظر شما می شه از طریق group policy دسترسی دیباگ به نرم افزار را محدود کرد؟
کسی راه حلی در این زمینه داره؟