# مهندسی نرم افزار > مباحث مرتبط با مهندسی نرم‌افزار > امنیت در نرم افزار و برنامه نویسی >  JOKER-PROTECTOR

## joker

نرم افزاری رایگان برای محافظت نرم افزارهای شما در مقابل کرکرها....

این نسخه ، هنوز جزو نسخه های اولیه این نرم افزار هست که حالا حالا باید روش کار بشه...

در هر صورت خوشحال میشم تست کنید و اشکالات فنی برنامه را بهم بگین...
در مواردی که موفق شدید آنپکش کنید ، خواهشمند است به صورت توضیحی مراحل طی شده را همینجا ارائه بدین تا توی نسخه های بعدی ببینم میشه جلوی روش مورد استفاده را بگیرم یا نه...

دوستانی که در ضمینه امنیت نرم افزار ایده هایی یا روشهایی دارن ، خوشحال میشم توی این پروتکتور به مرحله اجرا درشون بیارم....

EDITED
جهت دریافت نسخه آخر 1.1.3 به صفحه آخر مراجعه کنید.

----------


## مهران موسوی

دوست عزيز زحمت كشيديد .. ولي قصد نداريد امكانات اين پروتكشن رو ليست كنيد و اينجا بزاريد تا ما بفهميم بايد بيشتر روي چه قسمتهايي مانور بديم ... ؟؟؟

در ضمن اگر مايل باشي در اواخر خرداد منم ميتونم در تكميلش بهت كمك كنم .. اگر هم كه نه خودم قصد طراحي داشتم ... قبلا هم كارهايي در اين زمينه انجام دادم ...

----------


## Bahram0110

سلام
با چه زبوني نوشتي؟
‏(الان امكانش نيست تست كنم)

----------


## joker

> دوست عزيز زحمت كشيديد .. ولي قصد نداريد امكانات اين پروتكشن رو ليست كنيد و اينجا بزاريد تا ما بفهميم بايد بيشتر روي چه قسمتهايي مانور بديم ... ؟؟؟
> در ضمن اگر مايل باشي در اواخر خرداد منم ميتونم در تكميلش بهت كمك كنم .. اگر هم كه نه خودم قصد طراحي داشتم ... قبلا هم كارهايي در اين زمينه انجام دادم ...


شما کلا آنپکش کنید ،

اما چیا استفاده شده :
 چندتائی روتین تشخیص دیباگر 
  روتین قفل صفحه کلید با استفاده از تابع BlockInput
  یکسری روتینهای گمراه کننده یونیورسال آنپکر ها.
  یکی دو تا روتین آنتی دامپ ( توی 2-3 تا نسخه قبلیش بود ، برشون داشتم ، روی بعضی برنامه ها تداخل ایجاد میکرد )
  روتین های جیش تو شلوار  :لبخند گشاده!:  ( برنامه خودشو توی حافظه خراب میکنه که دامپ به صورت صحیح انجام نشه )
  روتینهای کدینگ RC4 – SHA256
  CRC چکهای خاص برای تغییرات هدر فایل 
  رویتینهای آنتی فانتوم که  علی اهواز تاپ زحمتشو کشیدن
  روتین آنتی اتچ دیباگر – جناب استاد اعظم Magic_h2001 زحمتشو کشیدن ( موقتا توی این نسخه 1.0.5 حذف شده ، توی یه فروم دیگه کرک زیر تسته )
  روتینهای گمراه کننده هوک های تشخیص OEP ( هنوز زیر تست درست حسابی نرفته ) 
  و....

پیوست: خوشحال میشم به کمک شما دوستان بتونیم یه پروتکتور خوب بدیم دست برنامه نویس جماعت ....





> سلام
> با چه زبوني نوشتي؟
> ‏(الان امكانش نيست تست كنم)


پیوست2: دلفی.

----------


## دنیای دلفی

من در ضمينه كركينك توانايي ندارم ولي اين چيزها رو توش پيدا كردم :
1- يك شي TImage به نام Image1
2- يك شي TLabel به نام Label1
3- دو شي DCP_rc41,DCP_sha11
4- دو تا تايمر به نامهاي Timer1 و Timer2 اولي با اينتر ول 3500 ميلي ثانيه در رويداد OnTimer هردو كد نويسي شده است
5-يك شي SystemsDirs1 كه مسيرهاي زير داخلش تعريف شده است :
C:\Program Files
C:\Documents and Settings\joker\Desktop
C:\WINDOWS\Fonts
C:\Documents and Settings\joker\Start Menu
C:\Documents and Settings\joker\Start Menu\Programs
C:\Documents and Settings\joker\Recent
C:\Documents and Settings\joker\Start Menu\Programs\Startup
C:\DOCUME~1\joker\LOCALS~1\Temp

حالا دارم رو بقيش كار مي كنم .

----------


## مهران موسوی

جالبه ... بايد صبر كنيم اقاي Fh_prg بياد ببينيم چيكار ميكنه .. هر چند من بعيد ميدونم نتونه انپكش كنه ... من خودم زياد با انپك كردن خوب نيستم .. يعني نميدونم چرا اصلا حسش نيست كه روي اين موضوع  كار كنم .. ولي بعدا يكم تمرين ميكنم ... ( پروتكشنش چقدر تبليغات داره   :گیج: ) اگه بعدا توي كامل كردنش كمكت كردم يه كاري ميكنم حجم فايلها رو هم كم كنه .. ( *قبلا پياده سازيش كردم* )... يه كاري ميكنم اصلا هيچ اثري از برنامه پروتكت شده وجود نداشته باشه چه برسه به اينكه بخواي ازش محافظت كني ... ( البته فقط براي برنامه هاي نوشته شده با دلفي) ( *قبلا پياده سازيش كردم* ) يعني با اين كار DEDE پوچ ميشه .. و فقط چند تا متد براي انتي دامپ Olly نياز داريم كه با وجود اون Olly هم پوچ ميشه ...  :لبخند:

----------


## Fh_prg

والا چي بگم؟
براي شروع كار خوبه!
روشهاي آنتي ديباگ به كاررفته تقريبا جديده و تازه كارهارو گيج ميكنه
اين نوع پروتكشن ها يك روش عمومي براي دور زدن دارن منظورم پروتكشنهايي هست كه از يك پروسه پدر و فرزند تشكيل شدن بدون استفاده از ديباگ مود
در اين نوع پروتكشن پروسه پدر يك پروسه فرزند از خودش درست ميكنه و كدهاي مورد نظر خودش رو به اون تزريق ميكنه و پروسه رو با صدا زدن ResumThread به اجرا در مياره
اين روش رو تو چند تا قفل ساخت ايران و همينطور در برنامه TzExeProtector ديدم
روش  عمومي اينه كه با BP گذاشتن روي ResumThread ميتونيم به راحتي پروسه فرزند رو بعد از ساخته شدن در حالي كه آماده براي اجرا شدن هست دامپ كنيم
به همين راحتي بدون نياز به كار اضافي برنامه رو تروتميز دريافت ميكنيم حتي نياز با بازسازي ايمپورتها هم نيست

پيشنهادها:
پروسه پدر بايد آنتي ديباگ قوي داشته باشه تا كركر هيچوقت به مرحله ساختن پروسه فرزند نرسه يا اگر هم رسيد يك پروسه خراب شده رو اجرا كنه
پروسه فرزند نبايد توسط ديباگر Attach بشه و اگر شد بايد PEB رو كلا به هم بريزين تا هيچي قابل تشخيص نباشه
پروسه فرزند نبايد به راحتي دامپ بشه و در صوتي كه دامپ شد بهم ريخته باشه و لقمه آماده نباشه

نكته:
گفتم پروسه پدر و فرزند با پروتكشن معروفي مثل Armadillo اشباه نشه چون اون هم از همين روش استفاده ميكنه با اين تفاوت مهم كه در حالت ديباگ مود اينكارو ميكنه يعني خودش يك ديباگر داخلي داره

----------


## joker

با این تعاریف الان کلی خر کیف شدم  :بوس:  :لبخند گشاده!: 

در مورد ResumThread اومدم چندین بار این تابع را قبل از تابع اصلی الکی الکی صدا کردم
والا نسخه 1.0.4 به همین روش مورد عنایت قرار گرفت 
فعلا هم راهی برای پوشش این توابع نمیدونم.... روشی سراغ دارید ؟

توی پروسه فرزند خواستم کد اینجکت کنم ، ولی هرکاری کردم پروسه ای که اینطوری لود شده بود خراب میشد.
برای جلوگیری از دامپ صحیح هم فعلا اومدم فایل را بعد از اجرا توی حافظه اطلاعات غلط توش نوشتم... 
منتها مشکلش اینه که اگه کرکر قبل از resumethread اصلی Bp بزاره کاریش نمیتونم بکنم  :افسرده: 
تا بعد ببینم چیکار میشه کرد ، بلاخره خدا بزرگه  :بوس: 

پیوست : برای به هم ریختن پروسه فرزند ( هنوز معلوم نیس پسره یا دخمل ) چه روشهایی پیشنهاد میکنین ؟

----------


## Securebit

ببخشید آقای جوکر ولی خیلی ضعیف بود :چشمک:

----------


## Securebit

آقای جوکر شما بهتر است به جای Bind کردن فایل و گذاشتن روتینهای آنتی دباگ روی فایل غیر اصلی بر روی فایل اصلی این کارها را انجام دهید مثل پروتکتورهای قدرتمندی چون Themida & EXECryptor تا پروتکتور قدرتمندتری داشته باشید.

----------


## joker

> آقای جوکر شما بهتر است به جای Bind کردن فایل و گذاشتن روتینهای آنتی دباگ روی فایل غیر اصلی بر روی فایل اصلی این کارها را انجام دهید مثل پروتکتورهای قدرتمندی چون Themida & EXECryptor تا پروتکتور قدرتمندتری داشته باشید.


ممنون ، توی فکرش هستم....
قدم قدم :) 
در صورتی که متن ، سورس یا مقاله ای در این روابط دارید ، خوشحال مشیم ازتون بگیرم جهت ادامه کار....

----------


## مهران موسوی

قشنگ توضيح بده كه اين سورس خفنت چه كارهايي ميتونه بكنه ...

بعد يك تاپيك براش درست كن تا هر كي خطا هاش رو برطرف كنه و بهش قابليت اظافه كنه و دوباره بزاره همون جا ... كار دسته جمعي بهتر از تكي هست ...

----------


## joker

یه کوچولو آپدیت شد

کمی در بر هم سازی
و روتینی مورد توجه دوستداران DeDe  :بوس: 

پیوست: همچنان باگ Resume را دارد. اما حالا بازم یه نگاهی بهش بکنید  :اشتباه: 
چنانچه روشهای دیگه آنپکی براش دارید غیر از مورد فوق بگین ، ببینم چه خاکی تو سرم باید بکنم  :قلب:

----------


## Securebit

آپدیتش اصلا اذیت نکرد خیلی راحت بود  :بامزه:

----------


## مهران موسوی

bardia جان يكم توضيح بده ... تو از چه روشي استفاده ميكني ...  از حالت bind در مياري بعد ديكد ميكني ؟؟ يا نه .. اگه اره چه جوري ديكد ميكني ؟؟

----------


## Securebit

خود کد پدر فرزندشو دکد میکنه بعد از دکد میتونی فایل رو دامپ کنی

----------


## مهران موسوی

انپكر قبلي رو دانلود نكرده بودم .. اين جديده رو هم تا پست قبلي دانلود نكرده بودم و همين الان با اين حرفت دانلود كردن ... خود پروتكش بود ... !!!! فايل پروتكت شده رو انتخاب كردم و وقتي عمليات رو انجام دادم ديگه اصلا اجرا هم نشد ... !!! اين چه انپكري هست ديگه ؟؟؟

----------


## Securebit

> انپكر قبلي رو دانلود نكرده بودم .. اين جديده رو هم تا پست قبلي دانلود نكرده بودم و همين الان با اين حرفت دانلود كردن ... خود پروتكش بود ... !!!! فايل پروتكت شده رو انتخاب كردم و وقتي عمليات رو انجام دادم ديگه اصلا اجرا هم نشد ... !!! اين چه انپكري هست ديگه ؟؟؟


آقای مهران شما اگر به نام فایل دقت کنید نوشتم Unpacked نه Unpacker واصلا هم قرار نبود برای این پروتکتور آنپکری نوشته شود قرار بود آنپک شود :اشتباه:

----------


## joker

> خود کد پدر فرزندشو دکد میکنه بعد از دکد میتونی فایل رو دامپ کنی





> آپدیتش اصلا اذیت نکرد خیلی راحت بود


خودم که میدونم چیکار کردم ;) 

اگه موقع ResumeThread دامپ کردید که هیچ ، فعلا حرفی نیست (فعلا تا بعد ببینم چیکار میشه کرد :)  )، اما اگه منظورتون اجرای برنامه و سپس دامپ کردنه : -- > برنامه پدر مقادیری بعد از OEP را روی پروسه فرزند مینویسه ، این چیزائی که الان مینویسه دقیقا همون هدر فایل اصلیه که آنپک کردین ، برای همین متوجه این مورد نمیشین ، روی یک فایل دیگه امتحان کنید ، نتیجه آنپک خراب را ببینید....

----------


## مهران موسوی

> آقای مهران شما اگر به نام فایل دقت کنید نوشتم Unpacked نه Unpacker واصلا هم قرار نبود برای این پروتکتور آنپکری نوشته شود قرار بود آنپک شود


ببخشيد من فكر كردم انپكر هست ... اشتباه شد  :لبخند:

----------


## joker

خب فکر کنم یه کارائی صورت دادم برای این قضیه resumethread
نسخه 1.0.8 
ادیت شد
پیوست: خوشحال میشم نقاط ضعف  این پروتکتور را بهم بگین ، اگه راه حلی هم دارید که بیشترتر خوشحال میشم  :چشمک:

----------


## Securebit

تو رو خدا دست از این روشت بردار با تکرار ResumeThread نمیتونی جلوی آنپک رو بگیری یا حتی کار کرکر و سخت کنی یک پیشنهاد دارم شما بیا سورس  Morphine 3.5 رو بردار روش GUI بزار روش خیلی بیشتر میتونی مانور بدی حتی می تونی به حد و اندازه های EXECryptor برسونیش من به شما آقای جوکر اطمینان دارم

----------


## P0uy4 53z4r

سلام

به به ! ميبينم که اينجا هم اومدی داديش Joker  !

@bardia_dst

Morphine چيه ؟؟؟ morphine فقط قابليت MultiPacker داره ! بدرد نميخوره !

----------


## joker

> تو رو خدا دست از این روشت بردار با تکرار ResumeThread نمیتونی جلوی آنپک رو بگیری یا حتی کار کرکر و سخت کنی یک پیشنهاد دارم شما بیا سورس  Morphine 3.5 رو بردار روش GUI بزار روش خیلی بیشتر میتونی مانور بدی حتی می تونی به حد و اندازه های EXECryptor برسونیش من به شما آقای جوکر اطمینان دارم


اینبار چندبار اجرای خالی نبود ،هدر هم خراب شده ها....  :اشتباه: 
گفتم اگه قرارشد دامپ بشه ، لااقل خراب دامپ بشه ! نکنه هرچی نوشتم Nop شده  :لبخند گشاده!: 

در مورد مورفین : والا من سورسهای خودمم یدور از اول بخونم یادم نمیاد چی به چیه چه برسه به سورس یکی دیگه  :چشمک:

----------


## joker

کمی آپدیت

1.0.9
http://www.alt.ir/jopr-1-0-9.zip


به اندازه 0.1 درصد توابع را مثلا خیر سرم پوشش دادم ، فعلا فقط توی حافظه آدرس توابع لود میشه و اجرا میشه ( هنوز باگ قبلی سرجاش موجود هست ، خوشحال نشین  :لبخند گشاده!:  )

----------


## joker

یک مورد باگ خطرناک که توش گزارش شده بود ( و این نیما از خدابیخبر برای آنپکر نوشته بود ) رفع شد.
دانلود : نسخه 1.1.0 
http://www.alt.ir/jopr-1-1-0.zip

----------


## ali ahwaz top

Joker جان سلام:
پروتکتور جنابعالی در Vista اجرا نمیشه و ویندوز به محض اینکه فایل EXE برنامه شما
اجرا بشه اونو میبنده.

----------


## ali ahwaz top

خطاب به همه دوستان:
اگه برنامه ای مینویسید لطفا" اول اونو توی تمام ویندوزهای رایج چک کنید و بعد بذارید بقیه
حالشو ببرن.

----------


## joker

> خطاب به همه دوستان:
> اگه برنامه ای مینویسید لطفا" اول اونو توی تمام ویندوزهای رایج چک کنید و بعد بذارید بقیه
> حالشو ببرن.


اشکال از ویستا هست   :لبخند گشاده!: (بر وزن جمله معروف برنامه نویسا که میگه  همیشه اشکال از سمت مشتری هست بخونید  :لبخند گشاده!: )
راستش من تاحالا ویستا نصب نکردم
این برنامه فعلا باگهای از نظر امنیتی اساسی داره ، اگه خدا خواست و یه دست درست حسابی به سروگوشش کشیدم ، سرصبر یه ویستا نصب میکنم تا ببینم ویستا به کجاش داره گیره میده و  مشکلات اسلام و مسلمینش حل میشه یا نه ....

----------


## Nima NT

با سلام 
من تو این مایه ها نیستم که بخوام به برنامه استاد گرامی ایراد بگیرم
ولی متاسفانه یا خوشبختانه برنامه لود شده تو رم به راحتی توسط Win hex دامپ می شه ، اصلاحش هم کار سختی نیست ، چون با دیباگ کردن پروسه پدر تو SoftICE میشه فهمید که پروسه بابا کی و چه جوری فایل رو تو رم می نویسه ، با این روش می تونم OEP رو پیدا کنم و .....
تمامی کاری که تایمر پدر برای اجرا کردن پسر خودش انجام می ده ، البته به زبان شیرین اسمبلی !


 loc_0906A55C: push ebp
  loc_0906A55D: mov ebp, esp
  loc_0906A55F: mov ecx, 00000004h
  loc_0906A564: push 00000000h
  loc_0906A566: push 00000000h
  loc_0906A568: dec ecx
  loc_0906A569: jnz 906A564h
  loc_0906A56B: push ecx
  loc_0906A56C: push ebx
  loc_0906A56D: push esi
  loc_0906A56E: mov var_4, eax
  loc_0906A571: mov esi, 0906EC40h ; 'MZP'
  loc_0906A576: xor eax, eax
  loc_0906A578: push ebp
  loc_0906A579: push 0906A86Dh ; 'éŽ‘ùÿëë^[‹å]Ã'
  loc_0906A57E: push fs:[eax]
  loc_0906A581: mov fs:[eax], esp
  loc_0906A584: call 09002A64h
  loc_0906A589: mov eax, var_4
  loc_0906A58C: mov eax, [eax+00000308h]
  loc_0906A592: xor edx, edx
  loc_0906A594: call 09029100h
  loc_0906A599: mov dl, 01h
  loc_0906A59B: mov eax, [90120D0h]
  loc_0906A5A0: call 0900327Ch
  loc_0906A5A5: mov [906EC34h], eax
  loc_0906A5AA: mov dl, 01h
  loc_0906A5AC: mov eax, [90120D0h]
  loc_0906A5B1: call 0900327Ch
  loc_0906A5B6: mov [906EC38h], eax
  loc_0906A5BB: mov dl, 01h
  loc_0906A5BD: mov eax, [90120D0h]
  loc_0906A5C2: call 0900327Ch
  loc_0906A5C7: mov var_8, eax
  loc_0906A5CA: mov dl, 01h
  loc_0906A5CC: mov eax, [90120D0h]
  loc_0906A5D1: call 0900327Ch
  loc_0906A5D6: mov ebx, eax
  loc_0906A5D8: mov eax, ebx
  loc_0906A5DA: call 09016148h
  loc_0906A5DF: push 0906A884h ; 'MY_EXE'
  loc_0906A5E4: push 0906A88Ch ; 'ANYOL'
  loc_0906A5E9: mov ecx, [0906E664h] ; 
  loc_0906A5EF: mov dl, 01h
  loc_0906A5F1: mov eax, [901214Ch]
  loc_0906A5F6: call 0901631Ch
  loc_0906A5FB: mov edx, ebx
  loc_0906A5FD: call 090160ACh
  loc_0906A602: mov eax, [906EC34h]
  loc_0906A607: call 09016148h
  loc_0906A60C: mov eax, [906EC38h]
  loc_0906A611: call 09016148h
  loc_0906A616: mov eax, var_8
  loc_0906A619: call 09016148h
  loc_0906A61E: push 00000078h
  loc_0906A620: call 0900CB88h ; Sleep(%x1)
  loc_0906A625: mov edx, [esi]
  loc_0906A627: mov eax, [906EC34h]
  loc_0906A62C: call 09016198h
  loc_0906A631: mov eax, [906EC3Ch]
  loc_0906A636: cdq
  loc_0906A637: push edx
  loc_0906A638: push eax
  loc_0906A639: mov eax, [906EC34h]
  loc_0906A63E: call 090159E8h
  loc_0906A643: mov eax, [906EC34h]
  loc_0906A648: mov edx, [eax]
  loc_0906A64A: call [edx]
  loc_0906A64C: push edx
  loc_0906A64D: push eax
  loc_0906A64E: mov eax, [906EC3Ch]
  loc_0906A653: cdq
  loc_0906A654: sub [esp], eax
  loc_0906A657: sbb [esp+04h], edx
  loc_0906A65B: pop eax
  loc_0906A65C: pop edx
  loc_0906A65D: push edx
  loc_0906A65E: push eax
  loc_0906A65F: mov edx, [0906EC34h] ; 
  loc_0906A665: mov eax, [906EC38h]
  loc_0906A66A: call 09015C64h
  loc_0906A66F: mov eax, 0098967Fh
  loc_0906A674: call 09002CCCh
  loc_0906A679: lea edx, var_10
  loc_0906A67C: call 090080A0h
  loc_0906A681: mov edx, var_10
  loc_0906A684: mov eax, esi
  loc_0906A686: call 090040D4h
  loc_0906A68B: mov eax, var_4
  loc_0906A68E: mov eax, [eax+0000030Ch]
  loc_0906A694: push [eax+40h]
  loc_0906A697: push 0906A89Ch
  loc_0906A69C: push [esi]
  loc_0906A69E: lea eax, var_14
  loc_0906A6A1: mov edx, 00000003h
  loc_0906A6A6: call 09004400h
  loc_0906A6AB: mov edx, var_14
  loc_0906A6AE: mov eax, [906EC38h]
  loc_0906A6B3: call 090160C4h
  loc_0906A6B8: mov eax, var_4
  loc_0906A6BB: mov eax, [eax+0000030Ch]
  loc_0906A6C1: push [eax+40h]
  loc_0906A6C4: push 0906A89Ch
  loc_0906A6C9: push [esi]
  loc_0906A6CB: lea eax, var_18
  loc_0906A6CE: mov edx, 00000003h
  loc_0906A6D3: call 09004400h
  loc_0906A6D8: mov eax, var_18
  loc_0906A6DB: call 09069FB4h
  loc_0906A6E0: push 00000064h
  loc_0906A6E2: call 0900CB88h ; Sleep(%x1)
  loc_0906A6E7: mov eax, [ebx+04h]
  loc_0906A6EA: call 0906A194h
  loc_0906A6EF: xor eax, eax
  loc_0906A6F1: push ebp
  loc_0906A6F2: push 0906A83Bh
  loc_0906A6F7: push fs:[eax]
  loc_0906A6FA: mov fs:[eax], esp
  loc_0906A6FD: mov eax, var_4
  loc_0906A700: mov eax, [eax+0000030Ch]
  loc_0906A706: push [eax+40h]
  loc_0906A709: push 0906A89Ch
  loc_0906A70E: push [esi]
  loc_0906A710: push 0906A8A8h ; '.DEC'
  loc_0906A715: lea eax, var_1C
  loc_0906A718: mov edx, 00000004h
  loc_0906A71D: call 09004400h
  loc_0906A722: mov edx, var_1C
  loc_0906A725: mov eax, var_8
  loc_0906A728: call 09016198h
  loc_0906A72D: mov eax, var_4
  loc_0906A730: mov eax, [eax+0000030Ch]
  loc_0906A736: push [eax+40h]
  loc_0906A739: push 0906A89Ch
  loc_0906A73E: push [esi]
  loc_0906A740: push 0906A8A8h ; '.DEC'
  loc_0906A745: lea eax, var_20
  loc_0906A748: mov edx, 00000004h
  loc_0906A74D: call 09004400h
  loc_0906A752: mov eax, var_20
  loc_0906A755: call 09008520h
  loc_0906A75A: mov eax, var_4
  loc_0906A75D: mov eax, [eax+0000030Ch]
  loc_0906A763: push [eax+40h]
  loc_0906A766: push 0906A89Ch
  loc_0906A76B: push [esi]
  loc_0906A76D: lea eax, var_24
  loc_0906A770: mov edx, 00000003h
  loc_0906A775: call 09004400h
  loc_0906A77A: mov eax, var_24
  loc_0906A77D: call 09008520h
  loc_0906A782: mov eax, var_8
  loc_0906A785: call 090159C8h
  loc_0906A78A: mov ebx, eax
  loc_0906A78C: mov byte ptr var_9, 5Ah
  loc_0906A790: push 00000000h
  loc_0906A792: push 00000001h
  loc_0906A794: mov eax, var_8
  loc_0906A797: call 090159E8h
  loc_0906A79C: lea edx, var_9
  loc_0906A79F: mov ecx, 00000001h
  loc_0906A7A4: mov eax, var_8
  loc_0906A7A7: call 09015C2Ch
  loc_0906A7AC: mov byte ptr var_9, 50h
  loc_0906A7B0: push 00000000h
  loc_0906A7B2: push 00000100h
  loc_0906A7B7: mov eax, var_8
  loc_0906A7BA: call 090159E8h
  loc_0906A7BF: lea edx, var_9
  loc_0906A7C2: mov ecx, 00000001h
  loc_0906A7C7: mov eax, var_8
  loc_0906A7CA: call 09015C2Ch
  loc_0906A7CF: mov byte ptr var_9, 45h
  loc_0906A7D3: push 00000000h
  loc_0906A7D5: push 00000101h
  loc_0906A7DA: mov eax, var_8
  loc_0906A7DD: call 090159E8h
  loc_0906A7E2: lea edx, var_9
  loc_0906A7E5: mov ecx, 00000001h
  loc_0906A7EA: mov eax, var_8
  loc_0906A7ED: call 09015C2Ch
  loc_0906A7F2: mov eax, ebx
  loc_0906A7F4: cdq
  loc_0906A7F5: push edx
  loc_0906A7F6: push eax
  loc_0906A7F7: mov eax, var_8
  loc_0906A7FA: call 090159E8h
  loc_0906A7FF: push 00000064h
  loc_0906A801: call 0900CB88h ; Sleep(%x1)
  loc_0906A806: mov eax, var_8
  loc_0906A809: mov eax, [eax+04h]
  loc_0906A80C: call 0906A194h
  loc_0906A811: xor eax, eax
  loc_0906A813: pop edx
  loc_0906A814: pop ecx
  loc_0906A815: pop ecx
  loc_0906A816: mov fs:[eax], edx
  loc_0906A819: push 0906A842h
  loc_0906A81E: mov eax, [906EC34h]
  loc_0906A823: call 090032ACh
  loc_0906A828: mov eax, [906EC38h]
  loc_0906A82D: call 090032ACh
  loc_0906A832: mov eax, var_8
  loc_0906A835: call 090032ACh
  loc_0906A83A: ret
}
end;

----------


## nima_subzero

Joker Protector UnPacker :

محمدعلي خان بالاخره حالا مجبور مي‌شويد سيستم خود را تغيير دهيد !

----------


## ali ahwaz top

جناب آقای Joker:
من چند تا راهکار اساسی دارم که شما رو از شر دامپرها نجات میده.
اول اینکه  آدرس OpenProcess ویندوز رو با یک فانکشن عوض کن شبیه کاری که Hook انجام
میده و در فانکشنی که میخوای اونو جایگزین کنی نگاه کن ببین Handle برنامه درخواستی با
برنامه شما یکی هست یا نه اگه نبود اجازه بده OpenProcess کارش رو بکنه.

و دوم اینکه پروسه فرزند رو بصورت HideProcess اجرا کن .

و سوم اینکه از تکنیکهای آنتی دیباگ و آنتی تریس پیچیده استفاده کن و سعی کن اجازه ندی
برنامه با هیچ دیباگری تریس بشه.

و چهارم اینکه یه بسم الله بگو و شروع کن.

و پنجم اینکه من هم میتونم کمکتون کنم روی منم حساب کنید.

----------


## joker

با سلام و تشکر از تک تک دوستانی که زحمت میکشن وقت میزارن و راهنمائی هاشون کمک میکنن به تقویت امنیت این جوجه پروتکتور....
کمی فکرم مشغول پروژه هامه ، تقریبا هر موقع یه کم فکرم آزاد میشه دارم مقالات مربوطه را میخونم و الی آخر....
ایشالا یکی دو هفته دیگه به نصایح دوستان عمل میکنم. امیدوارم بتونم کمی درست حسابی تر دستی به سروگوشش بکشم ....

تشکر ضربدر چندتا....  :قلب:

----------


## Developer Programmer

> محمدعلي خان بالاخره حالا مجبور مي‌شويد سيستم خود را تغيير دهيد


ممکنه سورس بذاری؟

----------


## Nima NT

سورس رو بی خیال شو ، ولی الگوریتم برنامه به این شکله که برنامه فایل ورودی رو در ریسورس یه فایل از پیش تعریف شده مخلوط می کنه و با اجرا کردن فایل مرجع ، برنامه مرجع فایل شما رو از داخل ریسورس خودش بیرون میکشه و مستقیم می نویسه تو رم.
برای اطلاعات بیشتر تو بخش Delphi دنبال  Tmemory Stream بگرد

----------


## Developer Programmer

> سورس رو بی خیال شو


جانم ؟!



> برای اطلاعات بیشتر تو بخش Delphi دنبال  Tmemory Stream بگرد


روی صحبتم با nima_subzero بود. نه شما

----------


## joker

آپدیت شد 
فکر کنم الان روی olly Beta هم یه کوچولو اذیت کنه ....
کمی روتین آنتی سافت آیس ( البته هنوز کامل نیست چون ظاهرا 28 روش مختلف برای تشخیص سافت آیس وجود داره که من فعلا به یکی دو تاش دسترسی پیدا کردم )
باگ ضایعی که مربوط به فایل موقتش میشد کامل رفع شد.
با Dump Region فکر کنم یه کم مشکل داشته باشید و فایل خراب تحویل بگیرید.
اون شبیه سازی کلیک موس حذف شد 

دانلود :
http://www.alt.ir/jopr-1-1-2.zip

پیوست :خوشحال میشم مشکلاتش را اعلام کنید
                                                                                __________________

----------


## joker

والا همین الان مجدد دانلود کردم ، فکرنکنم مشکلی داشته باشه.  :اشتباه: 
پیوست:
یکی دیگه از دوستان تست کنه ، ممکنه روی isp من فایل کش شده باشه متوجه خرابی نشده باشم ، چون 2بار آپلود کردم شک دارم.
با این اسم دانلود کن ببین مشکل داره 
http://www.alt.ir/upload_jopr-1-1-2.zip

----------


## Securebit

شما تا الان هر چی فایل تو ای سایت آپلود کردید من یکی با دانلودشون مشکل داشتم وبا DAP دانلود میکردم ولی این دفعه با DAP هم مشکل بر طرف نشد

----------


## joker

> شما تا الان هر چی فایل تو ای سایت آپلود کردید من یکی با دانلودشون مشکل داشتم وبا DAP دانلود میکردم ولی این دفعه با DAP هم مشکل بر طرف نشد


پس با این حساب باید هاستمو عوض کنم  :لبخند: 

لینک دانلود راپید شیر»  http://rapidshare.com/files/12386576...1-1-2.zip.html

----------


## Securebit

اول باید تبریک بگم به آقای جوکر به خاطر پیشرفتی که تو این نسخه داشتند
تکنیکهای آنتی دباگ در حد قابل قبولی بود
آقای جوکر ولی یک چیزی رو نمیشه فراموش کرد اونم WriteProcessMemory تا هست آنپک شدن برنامه شما رو به دنبال داره

----------


## joker

چه راه هائی برای مخفی کردن api ها سراغ دارید ؟

----------


## B-Vedadian

> چه راه هائی برای مخفی کردن api ها سراغ دارید ؟


یک راه ساده اینه که رابط برای محاسبه آدرس api درست کنید، مثلا آدرس ها رو با یک کلید به روش RSA کد کنید بعد موقعی که میخواید یک api رو صدا کنید دیکد کنید و بعد با call ax مثلا صداش کنید. البته همیشه هم از call ax استفاده نکنید. push ax بعدش ret هم کار میکنه. مسلما بهتره روشهای فراخوانی تو جاهای متفاوت متفاوت باشه.

----------


## Developer Programmer

> آقای جوکر ولی یک چیزی رو نمیشه فراموش کرد اونم WriteProcessMemory تا هست آنپک شدن برنامه شما رو به دنبال داره


بردیا جان، چرا یه آموزش MUP نمیسازی؟ اینطوری هم جوکر بیشتر متوجه میشه هم خلق الله بار علمی بیشتری پیدا میکنن...

----------


## hoax3r

برای مخفی کردن api بد نیست این سایت رو ببنید مثالش تو پک masm32 هم وجود داره

http://www.asmcommunity.net/board/index.php?topic=28761.0

من به اندازه بقیه دوستان وارد نیستم ولی دوست دارم ببنیم کار این پروتکتر به کجا میرسه

----------


## joker

> یک راه ساده اینه که رابط برای محاسبه آدرس api درست کنید، مثلا آدرس ها رو با یک کلید به روش RSA کد کنید بعد موقعی که میخواید یک api رو صدا کنید دیکد کنید و بعد با call ax مثلا صداش کنید. البته همیشه هم از call ax استفاده نکنید. push ax بعدش ret هم کار میکنه. مسلما بهتره روشهای فراخوانی تو جاهای متفاوت متفاوت باشه.


میشه یک مثال بزارید؟

من الان آدرس توابع را توی حافظه لود میکنم بعد موقع صدا زدن میره از آدرسی که لود شده استفاده میکنه. ولی فکر کنم در هر حال هرزمان آدرس دیکود بشه و قرار باشه API لود بشه همون اتفاق می افته .

سورس این قسمت خدمت شما:
تابع مورد نظر من اصلا توی جدول Import Table استفاده نشده و به صورت کد توی حافظه لود میشه


 WPM: function(hProcess: THandle; const lpBaseAddress: Pointer;
  lpBuffer: Pointer; nSize: DWORD; var lpNumberOfBytesWritten: DWORD): BOOL; stdcall;
  DllHandle: DWord;





  DllHandle := LoadLibraryA(PChar('kernel32.dll'));
  if (DllHandle <> 0) then
  begin
  @WPM := GetProcAddress(DllHandle,'WriteProcessMemory');





     WPM( ProcInfo.hProcess, pointer(ImageNtHeaders.FileHeader.NumberOfSections  ), @OverWriteData , 13, Bytes);



نسخه 1.1.3 
آپدیت شد (
الان خراب کردن اطلاعات Header فایل ، موقع لود شدن توی حافظه اضافه شد 
اینطوری DumpRegion دیتا خراب را سیو میکنه ، که بعضیاش بعد از Repair هم تصحیح نمیشن.(ایشالا ، آمین ، الهی و ربی ، ..... )

( تقلب نکنید  :بوس:  از اطلاعات فایل قبلی که بردیا آنپک کرده سوء استفاده کنید و جایگزین کنیدآ ، خودتون مقادیر را یا محاسبه کنید یا .... اصلا خودتون یک برنامه دیگه را پروتکت کنید و روش Mup بدین  :بامزه:  )

کمی مکث در حدود 3-2 ثانیه تا لود کامل برنامه براش طبیعیه ،
 داره غلط اضافه میکنه  :لبخند گشاده!:  )


سورسی برای دیباگ داخلی سراغ ندارید ، هرچی بیشتر در موردش دارم میخونم ، کمتر میفهمم :)  یه چیزی شبیه آرمادیلو
سورسی برای  Code Spliceing 
سورسی برای دختری با کفشهای کتانی
سورسی برای ....

----------


## ali ahwaz top

سلام:
از اینکه منو عددی حساب نکردید ممنونم.
بابا جان میشه بدون اینکه اسم یک API رو داشته باشی اونو صدا بزنی.
من اینو 4 سال پیش توی یک برنامه 2-3 کیلوبایتی دیدم.
سعی میکنم برنامشو واستون بذارم.

----------


## joker

> سلام:
> از اینکه منو عددی حساب نکردید ممنونم.
> بابا جان میشه بدون اینکه اسم یک API رو داشته باشی اونو صدا بزنی.
> من اینو 4 سال پیش توی یک برنامه 2-3 کیلوبایتی دیدم.
> سعی میکنم برنامشو واستون بذارم.





> جناب آقای Joker:
> من چند تا راهکار اساسی دارم که شما رو از شر دامپرها نجات میده.
> اول اینکه  آدرس OpenProcess ویندوز رو با یک فانکشن عوض کن شبیه کاری که Hook انجام
> میده و در فانکشنی که میخوای اونو جایگزین کنی نگاه کن ببین Handle برنامه درخواستی با
> برنامه شما یکی هست یا نه اگه نبود اجازه بده OpenProcess کارش رو بکنه.
>  و دوم اینکه پروسه فرزند رو بصورت HideProcess اجرا کن .
>  و سوم اینکه از تکنیکهای آنتی دیباگ و آنتی تریس پیچیده استفاده کن و سعی کن اجازه ندی
> برنامه با هیچ دیباگری تریس بشه.
>  و چهارم اینکه یه بسم الله بگو و شروع کن.
>  و پنجم اینکه من هم میتونم کمکتون کنم روی منم حساب کنید.


اولا دارم آخرین ورژن MAdCollection را (بخاطر MAdCodehook ) دانلود میکنم (11 مگه منم دیال آپ و هزارتا کار الکی دیگه :) خورد خورد دانلود میشه  :لبخند گشاده!:  )
دوم مخفی کردن پروسه بود که سورسی که گذاشته بودی را دیدم ، فکر نکنم حالا حالا بتونم کدشو اضافه کنم.
سوم دارم همینکارارا میکنم دیگه....  :لبخند گشاده!: 
چهارم»
پنجم : خیال کردی میتونی قسر در بری  :لبخند گشاده!: 

پیوست: من به حد کافی با اسمبلی مشکل دارم ،توروخدا سختش نکن  :بامزه:  خودت اون 2-3 کیلوبایت را آنالیز کن خبرشو به زبون دلفی بهم بده  :بوس:

----------


## Securebit

با نگارش قبلیش زیاد فرقی نمیکرد همون اشتباهات گذشته
HOOK خیلی میتونه تو سختی آنپک کمکت کنه
فردا شب یک فایل تو این زمینه میزارم شاید کمکت کنه

----------


## B-Vedadian

وقتی آدرس api رو تو حافظه ذخیره کنی، فرقی نمیکنه که با استفاده از LoadLibrary تو برنامه این کار رو بکنی یا سیستم عامل قبل اجرا این کار رو انجام بده.

من تا بحال کار دقیقی روی این موضوع نکردم ولی ایده میتونه این باشه

function CalcApiAddr(Coded: Cardinal): Cardinal; register; assembly
asm
    mov ax, Coded
    // یک مقدار عملیات ریاضی برای دکود کردن
    // نتیجه تو eax قرار بگیره
end;بعدش موقع صدا زدن
asm
    mov eax, CodedApiAddress
    push eip
    pop ebx
    add ebx, 8
    push ebx
    push eax
    jmp near @CalcApiAddr
    // قرار دادن پارامترها در استک، البته نه به طرز تابلو
    push eax
    ret
endیا روشهای غیر مستقیم دیگه برای فراخوانی یک آدرس. اینطوری دیگه آدرس حاضر و آماده یک api تو حافظه نیست که با یک تحلیل ساده، محل jmp و یا call های به اون آدرس رو بشه پیدا کرد.

نا گفته نماند این تکنیک ها جلوی BP روی حافظه رو نمیگیره و بنا براین باید به تعداد دفعات معتنا بهی از آدرس ابتدای api استفاده غیر از فراخوانی اصلی بکنید که به راحتی محلش پیدا نشه

در نهایت یک راه هم اینه که چند تا pop و pushهای اول api رو خودمون انجام بدیم و آدرس کد شده مربوط به ابتدای تابع api نباشه.

----------


## ali ahwaz top

سلام:
در مورد فراخوانی یک API باید بگم اگه روی اون API ای که میخواهیم اونو صدا بزنیم یک BP بگذاریم
دیگه فرقی نداره که چه شکلی فراخوانیش کنی با هر روشی که اونو صدا بزنی Debugger روی BP 
نگه میداره و براحتی میشه هر تکنیکی رو دور زد.
ولی نامید نشید یک راه خوب معرفی میکنم که با هیچ دیباگری نشه جلوی اونو گرفت!!!!!
اونم نوشته یک Driver هستش که با استفاده از اون بتونیم توی یک Process مقادیری رو نوشت مثل کاری
که WriteProcessMemory انجام میده.
دوستانی که میتونن این کار رو انجام بدن دستاشون بالا. :لبخند گشاده!:

----------


## ali ahwaz top

تمامی پروتکتورهای پرقدرت دنیا برای انجام کارهایی که باید دور از دسترس کرکرها انجام بشه
از این تکنیکها یعنی استفاده از فایلهای Driver استفاده میکنن.
بطور مثال SVKP از درایور SVKP.SYS استفاده میکنه و Themida از Oreans32 استفاده میکنه.

----------


## Securebit

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

----------


## B-Vedadian

> در مورد فراخوانی یک API باید بگم اگه روی اون API ای که میخواهیم اونو صدا بزنیم یک BP بگذاریم
> دیگه فرقی نداره که چه شکلی فراخوانیش کنی با هر روشی که اونو صدا بزنی Debugger روی BP 
> نگه میداره و براحتی میشه هر تکنیکی رو دور زد.


این کار این قدر هم راحت نیست. بجز BP دسترسی به حافظه، همه باقی انواع BP رو میشه یا شناسایی کرد و یا به اشتباه انداخت. BP دسترسی رو هم هر چند نمیشه از کار انداخت ولی میشه استفاده کنندش رو اذیت کرد، با دسترسی زیاد، به نحوی که کم حوصله ها رو دودر کنه.

در ضمن استفاده از درایور هر چند خوبه ولی معایب خودش رو داره، به عنوان مثال ساده عدم تطابق ساختار apiی مستند نشده در ورژن های مختلف ویندوز هستش.

در نهایت هم که همه برنامه ها کرک میشن، مهم اینه که زمان لازم برای این کار به نسبت ارزش نرم افزار زیاد بشه و دیگه نصرفه که نرم افزار رو کرک کنند!

----------


## دنیای دلفی

آقاي برديا شما فايل خود را به اينترنت اكسپلورر تزريق مي كنيد . بسياري از ويروسيابها مانند نسخه اينترپرايس مك آفي اجازه اين كار را نمي دهند . و نتيجه اين كار اين مي شود كه فايل شما اجرا نمي شود .

----------


## ali ahwaz top

سلام به همه اساتید گرامی:
من یه کد آنتی BP نوشتم که پایین میزارمش که دوستان استفاده کنن.
این کد MessageBoxA رو چک میکنه اگه BP روی اون بود به شما پیغام BP پیدا شد رو میده.
شما میتونید از این تکنیک برای فراخوانی API استفاده کنید و ببینید که کرکر روی API مورد نظر شما
BP گذاشته یا نه اگه گذاشته بود که دیگه میدونید باید چیکار کنید.

----------


## ali ahwaz top

> این فایل همون کاری رو می کنه که پروتکتور شما انجام میده ولی با تکنیکهای پیشرفته تر اگه بتونی خوب آنالیزش کنی تکنیکهای خوبی دستت میاد موفق باشید


 
اینکه مثل آب خوردن آنپک میشه.

----------


## Nima NT

بی خیال MadcodeHook شو ؟؟؟!!!

----------


## Securebit

> اینکه مثل آب خوردن آنپک میشه.


من نگفتم آنپک نمیشه فقط گفتم از روش جالبی برای پروتکت استفاده کرده

----------


## Securebit

اینم آموزش آنپک کردن JOKER PROTECTOR  :چشمک:

----------


## joker

> اینم آموزش آنپک کردن JOKER PROTECTOR


همون تشکرهای بالائی ضربدر شونصدتا  :بوس: 

برنامه که اجرا میشه ، صفحه کامل برای من سفید هست ، فلش که نصبه 
  چیز خاصی باید نصب داشته باشم ؟

----------


## Securebit

Adobe Flash Player رو باید نصب کنی

----------


## nima_subzero

UnPacker Updated A Little :



```
	< 1.0.1 >
	- Fixes some headers !
1 - SubSystem 2 - SizeOfImage 3 - Base Of Code/Data
```

ديگه حالم از درس داشت بهم مي‌خورد ! گفتم ببينم اينجا چه خبره  :خجالت:  انشاءالله فردا آزاد مي‌شوم !  :لبخند:

----------


## Developer Programmer

جوکر جان، بعید میدونم این مقاله رو ندیده باشی. ولی بازهم واست می ذارم ... باشد که رستگار شوی

----------


## ali ahwaz top

سلام:
اون Anti-BPX که دیروز گذاشتم یه کمی اشکال داشت.
اولا" *GetProcAddress رو میشه BP بزاریم ولی با این برنامه بدون استفاده از* 
*GetProcAddress میشه آدرس یک API رو پیدا کنید و چک کنید که BP روش هست یا نه.
دوما" این سورس راه پیدا کردن BP روی یک فانکشن داخلی از برنامه خودمان رو هم نشون
میده.

*

----------


## ali ahwaz top

حالا یک مورد که خیلی مهمه این که اگه BP هم داشت چطوری میشه اونو بدون اینکه 
Debugger برنامه رو روی BP نگه داره اجرا کرد.
راه حلش توی این سورسه.

----------


## P0uy4 53z4r

> حالا یک مورد که خیلی مهمه این که اگه BP هم داشت چطوری میشه اونو بدون اینکه 
> Debugger برنامه رو روی BP نگه داره اجرا کرد.
> راه حلش توی این سورسه.


لازم نيست که حتماً روی  MOV EDI,EDI بگذاری !!!

روی RETN برک پينت بگذار 
پس روش شما جواب نخواهد داد !

----------


## ali ahwaz top

> لازم نيست که حتماً روی MOV EDI,EDI بگذاری !!!
> 
> روی RETN برک پينت بگذار 
> پس روش شما جواب نخواهد داد !


 
شما که اینقدر استادید بفرمایید چه راه حلی دارید . در ضمن اگه دارید اونو سورس باز
بذارید روی همین تاپیک. :لبخند گشاده!:

----------


## ali ahwaz top

کد CC همون 204 دسیمال هستش که به معنای int3 است.
من سعی میکنم یه کد برای خنثی کردن اون همین جا بذارم.
به امید پیروزی همه شما یا حق تا فردا.

----------


## joker

> Adobe Flash Player رو باید نصب کنی


نصبه !!!
ولی همچنان هیچی به هیچی :)
ورژن خاصی ازش باید نصب باشه ؟
فایل swf اگه ازش داری اتچ کن ،

----------


## Securebit

> نصبه !!!
> ولی همچنان هیچی به هیچی :)
> ورژن خاصی ازش باید نصب باشه ؟
> فایل swf اگه ازش داری اتچ کن ،


 
وقتی فایل رو اجرا کنید فایل SWF میره تو TEMP

----------


## joker

چقدر دردسر داشت  :لبخند گشاده!: 
زحمت کشیدی  :بوس: 

برم برای آپدیت  :خیلی عصبانی:

----------

