آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

کدهایی برای ساخت رشته در زمان اجرا !

مجتبی یگانه  10 سال پیش  10 سال پیش
+15 0

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

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

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

+2 0
بحث جالبیه ، اگر یک کلید رندوم سمت کلاینت ایجاد بشه ، سرور چطور میتونه صحتش رو تایید کنه؟ و اجازه دسترسی بده؟ (10 سال پیش)
+1 0
اصلا مشکل اصلی همینه ! ، یعنی کلید نباید رندوم باشه ، یعنی شما میگید کلید hello world هست ، حالا باید این رشته در زمان اجرا جوری ساخته بشه ، که بعد دیکامپایل نشه فهمید رشته چی هست ! ، به نظر من الگوریتم ساخت کلید هر چقدر هم سخت باشه ، بازم میشه کلید رو پیدا کرد ! ، اما خوب شاید من الگوریتم خوبی ننوشتم یا الگوریتم ها خیلی مبتدی بوده ، اما الگوریتم های تو اینترنت هم همینجوری هستن ! (10 سال پیش)
+1 0
من که این کارو غیر ممکن میبینم.هرکاریم کنی سخت ترین فورمولاشم بدن با یکم دقت و فوقش یکی دوروز وقت به جواب میشه رسید.مجتبی جان فقط تو اینترنت نیست کلا قضیه همون جوریه که گفتی. (10 سال پیش)
+2 0
شما میتونید کلید رندوم بسازید که سرور هم بتونه شناسایی کنه بهتره برنامه گوگل که بر روی موبایل نصب میشه و برای باز کردن جیمیل استفاده میکنم رو ببنید فک کنم متوجه بشید اسمش رو الان یادم نیست مربوط به لایه دوم امنیت ورود به اکانت گوگل هست (10 سال پیش)
+1 0
محمد حسین جان از دیروز دقیقا تو فکر همین موضوع هستم ، گفتم یه رشته مثلا بر اساس اندروید ایدی بسازم ، بعد بدم به سرور ، تو سرور بگم اگه کلید ساخته شده با استفاده از پترن | الگو که در واقع رشته ی ما هست ، بود ، کار رو انجام بده ! (10 سال پیش)
+1 0
الان فرض بر اینه که سورس برنامه لو رفته یا سورس برنامه برای هکر نامشخصه؟ (10 سال پیش)
+1 0
اگه سورس برنامه مشخص نباشه راههای خوبی هست! (10 سال پیش)
+1 0
آ الان به سوال دقت کردم دیدم برنامه دیکمپایل شده! شرمنده :| (10 سال پیش)
+1 0
متاسفانه نمیشه از کارها و فعالیت های ریاضی استفاده کرد ! ، چون هرچی که باشن ، حتی بعد دیکامپایل قابل اجرا هستن ! ، مشکل اینه جاوا کلاس های خودش یعنی math. * رو مبهم نمیکنه ! ، پس دقیقا معلوم هست که چه رفتاری با خروجی انجام شده ، پس فکر میکنم همه قبول کرده باشیم که ساخت کلید در برنامه کار منطقی ای نیست ! ، همون الگوریتم تبادل کلید که قبلا توضیح دادم ماثر تر هست (10 سال پیش)
+1 0
لینک اون قبلا که توضیح دادی رو میدی؟ (10 سال پیش)
+2 0
لینک (10 سال پیش)
+2 0
اون روش دومی که هم توضیح دادی همین ماجراست دیگه. بالاخره معلومه داری چه کاری روی response اول سرور انجام میدی و هکر کافیه همیشه اول یه رشته بفرسته به سرور و اون متد رو جواب سرور پیاده کنه و دوباره با اطلاعات بفرسته به سرور. نهایت توضیحات استاد هم به همینجا رسید که باید توی برنامه بشه با عملیات های ریاضی اون کلید decode کردن رو ساخت و درنهایت به این نتیجه رسیدیم که باید با پیچوندن عملیات های ریاضی و حلقه ها و متدهای تو در تو این کلید رو تولید کنیم. به هرحال وقتی سورس برنامه لو بره و یه نفر مصمم بشینه که اون کدو بدست بیاره ، بالاخره این کارو میکنه چون سورس برنامه یعنی هر کاری که داریم میکنیم، و فقط با پیچیده کردن کدها میتونیم دست هکر رو کوتاه کنیم (10 سال پیش)
+2 0
درسته صادق ، اما مشکل از ما نیست ! ، مشکل اینه که جاوا سطح پایین نمیره ! ، اگه سورس کد ما به ماشین نزدیک تر میشد ، خیلی بهتر بود ، بهتر که چه عرض کنم ، مشکل حل بود ، به هر حال ، وقت گذاشتن بیش از حد رو این موضوع ، اتلاف وقت هست ، چون حتی اگه به پایین ترین سطح هم برسه ، بازم نمیشه گفت 100% امن هست ! (10 سال پیش)
+2 0
خوب ظاهرا چیزی که من فهمیدم اینه که کلا رمز نگاری و علوم مربوط به اون زیر سوال رفت. البته به نظر من با همون توابع جمع و تفریق هم می شه کارهای جالبی کرد که به این راحتی ها قابل کشف نباشه و البته هیچ کدی نیست که قابل شکسته شدن نباشه ولی باید دید ارزشش و وقتش را داریم یا نه. خوب من یه پیشنهاد می دم اگه خیلی پرته باید ببخشید چون بنده یه برنامه نویس مبتدی هستم (البته دیدیم نون گندم دست مردم). شما زمان حاضر را از گوشی و یا سرور خودتون و یا هر جای دلخواهی بخونید (حتی به صورت رمز) اونوقت یه رشته با استفاده از اون بسازید و به عبارتی الگوریتم تولید رمز را با زمان درگیر کنید. بعد با ارسال این مورد به سرور سرور خودش با ساعت چک می کنه و در صورت درست بودن عکس العمل نشون می دهد. البته باید تلورانس زمان و ... را در اون لحاظ کرد. (10 سال پیش)
+1 0
دقیقا به همین روش رسیدیم ! ، با توجه به اینکه زمان هم جزء هدر های صفحه های وب هست ، پس خیلی بهتر هست ، اما بازم مشکل همون بحث کد کردن اش هست ، شما کد نمونه ندارید ؟! (10 سال پیش)
+1 0
نه متاسفانه نمونه کدی ندارم. اما فکر نمی کنم کار چندان مشکلی باشه می تونیم روش بحث کنیم و به نتیجه برسونیمش. البته از باب بی اطلاعی و روشن شدن بیشتر مساله چند تا سوال می پرسم. ما به هر حال می خواهیم سیستم کلید را دینامیک کنیم تا کل ارتباط با سرور بر مبنای یک کلید ثابت نباشه و اون کلید کشف نشه. حالا نیاز به یک الگوریتم داریم که کلیدی را به صورت رندوم در برنامه تولید کند که برای سرور هم قابل دی کد کردن باشد. به گفته شما الگوریتم های معمول ساختن چنین کلیدی اصلا کارایی نداشته و به راحتی قابل کشف هستند. البته تاکید روی اون کلمه "راحت" هست وگرنه این همه ارتباط توی دنیا بر مینای چی انجام می شه؟ به جز بانک ها که از دستگاه توکن استفاده می کنن بقیه ارتباط را بر مبنای همین الگوریتم ها استوار کردن. راستش هنوز برای من اون کلمه "راحت" قابل هضم نیست. (آیا معده من مشکل داره؟) (10 سال پیش)
+1 0
پیشنهاد میکنم رو کلایت وقت الکی نذاری بهتره بری روی سرور کار کنی و سوراخ هاشو بگیری (10 سال پیش)
+1 0
چرا اینجا به نتیجه نرسیده کار را بستید؟ برای اینکه بحث دوباره راه بیفته یه سوال می پرسم. اگه ما یک رشته داشته باشیم که همه هم می بیننش. بعد اون رشته را با این هم الگوریتم های استاتیک و دینامیک موجود در علم رمز گذاری کد کنیم. چطور یک نفر می تونه بیاد و کد خروجی را بفهمه؟ شفاف تر بگم. ما یک رشته داریم که n کاراکتر داره. بعد میاییم و اون را تبدیل می کنیم با روشی که کسی نمی بینه به یک رشته n کاراکتری دیگه که خوب تو برنامه تولید شده و کسی نمی بینتش. حالا چطوری یکی می خواهد یه چیزی را که نمی بینه و فقط می دونه به یک چیزی مربوط می شه را بسارزه؟ البته منکر علم رمزیابی نمی شوم ولی رمز یابی هم به این راحتی نیست که هر کی از راه رسید رمز ما را پیدا کنه. (10 سال پیش)
+1 0
حامد جان دقیقا ماجرا همینه که چطور یه الگوریتم رمز کردن بسازیم که کسی سر از کارش در نیاره؟! (10 سال پیش)
+1 0
ساده ترین حالت را فرض کنید صادق جان. یعنی این (مثلا) که کد اسکی تک تک کاراکترها را بگیریم و بعد با یک عدد ثابت (چون ساده ترین حالت را گفتم نمی گم با یک دنباله) جمع کنیم و بعد در خروجی دوباره کاراکترهای جدید را با به همان ترتیب بچینیم(نمی گم بر اساس یک الگوریتم ترکیب کنیم تا باز هم ساده باشه). حالا همین الگوریتم ساده را در خروجی آیا به این راحتی ها می شه پیدا کرد؟ (10 سال پیش)
+1 0
حامد جان به این راحتی ها که ن ولی آدمایی هستن که از صبح تا شب میشینن انقد داده ها رو دیکد میکنن که ذهنشون بازه تا یه الگوریتم کد شدرو بهشون بدی نمیگم همون لحظه ولی خودشون چند تا ورودی میدنو بعد با کنار هم گذاشتن شکل کد شده اون ها اونو دیکد میکنن میتونم به صراحت بگم این کارشونم خیلی طول بکشه (برای کدهای متوسط)کمتر از سه چهار روزه.(خیلی طول بکشه:)) (10 سال پیش)
+4 0
حامد جان بله میشه پیدا کرد، با دیکامپایل کردن پروژه. (10 سال پیش)
+3 0
به نظر من بهتره از یک الگوریتم برای تولید یک رشته رمزنگاری شده که مثلا نام پکیج برنامه در اون قرار داده شده باشه استفاده کنید و این کد رو به سرور بفرستید در سمت سرور با دیکد کردن در صورتیکه از برنامه شما درخواست ارسال شده بود کارهایی که باید رو انجام بدید همین (10 سال پیش)
+1 0
hamidd جان اگه کد abfuscate شده باشه باز هم می شه؟ ATRAS جان اگه بتونه ورودی بدهید و بعد خروجی بگیرد حرف شما درسته البته باز هم می گم به این راحتی نیست. (و این لزوم مخفی کردن ورودی را محسوس تر می کنه) آقا طاهر ایده شما هم خوبه. یعنی به این ترتیب دیگه ما رشته ثابتی را در برنامه قرار نداده ایم. همینطور که می توانیم این رشته را تکه تکه کنیم و در فایل ها و کلاس های مختلفی در برنامه ذخیره کنیم. (10 سال پیش)
+5 0
بله حامد جان.وقتی کد abfuscate شده باشه، فقط پیچیده میشه کد(مثلا نام بعضی متغیر ها عوض میشه و یه سری جاهاش پیچیده میشه).حتی در بعضی موارد میشه راحت کد abfuscate شده رو کپی کرد و همون طوری که هست بدون هیچ تغییری ازش استفاده کرد.چرا انواع نرم افزارها به راحتی کرک میشن؟ به خاطر همین که دیکامپایل شون میشه کرد و البته با نرم افزارهایی که مخصوص debug کردن هستن ولی Cracker ها میان باهاشون برنامه هم کرک می کنن .حتی برنامه های ویندوز که به زبان ماشین تبدیل میشن رو میتونن کرک کنن، چه برسه به برنامه هایی که به زبان جاوا نوشته میشن ( چون برنامه های جاوا به زبان میانی تبدیل میشه راحت کدهاش قابل خوندنه.کلا برنامه هایی با یک زبان میانی نوشته میشن و برای اجرا نیاز به نصب runtime environment مخصوص خودشون دارن کدهاشون راحت تر قابل خوندنه و راحت تر میشه مهندسی معکوس روشون انجام داد. مثل برنامه های به زبان جاوا و برنامه های به زبان c# , vb.net ). یادش بخیر یه مدت عشق مون شده بود کرک کردن. (10 سال پیش)
+2 0
یک اشتباه کلامی توی کامنت قبلی بود: به جای "کلا برنامه هایی با یک زبان میانی نوشته میشن" باید می نوشتم "کلا برنامه هایی که بعد از کامپایل به زبان میانی(خاص خودشون) تبدیل میشن" (10 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
مجتبی یگانه  10 سال پیش
+10 0

دوستان مشکل دقیقا همینه ! ، حمید توضیحات خوبی داد ، من خودم خیلی ریاضی باز نیستم D: ، اما بالاخره 4 تا تابع و شرط و فرمول بلدیم ! ، شروع کردم به نوشتن ، اتفاقا با همون کد اسکی شروع کردم ، یه آرایه ساختم ، حروف الفبا کوچیک بزرگ و اعداد رو داشت و یک آرایه ی الگو بهش دادم گفتم شروع کن به ساختن و طبق یه سری دستور ریاضی هر جای که اسکی این شرایط رو داشت این کار رو کن و در غیر این صورت این کار و... ، چند جا پردازش متن هم دخیل کردم ، خلاصه طوری شد که خودم باید چند لحظه فکر میکردم تا می فهمیدم که این قسمت چیکار میکنه ! ، خوشحال ، خوشحال و خوشحال داشتم کار رو ادمه میدادم و دلم خوش بود که عجب کلیدی ساختم ! ، یک کلید تبادل 32 کارکتری امن ! ، که حتی برای برنامه های بعدیم نیازی نیست دوباره کد بزنم ، کافیه پترن | الگو رو عوض کنم ! ، بعد تو این فکر بودم که اصلا اگه جواب داد ، میتونم الگو رو داینامیک کنم ، مثلا اندروید ایدی ! ، اندروید آیدی بره به سرور و اونجا هم بشه کلید رو بدست آورد و در واقع کلید برای هر کاربر فرق داره ! ، بازم خوشحال و شاداب شروع کردم ادامه دادن کار ، obfuscate کردم ، دیدم ای دل غافل ! ، متد buildPublicKeyRunTime ام کاملا واضح هست ! ، فقط ساختار دستورات عوض شده (سینتکس قدیمی جاوا) کد رو کپی کردم تو محیط ایکلیپس ، دیدم یه ورودی بولین اضافه داره به نام isFlag پاک اش کردم ، اجرا کردم ، دیدم کلید ام رو خروجی داد ! ، البته این روش هم امنیت داره !!!!!!!!!!!

درسته امنه !!!

برای امن تر کردنش ، تصمیم گرفتن ، معیار های داینامیک بیشتری رو در گیر کنم ، مثلا TIME | زمان D:

md5 پسورد کاربر و ANDROID ID 

با این حساب ، کسی که بخواد کلید تبادل رو بدست بیاره  باید

  1. گذرواژه ی کاربر مورد نظر و MD5 گذرواژه را داشته باشد
  2. زمان در خواست را داشته باشد
  3. Android ID را داشته باشد
  4. الگوریتم را هم دیکد کرده باشد :)))

پــــــــــــــــــــــــــــــــس

کسی که MD5 رو داشته باشه ، 2 حالت داره ، یا اکانت خودشه ، یا به سرور نفوذ کرده ! اگه به سرور نفوذ کرده که دمش گرم ، خدا پشت و پناهش ، اما اگه اکانت خودش باشه ، که دیگه اکانت خودشه دیگه ، هر کاری میخواد بکنه :)))

امـــــــــــــــــــــــــــــــــــا

در بحث اطلاعات مالی مثل پروژه ی فعلی من که کاربر میتونه همه ی اطلاعات خودش رو ویرایش کنه به جز اطلاعات مالی !

فرض کنید من نفوذگر ! ، کلید رو با اون چیزایی که بالا گفتم به دست آوردم ( ایول دارم D: ) چون برنامه با اطلاعات مالی زیاد سر و کار داره ، میگم چرا هر دفعه کلی پول بدم ؟! ، میرم تو سرورش اکانت ام رو شارژ میکنم

بازم میرسم سمت کد obfuscate شده میبینم یه تابع chargeUserAccount دارم که با یه سری پارامتر و یه الگوریتم درخواست رو کد میکنه و در قالب یک sercureString به سرور پست میکنه

برای این مورد هم راه حلی که اندیشیدم (!) ، اینه که موقع شارژ حساب توکن پرداخت رو از برنامه بگیرم ، چک کنم ببینم آیا بازار تائید میکنه که بر اساس این توکن 50000 هزار تومان پرداخت شده ؟!

بعد دیدم بازار Verify نداره ، یعنی نمیشه از سرور درخواست داد به بازار که آیا این پرداخت موفق بوده یا نه ، ایمیل زدم به بازار ، گفتم شما این سرویس رو ارائه نمیدید و واقعا لازم هست ، اون خانومه که معمولا جواب میده ، ایمیل من رو فورواد کرده بود به علی و گفته بود "این چی میگه ؟! ، منظورش چیه ، واقعا ممکنه کسی درخواست جعلی به سرور بفرسته ؟!" ، علی هم در جواب به ایمیل من ، تمام این ها رو فوروارد کرده بود به من و گفت "در حال برنامه نویسی این سرویس هستیم و بزودی ارائه خواهد شد" ، حالا کاری نداریم که آیا واقعا درحال برنامه نویسی بودن یا من گفتم یادشون افتاده ! ، ولی بالاخره قراره اوکی بشه

خلاصه تو سرور میگیم بازار جان این پرداخت رو تائید میکنی ؟! ، اگه بگه آره مبلغ اش رو به حساب کاربر اضافه می کنیم !

بحث امنیت قطعا از این چیزا پیچیده تر هست ، میدونم خیلی نوشتم ، شاید طولانی ترین پاسخ ام باشه ! ، ولی ارزش اش رو داشت D:

امیداورم به درد یه نفر بخوره و یه دعایی هم واسه ما بکنه :)

+1 0
من فعلا گیج شدم. البته پاسخ را فهمیدم ولی باید اول برم یه خورده با خودم خلوت کنم تا اول ببینم چطوری ممکنه بازار تا حالا یه همچین چیزی را یادش رفته باشه. و بعد ببینم ما خیلی جدی گرفتیم داستان را یا واقعا جدیه. ولی در کل خوب و عالی. ممنون (10 سال پیش)
+1 0
البته بازار واسه دستگاه اندروید Verify داره ! ، اما برای سرور ندارن ، اگر خواستید بگید ایمیل هاشون رو واستون فوروارد کنم (10 سال پیش)
+3 0
اونجا که گفتی "خدا پشت و پناهش" عالی بود کلی خندیدم D: (10 سال پیش)
+1 0
اما یه ماجرایی! پسورد کاربرو از کجا میاری؟ جایی تو دیتابیس یا sharedPreference ذخیره اش میکنی یا هربار کاربر باید login کنه و همون لحظه میذاریش تو یه متغییر؟ درضمن اون زمان درخواست رو نفهمیدم! زمان گوشیه؟ سمت سرور چطور چکش میکنی؟ (10 سال پیش)
+2 0
D: ، در مورد پسورد ، نه نیازی به ورود در هر بار نیست ، یک بار ورود به مدت یک هفته اعتبار داره (فعلا شاید بیشتر کمتر بشه) ، پسورد هم md5 میشه ، این الگوریتم غیر قابل بازگشت هست ، حتی اگه کسی اون مقدار رو بدست بیاره احتمال پیدا کردن پسورد اصلی یک اپسیلومه D: ، خوب پس پسورد تو sharedPreference ذخیره میشه ، زمان هم که : هر درخواستی که به وبسرویس ارسال میشه ، به طور مخفی زمان رو در خودش داره ! ، چرا مخفی ؟! ، چون در header های صفحات زمان هست و میشه ازش استفاده کرد (10 سال پیش)
+1 0
این برنامه بر خلاف بقیه ی برنامه هایی که نوشتم ، احتمالا توسط صاحب پروژه تو مارکت ها منتشر بشه :) ، آماده ی تست نفوذ باشید :)) (10 سال پیش)
+1 0
پس یه سوال دیگه! اگه قراره هربار این پسورد رو (همون هش شده اش) رو به سرور بفرستیم پس دیگه خیلی الگوریتم سازی و اینا نیاز نیست! چون هکر هم که بخواد هک کنه چون پسورد طرف رو نداره هرچی هم که الگوریتم ها رو بشکنه کارش بی فایده است. پس میشه گفت اونهمه عملیات ریاضی کشک؟!!! درست؟ (10 سال پیش)
+2 0
خوب اینا بقیه اش میشه امن تر کردن ! ، اما در کل درست میگی :) (10 سال پیش)
+2 0
مثلا ! ، کی فکر میکنه وقتی تو 2 تا پارمتر میفرستی پارمتر سومی هم در حال استفاده هست ؟! ، پس یکم درگیری ذهنی رو بیشتر میکنه :) (10 سال پیش)
+1 0
سلام. مبحث بسیار جالبی شده. یه سوال. شما هر بلایی سر این مقادیر ارسالی بگیرید و هکر تو مسیر بین راهی اون رو برداره آیا نیازی به این هست که بفهمه این چیزی که دارید میفرستید چیه؟ فکر کنم اصلا هم برای مهم نباشه چیزی که شما تولید میکنید رو میفرسته بدون اینکه ازش سردربیاره (10 سال پیش)
+1 0
می خوای اسم برنامه رو بزار Crack me ، ملت بیان تست نفوذ روش روش انجام بدن :) یک اپسیلوم D: (10 سال پیش)
+2 0
@tux-word در این روش لازمه ! ، چون من تمام مقدار ها رو کد می کنم و در قالب یک رشته ی امن میفرستم و سرور تنها یک ورودی میگیره ، بعد از دیکد ، میشه یک آرایه ی جسیون :) ، پس اگر یکی از این مقدار ها نباشه php دستور die رو اجرا میکنه - @حمید D: (10 سال پیش)
0 0
@A.L.U سوال من هم همینه اگه اون رشته رو داشته باشه و خودش بفرسته چی میشه؟ در واقع چیزی رو که ما تو سمت سرور انتظار داریم برامون میاد درسته؟ مگر اینکه نمیدونم البته یه مدت زمان رو هم باهاش بفرستیم یا یه همچین چیزایی . در واقع رشته ای که سمت سرور هست و انتظار داره رو ما سمت کلاینت داریم پاس میدیم حال بین راه اون هکر برمیداره و خودش میفرسته و خروجی و هم میتونه داشته باشه (10 سال پیش)
+1 0
اگه رشته معتبر باشه خروجی رو از سرور میگیره :) (10 سال پیش)
0 0
@A.L.U من متوجه نشدم منظورتون چیه. رشته سمت کلاینت معتبر باشه ؟ یه توضیحی میدین؟ (10 سال پیش)
0 0
مجتبی منظورت از " بعد از دیکد ، میشه یک آرایه ی جسیون" اینه که تک تک مقادیر جیسونت رو کد میکنی یا یه کلید با جیسونت میفرستی؟! (10 سال پیش)
+1 0
@tux-world ، رشته ی معتبر رشته ای هست که سرور بهش خروجی بده :) (10 سال پیش)
+3 0
@صادق - سرور یه ورودی میگیره ، مثلا به نام A - حالا میگیم ، اگه A ست نشده بود ، کاری نکن ، اگه ست شده ، دیکد اش کن - حالا اگه خروجی یک رشته ی جیسون هست ، و شامل کلید های a B C هست ، ادامه بده و پاس اش بده به فلان متد ، یعنی همه چی در قالب یک جیسون ارسال میشه اما جیسون کد شده :) تک تک مقدار ها کد نمیشن ، کل آرایه ام کد میشه (10 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .