ReverseEngineering – Telegram
ReverseEngineering
1.24K subscribers
40 photos
10 videos
55 files
666 links
Download Telegram
Anti-debugging چیست

تکنیکیه که برای جلوگیری از تحلیل و اجرای debugger ها روی نرم افزار استفاده میشه این تکنیک معمولا توسط توسعه دهندگان Developer ها برنامه برای جلوگیری از دسترسی و تحلیل نرم افزارهای خودشون توسط کرکر ها استفاده میشه برای پیاده سازی anti-debugging توسعه دهندگان از روش های مختلفی استفاده میکنند مثال اضافه کردن کد های تشخیص debugger به برنامه جلوگیری از اجرای برنامه در debugger ها استفاده از کد های مخرب برای متوقف کردن debugger با این کار تحلیل و کرک کردن نرم افزار ها برای کرکر ها مشکل میشه و امنیت برنامه ها بیشتر میشه
#antidebugging
#انتی_دیباگینگ
#technique
🔥6
Obfuscation چیست

یک فرایند یا روش برنامه نویسیه که با هدف های محافظت از کد منبع source code یک برنامه کاهش اندازه فایل ها و محافظت از اطلاعات حساس استفاده میشه این روش یعنی تغییر ساختار و قالب کد منبع است جوری که افراد دیگه وقتی اونو میخونن به سختی یا غیر ممکن باشه تا نتونن کد رو بخونن یا تحلیلش کنن این کار با استفاده از تکنیک های مثل فشرده سازی، رمزنگاری،تغییر نام متغیرها و تابع ها و اضافه کردن کد های مجازی بدون معنی انجام بشه
#obfuscation
#مبهم_سازی
🔥5
دستورالعمل های منطقی در زبان اسمبلی

مجموعه دستورالعمل پردازشگر، دستورالعمل AND، OR، XOR، TEST و NOT
منطقی Boolean رو ارائه میدن که بیت ها را مطابق نیاز برنامه تســت، تنظیم
میکنه قالب این دستورالعمل ها به شکل زیره

#command
#not
#and
#or
#xor
#test
#assembly
🔥3
دستورالعمل AND

برای پشتیبانی از عبارات منطقی با انجام عملکرد بیتی و AND
اســتفاده میشه اگر بیت های که با هم مچ یعنی بیت هایی که با هم مطابق دارن از هر دو عملوند 1 باشن‌عملکرد AND
بیتی 1 رو برمی گردونه در غیر این صورت مقدار 0 برمی گرده مثال:

Operand1: 0101

Operand2: 0011

After AND -> Operand1: 0001

نکته:از روش AND میتونیم برای صفر کردن یک یا چند بیت اســتفاده کنیم
#and
#command
#operand
👍2
دستورالعمل OR

برای پشتیبانی از عبارت های منطقی، با انجام عمل بیتی OR استفاده میشه اگر بیت های مچینگ از هر یک یا هر دو عملوند یکی
باشه عملگر OR بیتی 1 رو برمیگردونه اگر هر دو بیت صفر باشن 0 برمی گرده مثال:

Operand1: 0101

Operand2: 0011

After OR -> Operand1: 0111

نکته:از OR میتونیم برای تنظیم یک یا چند بیت استفاده کنیم
#or
#command
#operand
👍5
دستورالعمل XOR

عملیات XOR بیتی را اجرا میکند عملیات XOR مقدار بیت حاصل رو به یک تنظیم میکنه و فقط اگر بیت های مربوط به عملوند Operand متفاوت باشن اگر بیت های مربوط به عملوند ها یکسان باشن هر دو صفر میشن یا هر دو یک بیت حاصل 0 میشه مثال:

Operand1: 0101

Operand2: 0011

After XOR -> Operand1 0110

نکته: XOR کردن یک عملوند به خودی خود عملوند را به 0 تغییر میده این برای پاک
کردن یک رجیستر استفاده میشه

XOR EAX,EAX


#xor
#command
#operand
👍5
دستورالعمل TEST

مثل عملیات AND کار میکنه، اما بر عکس دستور AND اولین عملکرد رو تغییر نمیده اگر بخایم بررسی کنیم ی عدد تو ریجستری زوج‌ یا فرده میتونیم این کار رو با استفاده از دستور TEST بدون تغییر عدد اصلی انجام بدیم مثال:

TEST AL,01H

JZ EVEN_NUMBER عدد زوج


#test
#command
#operand
👍6
دستورالعمل NOT

عملیات NOT بیتی رو انجام میده عملیات NOT بیت ها رو در یک عملوند معکوس میکنه این عملوند میتونه داخل یک ریجستر یا حافظه باشه مثال:

Operand1: 0101 0011

After NOT -> Operand1: 1010 1100


#not
#operand
#command
👍5
ساختار شرطی در زبان اسمبلی

اجرای شرط ها به زبان اسمبلی توسط چندین دستورالعمل حلقه و branching
پرش انجام میشه این دستورالعمل ها میتونن جریان کنترل رو داخل یک برنامه
تغییر بدن اجرای شرط ها در دو سناریو مشاهده میشن مثال:

روش غير شرطی Jump unconditional

توسط دســتورالعمل JMP انجام میشه اجرای شرط ها اغلب شامل انتقال
كنترل به آدرس دستورالعملیه كه از دستورالعمل اجرای الان پیروی
نمی کنه انتقال کنترل ممکنه رو به جلو باشه برای اجرای مجموعه
جدیدی از دستورالعمل یا قبلی اجرای دوباره همون مراحل

پرش شرطی jump Conditional

بســته به شــرایط توســط مجموعــه ای از دســتورالعمل هــای پرش j condition انجام میشه دستورالعمل های شرطی کنترل رو با
شکستن جریان پی در پی انتقال میدن و اونا رو با تغییر مقدار افست در IP انجام میدن
#assembly
#اسمبلی
#jump_conditional
#jump_unconditional
#loop
#حلقه
👍7
دستورالعمل CMP

دو عملوند رو مقایســه میکنه معمولا در اجرای شرطی مورد اســتفاده قرار میگیره این دستورالعمل اساسا برای مقایسه این که آیا عملوند برابره یا نه یک عملوند رو از عملوند دیگه کم میکنه که باعث اختلال در عملوند های منبع یا مقصد نمیشه از اون به همراه دستورالعمل پرش شرطی برای تصمیم گیری استفاده میشه مثال CMP:

CMP operand1,operand2

Operand1 = 10

Operand2 = 20

CMP 10,5



خب حالا CMP چکار‌ میکنه دو فیلد داده عددی رو مقایسه میکنه عملوند مقصد میتونه در ثبات یا در حافظه باشه عملوند منبع میتونه یک داده ثابت فوری ثبات یا حافظه باشه بیش تر برای مقایسه این که یک مقدار شمارنده به تعداد دفعاتی که یک حلقه برای اجرا نیاز داره رسیده استفاده میشه
#cmp
#command
#operand
👍15🔥1
دوستان ری اکشن بزنید که قوی تر بریم جلو و اگه میتونید لطفا کانال رو Share کنید
👍15
پرش غير شرطی Jump Unconditional

همان طور که قبلا گفتیم این کار با دستور JMP انجام میشه اجرای شرط ها
اغلب شــامل انتقال كنترل به آدرس دستورالعملی اســت كه از دستورالعمل اجرای
كنونی پیروی نمی کنه انتقال کنترل ممکنه رو به جلو باشــه برای اجرای مجموعه جدیدی از دستورالعمل یا قبلی اجرایی دوباره همان مراحل دســتورالعمل JMP اسم لیبلی رو در اختیار شما قرار میده که سریعا جریان کنترل
انتقال داده بشه سینتکس دستورالعمل JMP به شکل زیر است:

JMP label

#jmp
#unconditional
#پرش
#غیرشرطی
👍5
پرش شرطی Jump Conditional

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

#شرطی
#conditional
#jmp
👍4
❤‍🔥6👍2
در عکس زیر دســتورالعمل های پرش شرطی مورد اســتفاده در داده های بدون علامت
استفاده شدن برای عملیات منطقی کاربرد دارن
❤‍🔥6👍2
❤‍🔥6👍2
حلقه ها در زبان اسمبلی

دستورالعمل JMP میتونه برای پیاده سازی حلقه ها استفاده شه به عنوان مثال قطعه کد زیر میتونه 10 بار <LOOP-BODY> رو اجرا کنه

MOV CL,10
L1:
<LOOP-BODY>
DEC CL
JNZ L1
دستور اصلی LOOP


LOOP lable

#loop
#حلقه
#jmp
👍4
اعداد در زبان اسمبلی

داده های عددی به طور کلی در سیستم دودویی نمایش داده میشن دستورالعمل
های حسابی روی داده های باینری عمل میکنن وقتی اعداد روی صفحه نمایش
داده میشن یا از صفحه کلید وارد میشن به شکل ASCII هستن
👍3