PDA

View Full Version : Plase Dump Me Ver 3



HadiDelphi
جمعه 21 تیر 1387, 12:21 عصر
سلام دوباره یه Dump Me قویتر .
از آقایون درخواست دامپ برنامه دوم رو دارم یعنی یه EXE میخوام که با اجرای اون یه فرم ظاهر بشه و یه دکمه داشته باشه و با زدن اون یه پیغام نشون بده و محل Explorer.exe رو نشون بده .
با تشکر
البته بعد از دامپ روش کار رو توضیح میدم .
فقط یه عدد مابین 0 تا 100 به امنیتش بدین .
دستتون درد نکنه .

Securebit
یک شنبه 23 تیر 1387, 21:21 عصر
منتظر MUP باشید
درجه امنیت پروتکتور 10/3
زمان برای کشف الگوریتم 20 دقیقه
زمان برای آنپک 5 دقیقه

HadiDelphi
دوشنبه 24 تیر 1387, 14:06 عصر
آقای بردیا دستتون درد نکنه
MUP چیه؟
من که برنامه رو پک نکردم.
اگه میشه یه توضیح کوچولو هم در مورد نحوه Dump بدین .
تشکر

B-Vedadian
دوشنبه 24 تیر 1387, 14:55 عصر
سلام،

لطفا یکی صورت مساله رو یکم واضح تر برای من توضیح بده. آیا مقصود دامپ رویه ایه که به explorer.exe تزریق میشه؟ (فایل اجرایی موجود بدون هیچ تغییر کاری که خواستید، نمایش فرم و ... را انجام میده)

HadiDelphi
سه شنبه 25 تیر 1387, 08:10 صبح
سلام،

لطفا یکی صورت مساله رو یکم واضح تر برای من توضیح بده. آیا مقصود دامپ رویه ایه که به explorer.exe تزریق میشه؟ (فایل اجرایی موجود بدون هیچ تغییر کاری که خواستید، نمایش فرم و ... را انجام میده)

منظور من این بود که برنامه دوم رو دامپ کنید . (همون که دارای دکمه Show Message هست که با زدن اون برنامه محل اجرا شدنش رو نشون میده )

Securebit
سه شنبه 25 تیر 1387, 23:54 عصر
MUP یک نوع آموزش
برنامه شما در هر صورت یک پروتکتور هست و عکس آن میشود آنپروتکت یا آنپک

B-Vedadian
پنج شنبه 27 تیر 1387, 15:31 عصر
براي دامپ برنامه من از اين روش استفاده کردم.

1-اجراي يک دامپر (با قابليت unprotect کردن حافظه پروسه مقصد)
2-بعد اجراي برنامه project1.exe و بعدش زدن کليد Load (تو اين حالت، پروسه تزريق شده به Explorer نميتونه جلوي دامپ شدن رو بگيره)
3-دامپ حافظه مربوط به نسخه Explorer که اول اجرا و بعدش تحريف شده.
4-بازسازي هدر کاملا از بين رفته برنامه دلفي (دقت کنيد که چون برنامه دلفيه، پيدا کردن محل CODٍE، BSS و بقيه Sectionها کار ساده ايه.
5-بازسازي جدول Import. اين جدول به سهولت قابل بازسازيه. کافيه بعد نام dll مربوطه به ترتيب اسامي توابع import شده رو بخونيم و محل درست IMPORT_BY_NAME ها رو جاگذاري کنيم)

با اين همه، هرچند برنامه بازسازي شده نميدونم کجاي کار رو اشتباه کردم که متغيرهاي Application و Form1 رو پيدا نميکنم و براي همين برنامه درست کار نميکنه.

فکر کنم که از کد AfxRootKit استفاده کردين و براي Hook کردن علاوه بر اين از madCodeHook هم بهره گرفتيد. چند تابع خيلي جالب به چشمم خورد که اگه به درستي ازشون استفاده بشه واقعا کار نفوذگر رو سخت مي کنند.

يکيشون تو آدرس 450224 بود و کار GetProcAddress رو ميکرد. يک رشته کد شده از نام تابع import مي گرفت بعدش محلشو تو جدول export ماژول مربوطه پيدا ميکرد.

آقاي برديا، اگه لطف کنيد بگيد چطور دامپش کرديد خيلي ممنون ميشم

HadiDelphi
پنج شنبه 27 تیر 1387, 15:48 عصر
دستتون درد نکنه آقای B-Vedadian
یه سوال : شما بعد از دامپ کرد پروسه Explorer.exe و با استفاده از اون هدر رو باز سازی کردین ؟
یه سوال دیگه : آیا باز سازی هدر رو میشه از راه دیگه ای هم ( به طور دستی و با در دست نداشتن چیزی ) انجام داد ؟

از AfxRootKit استفاده نکردم ولی از MadCollection استفاده کردم .

B-Vedadian
پنج شنبه 27 تیر 1387, 16:52 عصر
شما برنامه دلفي بجز هدر رو بطور کامل به پروسه اي که از طريق اجراي Explorer ايجاد مي کرديد، تزريق مي کرديد. وقتي اونو دامپش کنيم، بازسازي هدر کار سختي نيست، فايلهاي دلفي ساختار مشخصي دارن. در ضمن بازسازي رو هم بجز براي جدول import بصورت دستي انجام دادم.

بدون داشتن چيزي يعني چه؟ اگه چيزي نباشه، هدر چي رو درست کنيم؟

فايلي که من بدست آوردم هنوز خطا داره، هرچند يک Application معتبر ويندوزه و DeDe هم بدون مشکل باهش کار ميکنه.

کار آقاي برديا، خيلي قشنگتره، سر بزنگاه فايل شما رو قبل اجرا دامپ کردن (حد اقل من اينطوري فکر ميکنم).

HadiDelphi
پنج شنبه 27 تیر 1387, 17:36 عصر
دستتون درد نکنه ولی فکر میکنم اگه برنامه اصلی یه بار با یه پکر , پک بشه که ساختار سکشنهاش یه خورده تغییر کنند , و بعد با این برنامه پروتکت بشه باز سازی هدر خیلی سخت میشه چون از حالت استاندارد خارج میشه , درسته ؟

B-Vedadian
پنج شنبه 27 تیر 1387, 22:23 عصر
نه لزوما. اگه پکرش آشنا باشه، دوباره به همون مشکل پيش ميآد.

Nima NT
پنج شنبه 27 تیر 1387, 23:28 عصر
قرار نیست پکر آشنا باشه ‌، قراره یه کاری کنیم که کراکر نوع پکر رو تشخیص نده و این کار هم تقریبا" کار آسونی نیست.

Securebit
شنبه 29 تیر 1387, 14:53 عصر
درجه امنیت 10/3
زمان برای آنپک 10 دقیقه

Securebit
شنبه 29 تیر 1387, 18:33 عصر
اینم آموزش آنپک کردن PDM 4 برای بچه های خوب برنامه نویس امید وارم لذت ببرید

HadiDelphi
شنبه 29 تیر 1387, 19:39 عصر
آقا بردیا واقعا تشکر میکنم
خوب من هم روش کارم رو توضیح میدم:
من اول برنامه اول رو درست کردم که از Data.Dat یه DLL رو به حالت Stream میخوند و به خودش تزریق میکنه این DLL بعد از اجرا یه Process تو رم درست میکنه , پروسه دوم هم مثل پروسه اول یه DLL دیگه رو از تو Data.Dat میخونه و تو خودش تزریق میکنه که این Dll هم برنامه اصلی رو از تو Data.Dat میخونه و تو رم Load میکنه .

من دارم رو روش NanoMites کار میکنم که انشا الله تو Dump Me 5 می خواهم به کار ببرم واسه همین شاید مدت زمان ساخت Dump Me 5 یه خورده طولانی بشه .
دوباره از آقای بردیا تشکر میکنم

Developer Programmer
شنبه 29 تیر 1387, 20:38 عصر
هادی جان، واست مقدوره سورسش رو بذاری؟ چند وقته دنبال تزریق کد میگردم.

HadiDelphi
شنبه 29 تیر 1387, 21:44 عصر
متاسفم چون سورس مال شرکت هست نمیتونم .
ولی اگه دنبال تزریق Dll از Stream به پروسه هست یه تابع تو UallCollection هست که تابع LoadLibrary ویندوز رو باز نویسی کرده با یکمی تغییر اون میتونی این کار رو انجام بدی
ولی اگه میخوای یه تابع رو به یه پروسه اینجکت همین جا تو یکی از تاپیک ها , آقای Inspire توضیح داده و یه مثال هم زده

HadiDelphi
دوشنبه 31 تیر 1387, 13:58 عصر
خوب بازه هم Please Dump Me آپدیت شد
اینبار یه روش جدید برای Anti Dump توش به کار بردم
از کرکرین درخواست میکنم یه نگاهی به این ورژن هم بندازن ممنون میشم .:لبخند:
فقط یه باگ داره که بعضی مواقع برنامه رو درست ران نمیکنه ( نمیدونم از کجاست ) اگه برنامه ران نشد یه بار برنامه رو ببندید و دوباره ران کنید .

Securebit
دوشنبه 31 تیر 1387, 21:40 عصر
رو سیستم من اصلا اجرا نمیشه طبق آنالیزی که کردم احتمالا باگ مال پروتکتی باشه که با MoleBox کردید
و هوک هایی که زیادی گذاشتید.

HadiDelphi
دوشنبه 31 تیر 1387, 22:25 عصر
نه من اصلا از هوک استفاده نکردم ولی از MolBox استفاده کردم
به هر حال باشه سعی میکنم اصلاحش کنم

Securebit
سه شنبه 01 مرداد 1387, 14:58 عصر
روی SP3 نتونستم اجراش کنم ولی روی SP2 به هر زحمتی بود اجرا شد.
تو این نسخه از Stolen OEP استفاده شده بود که ترمیم شد.

HadiDelphi
سه شنبه 01 مرداد 1387, 22:54 عصر
من کنه شدم , شدید:لبخند:
دوبار آپدیت شد اینبار از تکنولوژی Nanomites استفاده کردم هیچ گونه باگی هم نداره
فقط آقا بردیا و دوستانی که زحمت کرکش رو میکشن امتیاز یادتون نره.
با تشکر

Securebit
چهارشنبه 02 مرداد 1387, 17:51 عصر
درجه امنیت 5.5/10

Securebit
پنج شنبه 03 مرداد 1387, 01:39 صبح
آقا هادی لطفا بعد از آنپک شدن فایلتون توضیح کامل در مورد تکنیکی که استفاده کردید یادتون نره تا من هم مجبور نباشم هم آنپک کنم هم MUP بزارم.

Securebit
پنج شنبه 03 مرداد 1387, 01:49 صبح
اینم پارتهای بعدیش

Nima NT
پنج شنبه 03 مرداد 1387, 03:37 صبح
آقا بردیا ازتون بازم ممنونم ، تا این موقع صبح بیدار موندم تا کارهایی که شما انجام دادین رو تحلیل کنم ( بماند که چیزی حالیم نشد :خجالت: ) ، یه وقت دچار سوء تفاهم نشید ها منظورم عقل کل بودن خودمه ، فیلم هیچ ایرادی نداشت. :تشویق:
ولی یه سوال این که شما میگید Stolen OEP آیا همان تکنیکی نیست که پکر آرمادیلو ازش استفاده میکنه ؟

HadiDelphi
پنج شنبه 03 مرداد 1387, 10:46 صبح
اول از آقای بردیا تشکر میکنم که به ما کمک میکنن .
چشم من حتما در مورد روش کار برنامه توضیح میدم.
خوب برنامه از 3 برنامه مجزا تشکیل شده : اولین برنامه , پروسه پدر بزرگ هست که وظیفه اجرای برنامه دوم یا پرسه فرزند را دارد . پروسه پدر بزرگ بعد از ران کردن پروسه دوم اونو تحت دیباگ خودش در میاره . تو پروسه دوم یه تابع وجود داره (به نام LoadLib) که پروسه فرزند با استفاده از اون یه Dll به نام Loader.Dll رو ( که توی Data.dat هست ) به خودش Inject میکنه که این Dll هم پروسه نوه یا پروسه اصلی رو ران میکنه . نکته اصلی این هست که من با استفاده از Olly جای تابع LoadLib رو پیدا کردم و به جای اون که تولش هم 224 بایت هست Add Byte مینویسم ( با صفر پر میکنم ) بعد از این کار چون پروسه فزرند یا پروسه میانی تحت دیباگ و کنترل پروسه پدر بزرگ هست , وقتی کاربر دکمه Run رو میزنه تو پرسه میانی میزنه و پروسه میانی وقتی خواست تابع LoadLib رو اجرا کنه , پرسه پدر بزرگ کار رو متوقف میکنه و تابع LoadLib رو درست میکنه و اجازه ادامه فعالیت رو به پروسه میانی میده و پرسه میانی هم Dll رو Load میکنه و Dll هم برنامه اصلی رو ران میکنه .

از آقای بردیا هم دوباره تشکر میکنم و یه سوال دارم :
اگه من همه کار ها رو به صورت اتوماتیک انجام بدم یعنی دکمه ران رو بردارم و سیستم هوک رو هم فعال کنم تو امنیت برنامه چه قدر تاثیر میزاره ؟

Securebit
پنج شنبه 03 مرداد 1387, 14:11 عصر
ولی یه سوال این که شما میگید Stolen OEP آیا همان تکنیکی نیست که پکر آرمادیلو ازش استفاده میکنه ؟

در نسخه 6 از Stolen Code استفاده شده بود نه Stolen OEP
Stolen OEP منحصر به Armadilo نیست خیلی از پروتکتور های قدرتمند از این شیوه استفاده میکنند ولی در مورد پروتکتور آقا هادی میشه گفت از تکنیک Armadilo استفاده شده.

Securebit
پنج شنبه 03 مرداد 1387, 14:12 عصر
اگه من همه کار ها رو به صورت اتوماتیک انجام بدم یعنی دکمه ران رو بردارم و سیستم هوک رو هم فعال کنم تو امنیت برنامه چه قدر تاثیر میزاره ؟

در اصل من با شیوه ای که شما برای پروتکت کردن فایل استفاده میکنید زیاد موافق نیستم برای هر چه قدرتمندتر شدن پروتکتور شما باید تمام تکنیکهای پروتکت رو روی فایل اصلی انجام بدید این یکم سخت هست ولی ارزش کار خیلی بالاست.

B-Vedadian
پنج شنبه 03 مرداد 1387, 22:27 عصر
تکنيک بکار رفته طبق اون چيزي که تو MUP آخري بود، nanomite نيست.

نانومايت روشيه که در اون، کد اصلي که اجرا ميشه شامل خيلي از jmpهاي لازم نيست. بجاي اون‏ها وقفه ديباگ قرار گرفته. اين يعني اگه هم بتوني برنامه رو دامپ کني، عملا به هيچ دردي نمي خوره، مگر اينکه مکان‏هاي پرش به درستي پيدا بشه و با پرش‏هاي مناسب جايگزين بشه. البته اين تکنيک هم قابل شکستنه ولي خوب، کار سخت تره.

روش کار نانوميت به اين صورته که در ابتدا يک برنامه تهيه ميشه و در محل‏هايي که توسط يک کارشناس مناسب تشخيص داده شدن، يک علامت کنار پرش‏ها(يا پرش‏هاي شرطي) گذاشته ميشه. در مرحله بعد يک برنامه ديگه اين مکان‏ها رو تو فايل اصلي پيدا کرده و بعدش مقادير پرش‏ها رو با int3 عوض ميکنه. به ازاي هر کدوم از اين پرش‏ها تو يه جدول که به همين منظور طراحي شده، مشخصاتش رو يادداشت ميکنه. حالا يک stub به برنامه اضافه ميشه که در ابتدا مجوز ديباگ رو براي پروسه خودش فعال ميکنه و بعدش به عنوان يک ديباگر برنامه اصلي رو اجرا ميکنه.
هر وقت به يکي از اون پرش‏هاي کذايي برسيم، حالا جاش int3 هستش و بنا بر اين، پروسه پدر فراخواني ميشه. پروسه پدر با توجه به context پروسه فرزند (خصوصا مقدار EIP) از جدول محل مناسب پرش رو پيدا کرده و پروسه فرزند رو به اون هدايت ميکنه.

براي اينکه محافظت قوي باشه، تمام احتياط‏هاي لازم تو پروسه پدر بايد بکار گرفته بشه. جدول مربوط به پرش‏ها هم بايد طي يک رويه کاملا مبهم شده (obfuscated) جستجو بشه. علاوه بر اون جدول رو با کلي اطلاعات الکي و چرت و پرت مخلوط ميکنن.

براي باز سازي اينجور تصاوير اجرايي، بايد يج جوري از شر روتين‏هاي شناسايي ديباگر و ... خلاص شد و بعدش سر بزن‏گاه موقع فراخواني GetThreadContext و SetThreadContext يقه پروسه پدر رو گرفت و از اونجا جدول پرش رو بازسازي کرد.

Nima NT
پنج شنبه 03 مرداد 1387, 23:45 عصر
میشه این روش رو به جای استفاده تو یه پروسه پدر فرزندی تو یه سیستم فامیلی استفاده کرد ، و نهایتا" جد بزرگوار رو توسط تکنولوژری Run time Anti Debug محافظت کرد ، این طوری کار کراکر سخت تر میشه ، نقطه ضعف آرمادیلو هم به نظر من به همین خاطره که به جای استفاده از تعدد پروسه ها اومده به پکر خودش اعتماد کرده و عملیات رو تو پروسه پدر فرزندی خلاصه کرده.
تکنیک Runtime Antidebug و همین تعدد پروسه ها یا به اصطلاح Familar Protection فکر خودم نیست ، این تکنولوژی ها اولیشون تو سال 2002 توسط کراکری به نام lightFXXK ( شرمنده ام ، اسمشو من انتخاب نکردم ) از گروه امنیتی موسوم به BingoWAY تو یه crackme استفاده کرد ، که توسط گروه به نام God of Unpacking شکسته شد ، تکنیک تعدد فامیلی رو هم تو یکی از مقالات کراکر ایتالیایی به نام Joker_Italy خوندم.
البته تمامی این شیوه ها شکسته شدن ولی خوبیشون اینه که شکستن این شیوه ها کار کراکر های معمولی نیست و میتونه هدف خوبی برای گروه های امنیتی کلاه سیاه باشه .
یه تکنیک هم وجود داره که بهش میگن SecureLM ، برای ایستگاه کاری دات نت توسط مایکروسافت طراحی شده ، ولی امروزه برای برنامه های Native هم کاربرد پیدا کرده ، این تکنیک ماورای همه این حرفاست ، بحثش خیلی طولانیه ، یکی دوتا مقاله در مورد اون دارم ، پیدا کردم ضمیمه میکنم تا برادران هم استفاده کنن.


براي باز سازي اينجور تصاوير اجرايي، بايد يج جوري از شر روتين‏هاي شناسايي ديباگر و ... خلاص شد و بعدش سر بزن‏گاه موقع فراخواني GetThreadContext و SetThreadContext يقه پروسه پدر رو گرفت و از اونجا جدول پرش رو بازسازي کرد.در این مورد هم با تعدد پروسه ها و فعال بودن Runtime AntiDebug ، رد شدن از روتین های آنتی دیباگ تقریبا" کار حضرت فیل میباشد:لبخند:
شاید بگید که خوب مثل آقا بردیا فایل ها رو یکی یکی از رم میکشیم بیرون و ادامه ماجرا ، بدی Runtime AntiDebug اینه که حتی به موقع میتونه تشخیص دستکاری فایل رو بده ( حتی دامپ کردن) ، من از این شیوه نه به عنوان برنامه نویسی بلکه با استفاده از یه حقه کوچیک تو Unpackme خودم استفاده کرده بودم ، این شیوه توسط تمامی زبانهای برنامه نویسی قابل پیاده سازیه و کار ساده ای هم نیست . این تکنیک امروزه در قالب یه Plugin ، یا یه فایل DLL همگانی برای اکثر پکرها قابل استفاده هستش ولی عیب بزرگی داره و اون هم عدم سازگاری با برخی نرم افزارهای امنیتی ضد ویروس هستش که تا به امروز این معضل حل نشده ، حتی فایل Unpackme بنده توسط ضد ویروس Panda به عنوان فایل خطرناک شناخته میشه ( میتونید امتحان کنید ).
ضریب امنیت این شیوه در سال 2003 توسط انجمن بین المللی مبارزه با سرقت نرم افزاری 99.9 ٪‌اعلام شد ، که 3 سال بعد توسط یکی دوتا کراکر هلندی شکسته شد.
البته با شکسته شدن این شیوه از ارزش اون کاسته نشد ، و هنوز مثل CRC Check ازش استفاده میشه.

HadiDelphi
جمعه 04 مرداد 1387, 09:10 صبح
تکنيک بکار رفته طبق اون چيزي که تو MUP آخري بود، nanomite نيست.

نانومايت روشيه که در اون، کد اصلي که اجرا ميشه شامل خيلي از jmpهاي لازم نيست. بجاي اون‏ها وقفه ديباگ قرار گرفته. اين يعني اگه هم بتوني برنامه رو دامپ کني، عملا به هيچ دردي نمي خوره، مگر اينکه مکان‏هاي پرش به درستي پيدا بشه و با پرش‏هاي مناسب جايگزين بشه. البته اين تکنيک هم قابل شکستنه ولي خوب، کار سخت تره.

روش کار نانوميت به اين صورته که در ابتدا يک برنامه تهيه ميشه و در محل‏هايي که توسط يک کارشناس مناسب تشخيص داده شدن، يک علامت کنار پرش‏ها(يا پرش‏هاي شرطي) گذاشته ميشه. در مرحله بعد يک برنامه ديگه اين مکان‏ها رو تو فايل اصلي پيدا کرده و بعدش مقادير پرش‏ها رو با int3 عوض ميکنه. به ازاي هر کدوم از اين پرش‏ها تو يه جدول که به همين منظور طراحي شده، مشخصاتش رو يادداشت ميکنه. حالا يک stub به برنامه اضافه ميشه که در ابتدا مجوز ديباگ رو براي پروسه خودش فعال ميکنه و بعدش به عنوان يک ديباگر برنامه اصلي رو اجرا ميکنه.
هر وقت به يکي از اون پرش‏هاي کذايي برسيم، حالا جاش int3 هستش و بنا بر اين، پروسه پدر فراخواني ميشه. پروسه پدر با توجه به context پروسه فرزند (خصوصا مقدار EIP) از جدول محل مناسب پرش رو پيدا کرده و پروسه فرزند رو به اون هدايت ميکنه.

براي اينکه محافظت قوي باشه، تمام احتياط‏هاي لازم تو پروسه پدر بايد بکار گرفته بشه. جدول مربوط به پرش‏ها هم بايد طي يک رويه کاملا مبهم شده (obfuscated) جستجو بشه. علاوه بر اون جدول رو با کلي اطلاعات الکي و چرت و پرت مخلوط ميکنن.

براي باز سازي اينجور تصاوير اجرايي، بايد يج جوري از شر روتين‏هاي شناسايي ديباگر و ... خلاص شد و بعدش سر بزن‏گاه موقع فراخواني GetThreadContext و SetThreadContext يقه پروسه پدر رو گرفت و از اونجا جدول پرش رو بازسازي کرد.

درسته به روشی که شما توضیح دادی نانومیتس میگن ولی اونی که من تو برنامه استفاده کرده بودم Nanomites++ یعنی روش نانومیتس رو یخورده تغییر داده بودم
به هر حال تشکر میکنم
و یه سوال هم دارم کسی در مورد روش CopyMem-II چیزی میدونه من که هر چقدر گشتم نتونستم اطلاعاتی رو در موردش پیدا کنم ؟
یه سوال دیگه هم از آقا بردیا داشتم اون هم اینکه اگه من اندازه بافری رو که کد های تابع مربوطه رو میخونه و تو پروسه هدف مینویسه به 1 بایت بروسونم و تو یه تابع که اندازش مثلا 1000 بایت هست از این روش استفاده کنم راهی برای کپی یکجای اطلاعات مثل چیزی که تو فیلم بود هست یا نه , باید 1000 بار عمل کپی و past رو انجام داد ؟

Nima NT
جمعه 04 مرداد 1387, 12:17 عصر
درمورد سوال آقا هادی در مورد CopyMem II ، مطالبی داشتم که عرضه میکنم ، فقط شرمنده وقت ترجمه نداشتن ، زحمتش رو خودتون بکشید.



1. garbage instructions:
insert many many garbage instructions to hide special instructions, disturb analysis and make people fret;

2. garbage loops:
same as the first item;

3. time comparing:
classic method, as step in/over need much longer than normal execution;

4. check parent process:
if target process is debugged, its parent process usually are not explorer.exe :)

5. check debugger:
windows provides some APIs to check if process is being debugged, such as: IsDebuggerPresent/NtQueryInformationProcess.
of course, you could also test CreateFile/PEB(just like IsDebuggerPresent to do).

6. dynamic encrypt/decrypt:
make analysis much more complex; re-encrypt the instructions which are passed could prevent cracker to check the old instructions effectivelly;

7. IAT encrypt:
stop the tools, e.g: ImpREC to recover IAT;

8. Fuzzy the instructions:
there are many ways to fuzzy the instructions, e.g: fuzzy the OEP instructions or fuzzy a random codes in process;

9. call:
use call instruction to confuse the cracker;

10. self-debug:
windows allows only one debugger to debug the target process, so we could use two or more processes. one process used to debug the special process to prevent cracker to debug the special process.
if we let one process to hook one interrupt, we could use this interrupt to decode or fuzzy some part codes;

11. SEH:
raise an exception manually to change process flow, such as: memory access exception, interrupt (int3,int1 or others), invalid instruction, invalid eip and so on;

12. multi-thread:
when a process is debugged and enter a breakpoint, all threads may be suspended. We could use this method to stop cracker:
a. change flow with multi-thread: modify main thread codes in sub thread, if sub thread is suspended, then main thread will fail;
b. use multi-thread decrypt main/sub thread codes;

13. anti-SMC:
use Timer or sub thread to set core memory space to READONLY access in a short time;

14. CRC checksum:
check codes CRC checksum to do a self test;

15. destroy debug environment:
modify DR register, interrtup process (int 1, int 3) or handle special interrupt by ourselves;

16. anti-DUMP:
set some useless memory space to NO_ACCESS, then some dump tools (e.g: LordPE) would not dump this process;

17. monitor keyboard:
monitor keyboard input, e.g: F7, F8, F9, F10;

18. Lock display:
lock display to prevent cracker to see the screen content;

19. destroy SEH environment:
invoke SetUnhandledExceptionFilter to stop debugger to catch exception;

20. debug parent process:
anti-debug;

21. CC protection or CopyMem-II protection:
such as modify all jump to CC (int 3), then we could use INT 3 handler to process the jump to correct address;
CopyMem-II means copy ourselves to another memory space to prevent to dump;

22. anti Attach:
destroy passed instruction to anti-attach; or create a process which doesn't support attach mode (require NT or later system);

23. instruction pre-fetch:
use CPU pre-fetch feature to disturb step trace, e.g:
mov word ptr [@@], 20cdh
@@:
nop
nop

24. create polymorphism packer codes:

25. save sensitive data to random space:

26. P-code:

use virtual CPU to run P-code to anti-debug;


When using CopyMem-II or the Debugger-Blocker, this variable will contain the program
ID of the SoftwarePassport/Armadillo control process for your program (the number that
is normally returned by the GetCurrentProcessId() API call), in decimal format. This is
sometimes needed to handle DDE messages.


یادم رفت بگم ، تمامی این روشهایی که عنوان شدن همشون تاریخ مصرفشون گذشته ( کرک شدن )

Securebit
جمعه 04 مرداد 1387, 14:48 عصر
یه سوال دیگه هم از آقا بردیا داشتم اون هم اینکه اگه من اندازه بافری رو که کد های تابع مربوطه رو میخونه و تو پروسه هدف مینویسه به 1 بایت بروسونم و تو یه تابع که اندازش مثلا 1000 بایت هست از این روش استفاده کنم راهی برای کپی یکجای اطلاعات مثل چیزی که تو فیلم بود هست یا نه , باید 1000 بار عمل کپی و past رو انجام داد ؟
بله با این عمل کار کرکر بسیار سخت تر میشود و در بعضی مواقع برای آنپک کردن احتیاج به برنامه نویسی هست.

Developer Programmer
جمعه 04 مرداد 1387, 15:16 عصر
کسی میدونه چطور بدون استفاده از WriteProcessMemory میشه خطوط برنامه رو تغییر داد؟
این کد مشکل داره


asm
mov Word ptr [@@], $cc;
@@:
nop;
nop;
end;

Securebit
جمعه 04 مرداد 1387, 15:22 عصر
اینم سورس Stolen Code کاری که آقا هادی تو پروتکتورشون انجام داده بودند.

ali ahwaz top
شنبه 05 مرداد 1387, 19:35 عصر
کسی میدونه چطور بدون استفاده از WriteProcessMemory میشه خطوط برنامه رو تغییر داد؟
این کد مشکل داره


asm
mov Word ptr [@@], $cc;
@@:
nop;
nop;
end;



دلیلش اینکه اگه بخواهیم کدی رو در محدوده سکشن Code در رم تغییر بدیم خطا
رخ میده ولی میشه با LordPE و یا امثال اون سکشن Code رو Readو Write کرد با
تغییر دادن Flag اون.
یک راه دیگه هم وجود داره و اونم اینه که توی رم با کد نویسی این کار رو انجام بدیم.

HadiDelphi
یک شنبه 06 مرداد 1387, 15:06 عصر
و اینک Please Dump Me 7
در این ورژن از هیچ نوع پکری استفاده نشده , از تکنولوژی نانومیتس استفاده نشده
فقط از RunTime AntiDebug استفاده شده
فقط طبق معمول سطح یادتون نره
تشششششششششششششششکر:لبخند:: بخند:

Securebit
دوشنبه 07 مرداد 1387, 18:32 عصر
از نظر امنیت ورژن 7 با ورژن 1 هیچ تفاوتی نداشت ولی من از این تعجب میکنم که موقعی که دانلود کردم 8 نفر دانلود کرده بود یعنی از این 8 نفر 1 نفر هم نتونسته بود آنپک کنه من قبلا آموزش آنپک کردن این نوع از پروتکتور رو گذاشته بودم که!

امنیت پروتکتور 10/2

Nima NT
دوشنبه 07 مرداد 1387, 20:17 عصر
تکنولوژی به کار رفته تو برنامه یه جورایی نسخه ایرانی Runtime AntiDebug بود ولی جای کار کردن بیشتر زیاد داشت ، آقا هادی خیلی ساده این تکنیک رو پیاده سازی کرده بود ( با اطلاع قبلی ) ، ولی اگه قرار باشه این تکنیک با تعدد پروسه های فامیلی همراه بشه کرک کردنش کار ساده ای نخواهد بود.
چرا که شما میتونید با گرفتن جلوی AntiDBG.dll از اینجکت شدن به پروسه تقریبا" کار Runtime Antidebug رو یه سره کنید ولی در صورتی که تکنولوزی نانومیتس و همین تکنیک با هم اعمال بشن ( البته نه به تابلوئی اون DLL ) ، اون موقع بیرون کشیدن فایل Loader.dll وباالطبع بیرون کشیدن فایل نهایی کار ساده ای نخواهد بود.
اگر اشتباه میکنم لطفا" تصحیح کنید ، خوشحال میشم.

Nima NT
دوشنبه 07 مرداد 1387, 20:28 عصر
خوب یه توضیحاتی درمورد Runtime Antidebug هم بدم که یه وقت نگید اصل موضوع چیز چرتیه.:لبخند:
به طور کاملا" ساده این تکنیک میاد با اجرای یه فایل مجزا ولی وابسته یه پروسه فراخوان یه سری از تکنیک های آنتی دیباگ رو اعمال میکنه ، پروسه مسئول این تکنیک در واقع اجرا کننده برنامه با پارامترهای رمزشده خواهد بود ، کلیدی کاملا" سری به پروسه فراخوان ارسال میشه ، کلید با یه کلید دیگه رمز میشه ، کلید رمزشده به خود پروسه مسئول بازگشت داده میشه و این پروسه فایل اجرایی نهایی رو با ارسال این کلید طولانی 256 بیتی اجرا میکنه ، پروسه میانی هم تحت دیباگ پروسه اول هستش .
اگه دقت کرده باشید هیچ کدوم از قسمت های PLZ Dump me 7 به این تکنیک شبیه نبود به همین خاطر اینو گفتم تا وقت به جناب تکنولوژی Runtime Antidebug توهین نشه ( مزاح کردم :لبخند: ).
در آخر حرفم هم از آقا بردیا به خاطر لطفی که نسبت به ما دارن تشکرمی کنم و براشون موفقیت روز افزون آرزومندم .:تشویق:

HadiDelphi
دوشنبه 07 مرداد 1387, 20:55 عصر
چرا آقا بردیا یه خورده تفاوت داشت اون هم این که این بار تو پروسه دوم هچ کدی وجود نداشت و برنامه اول یه Dll رو از Memory به پروسه دوم اینجکت میکرد و که من اگه بیام این دوتا Dll رو یعنی Loader.dll و AntiDBG.dll رو کاملا به برنامه اول وابسته کنم کرک کردنش به این سادگی هم نمیشه البته کار شمارو کم ارزش نمیکنم و از تون طبق همیشه نهایت تشکر رو میکنم
دوباره ممنون

HadiDelphi
سه شنبه 08 مرداد 1387, 18:43 عصر
این هم Please Dump Me 8
این بار هم از تکنولوژی نانومیتس و Stolen Code و پکر هیچ استفاده ای نشده
از RuntimeAntiDebug به روش بهینه تر نسبت به Please Dump Me 7 و همچنین از یه تکنیک من دراوردی استفاده کردم که کار رو یکم مشکل میکنه:شیطان::شیطان:
فقط باز هم سطح یادتون نره:لبخند:
باتشکر:قلب:

ali ahwaz top
سه شنبه 08 مرداد 1387, 19:01 عصر
سلام:
آقای HadiDelphi عزیز یک اشتباه توی تمام PLZDumpMe های شما وجود داره اونم اینکه
فایل هایی که بصورت پروسه فرزند فراخوانی میشوند همگی در یک فایل فشرده بنام Data.dat
که با فرمت FlexCompress هستش ارائه شده وبا اینکار میشه گفت سطح اونو به صفر رسوندید.
میشه بدون اینکه برنامه رو با دیباگر بررسی کنید فایلو از توی اون بیرون کشید.
به امید موفقیت همه شما دوستان یا حق.

HadiDelphi
سه شنبه 08 مرداد 1387, 19:10 عصر
سلام:
آقای HadiDelphi عزیز یک اشتباه توی تمام PLZDumpMe های شما وجود داره اونم اینکه
فایل هایی که بصورت پروسه فرزند فراخوانی میشوند همگی در یک فایل فشرده بنام Data.dat
که با فرمت FlexCompress هستش ارائه شده وبا اینکار میشه گفت سطح اونو به صفر رسوندید.
میشه بدون اینکه برنامه رو با دیباگر بررسی کنید فایلو از توی اون بیرون کشید.
به امید موفقیت همه شما دوستان یا حق.

من فقط این کار رو کردم که کل فایلها تبدیل به یکی بشه , اگه قرار باشه این برنامه روی یه برنامه تجاری باشه صددرصد از روشهای پیشرفته رمز نگاری استفاده خواهد شد
دوستان هم باید برنامه رو کرک کنن نه این که از فایل Data.dat بیرون بکشن

Nima NT
چهارشنبه 09 مرداد 1387, 11:52 صبح
Please Dump me 8
سطح امنیت : 6 /10
نوع عملکرد روتین Runtime Anti debug : متوسط
میزان سازگاری : نامناسب

منتظر MUP باشید ( البته یه کم حجمش زیاد میشه :لبخند: )

ali ahwaz top
چهارشنبه 09 مرداد 1387, 19:45 عصر
آقا HadiDelphi:
اینبار یه کمی بهتر شده بود.
ولی باز هم ضعف داره.
تمامی PLZDumpMe های شما رو میشه بعد از CreateProcessA با استفاده
از Dump کردن Regions های EXE ای که کار Loader رو انجام میده بسادگی ردیف کرد.

HadiDelphi
پنج شنبه 10 مرداد 1387, 12:15 عصر
سلام
این کرک می از دوبخش تشکیل شده شما باید کاری کنید که برنامه دوم کاملا مستقل عمل کنه
پیشاپیش از وقتی که میگذارید تشکر میکنم

ali ahwaz top
پنج شنبه 10 مرداد 1387, 12:16 عصر
سلام:
از اینکه کسی متوجه نشد NimaNT به همه رو دست زده خیلی ناراحتم.
این آقا اصلا" فایل اصلی رو Dump نکرده و من با یک کمی بررسی متوجه شدم که
این بابا خودش این برنامه رو نوشته و به عنوان PLZDumpMe برای ما گذاشته.
برای اثباتش اینو نگاه کنید و با فایل NimaNT مقایسه کنید.

Nima NT
پنج شنبه 10 مرداد 1387, 13:50 عصر
اینم به خاطر این که باز علی آقا نگه خودت برنامه رو از اول نوشتی ودامپ نکردی.
سیستم تولید کد منحصر به فرد فقط در دسترس آقا هادی هستش ، و من نه بلدم اون رو از اول بنویسم و نه این کار رو میکنم. :عصبانی:

سطح امنیت : 4 /10
ایجاد وابستگی به پروسه پدر : متوسط ( البته قابل شبیه سازی میباشد )
تکنیک به کاربرده شده : Code Encryption
البته فایل ضمیمه شده ، پیغام Code is False رو نشون نمیده ، چون رابطه تنگاتنگی با پدر داره ، منم وقت نداشتم که بیام تمامی بافر ها رو به آخر فایل اصلی ضمیمه کنم و برنامه رو مجبور کنم بره از اونجا و ....
کسی حوصله داشت رو اون هم کار کنه ، اصل موضوع دامپ اون بود که خدا رو شکر شد ، در ضمن آقا هادی استفاده از توابع API هم تو این crackme خیلی خوب بود.

HadiDelphi
پنج شنبه 10 مرداد 1387, 14:24 عصر
اگه ممکن برنامه ای که کاملا کرک شده رو بزارید چون اصلی ترین قسمت درست کردن توابع Encode شده بود
باتشکر از این که وقت میزارید

joker
پنج شنبه 10 مرداد 1387, 23:40 عصر
فایل cracked که همون دامپ نیما ان تی هست را به این شکل ( عکس ضمیمه ) اووررایت کنید پیغام صحیح دریافت میشه
مقادیر صحیح از پروسه فایل کرک می اصلی خونده شده و توی فایل دامپ شده نیما اوورایت شدن که نتیجه صحیح بود.
................................
..................................
توی آدرس 4B78E8 مقادیر زیر را جایگزین کنید
شرط هم که مشخصه ....


84 C0 74 0B B8 0C 79 4B 00 E8 B2 0A F7 FF C3 B8 2C 79 4B 00 E8 A7 0A 0F 7F C3
هادی چون زیادی حال میکنی بیشتر از این توضیح نمیدم :) هر وقت تو هم توضیحاتت درست حسابی بود توضیحات روش پیدا کردن هم درست حسابی میشن ( سورس ماله شرکته :)))))))))

ادیت شد :
اقا شرمنده کل از بیخ اشتباه از من بود ( دامپ نیما را نمیتونم تائید کنم )
از بس اینا پست تو مایه plzdumpme و اینا زدن قاطی پاتی کردم آخرین کرک می هادی را دانلود کردم و فکر کردم این جا بوده و خلاصه 2 تا تاپیک جابجا زدم :)
به بزرگی خودتون ببخشن :)
این پست مال یه کرک می آخر هادی هست ، یه تاپیک دیگه هست کلا :)
http://barnamenevis.org/forum/showthread.php?t=115789
لطفا این پست را منتقلش کنید جای اصلیش

joker
جمعه 11 مرداد 1387, 00:34 صبح
به خاطر سوتی که دادم مجبور شدم این 1.4 مگ را دنلود کنم
فایلت مشکل داره

Securebit
جمعه 11 مرداد 1387, 00:50 صبح
درجه امنیت 2/10

whitehat
جمعه 11 مرداد 1387, 21:10 عصر
پستهای اضافی پاک شدند. لطفا فقط در رابطه با موضوع بحث کنید
از فرستادن ارسالهای تک خطی و بی مورد به منظور بالا آوردن تاپیک،تشکر و ... خودداری کنید
از این پس با سخت گیری بیشتری در این مورد اقدام خواهد شد و کاربرانی که پستهای غیر مرتبط با موضوع می زنند جریمه خواهند شد.
موفق باشید