fa
Feedback
ReverseEngineering

ReverseEngineering

رفتن به کانال در Telegram
1 265
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-37 روز
+730 روز
آرشیو پست ها
اینجا قصد توهین به برنامه نویسای عزیز رو نداشتم، ناراحت نشن، ی وقت ی شوخی ریز بود. 😂🩶 I didn't mean to insult dear programmers here, don't be offended, it was just a joke. 😂🤍

بخش پنجم بافر اورفلو off by one off by one زمانی رخ میده که دقیقا یک بایت یا یک واحد کمتر یا بیشتر در نوشتن تحت کنترل باشه این خطاها کوچک به نظر میرسن اما میتونن باعث تغییر یک بایت از saved rbp یا تغییر null terminator رشته بشن و رفتار غیرمنتظره ایجاد کنن تشخیص off by one نیاز به دقت در اندازه ها و دیدن بایت های محلی داره توضیح کد: در این کد نشون میدیم که نوشتن دقیقا یک بایت میتونه نال ترمینیتور رشته رو از بین ببره یا بایت مهمی رو تغییر بده هدف دیدن خروجی متفاوت رشته هست کد آف بای وان offbyone.c
#include <stdio.h> #include <string.h> int main() {     char s[8];     /* suppose we incorrectly copy 9 bytes into 8 byte buffer */     memcpy(s, "ABCDEFGH", 8);     s[7] = 'Z'; /* simulate off by one by modifying last byte */     printf("string maybe not null terminated %s\n", s);     return 0; }
دستورات رو اجرا کنید و ببینید off by one این مثال رو اجرا کنید و خروجی رو نگاه کنید تا مشکل در اخر رشته مشخص بشه
gcc -g offbyone.c -o offbyone ./offbyone
ببینید که رشته ممکنه نال ترمینیت نشده باشه Part 5 Buffer Overflow off by one off by one occurs when exactly one byte or one unit is under control in the write These errors seem small, but they can change a byte from the saved rbp or change the null terminator of the string and cause unexpected behavior Detecting off by one requires accuracy in sizes and seeing local bytes Code explanation: In this code, we show that writing exactly one byte can remove the null terminator of the string or change an important byte The goal is to see different output of the string Off by one code offbyone.c
#include <stdio.h> #include <string.h> int main() { char s[8]; /* suppose we incorrectly copy 9 bytes into 8 byte buffer */ memcpy(s, "ABCDEFGH", 8); s[7] = 'Z'; /* simulate off by one by modifying last byte */ printf("string maybe not null terminated %s\n", s); return 0; }
Run the commands and see off by one Run this example and look at the output to see if the problem is at the end of the string
gcc -g offbyone.c -o offbyone ./offbyone
See if the string might not be null terminated @reverseengine

دیباگینگ با Breakpoint و Step دیباگینگ یعنی اینکه برنامه رو متوقف کنید ببینید دقیقا اون لحظه داره چی کار میکنه یجور دوربین صحنه آهسته روی مغز برنامه‌ ست اگه تا حالا حس کردید کد یه برنامه مثل جادو کار میکنه وقتشه جادوشو بشکنید💀 با یه دیباگر مثل x64dbg یا gdb میتونید وسط اجرای برنامه ترمز برنامه نویس رو بکشید😂 یه breakpoint بذارید روی یه تابع خاص مثلا جایی که ورودی رو بررسی میکنه بعد با دکمه F8 یا Step برید خط‌ به‌ خط جلو ببینید مقدار رجیسترها و متغیرها چطوری تغییر میکنن اگه شرطی داره (cmp/jz و از اینا) مقدار رو قبل و بعدش ببینید تا بفهمی چرا true یا false میشه کم‌کم ذهنتون کد رو از اسمبلی به رفتار واقعی ترجمه میکنه  اونجاست که میفهمید باینری چطور فکر میکنه👾 مثال عملی: برنامه‌ ای باز کنید که عدد از کاربر میگیره و میگه بزرگ‌تر از ۱۰ هست یا نه روی جایی که شرط چک میشه (cmp eax, 0Ah) breakpoint بذارید مقدار eax رو موقع stop ببینید اگه 9 باشه پرش انجام نمیشه اگه 12 باشه میپره به مسیر بله بزرگتره دیتکشن اگر دیدی برنامه مدام سعی میکنه دیباگر رو ببنده یا Thread Information Query میفرسته  یعنی anti-debug داره اگه اجرای معمولی و اجرای با دیباگر خروجی متفاوت بده یعنی داره دنبال حضورتون میگرده👀 میتیگیشن محقق: همیشه توی VM با snapshot کار کنید تا اگه برنامه قاطی کرد راحت برگردید مدافع: رفتارهایی مثل تشخیص دیباگر رو در لاگ‌ های امنیتی دنبال کنید چون معمولا نشونه نرم‌ افزار محافظت‌ شده یا بدافزاره Debugging with Breakpoints and Steps Debugging means stopping the program and seeing exactly what it is doing at that moment. It is like a slow-motion camera on the brain of the program. If you have ever felt that the code of a program works like magic, it is time to break its magic. With a debugger like x64dbg or gdb, you can brake the programmer in the middle of the program. Set a breakpoint on a specific function, for example, where it checks the input. Then use the F8 or Step button to go forward line by line and see how the values ​​of registers and variables change. If there is a condition (cmp/jz and so on), look at the value before and after to understand why it becomes true or false. Your mind will gradually translate the code from assembly to real behavior. That is where you will understand how binary thinks. Practical example: Open a program that takes a number from the user and tells whether it is greater than 10 or not. Set a breakpoint where the condition is checked (cmp eax, 0Ah). Value Check eax at stop. If it is 9, the jump will not be performed. If it is 12, it will jump to the larger path. Detection If you see that the program keeps trying to close the debugger or sends Thread Information Query, it means it has anti-debug. If normal execution and execution with debugger give different output, it means it is looking for your presence. Mitigation Researcher: Always work with snapshots in the VM so that if the program messes up, you can easily return. Defender: Follow behaviors such as debugger detection in security logs because they are usually signs of protected software or malware. @reverseengine

خواندن تابع توی دیس‌ اسمبلر چطور از اسمبلی بفهمید یک تابع دقیقا چیکار میکنه پروتکل ورودی‌ها، شرط‌ها، و خروجی‌ها تا حالا یه تابع رو دیدید توی دیس‌اسمبلر که انگار رمزآلود یا ی جوری حرف میزنه؟ اول دنبال prologue و epilogue باشید اون push/pop و mov های اول و آخر پارامترها معمولا توی رجیسترها یا روی stack میان ببینید کجا با حافظه کار میکنه چه آرگومانی میخونه و چی برمیگردونه اسم‌گذاری ساده بزنید: مثلا check_len یا read_input — بعد pseudocode رو بخون یه خط کامنت بزنید که این تابع طول رشته رو چک میکنه و اگر > 5 بود OK میده مثال: فایل ساده‌ای باز کنید که ورودی میگیره توی Ghidra/IDA تابع main رو باز کنید ببینید push rbp، mov rbp, rsp و چند cmp/jle هست یا نه اگر یه cmp با عدد 5 دیدید حدس بزنید اینجا طول رو مقایسه میکنه اسمش رو بذارید check_length و pseudocode رو بخونید تشخیص (دیتکشن) push/pop ‌های زیاد یا غیر متعارف تو پرولوگ/اپیلوگ cmp/jmp ‌هایی که تعداد زیادی branch تولید میکنن استفاده مکرر از توابعی مثل strlen، memcpy یا فراخوانی‌ های ورودی/خروجی نشونه پردازش ورودی میتیگیشن یا کاهش (دفاع ها) لاگ‌گذاری ورودی‌ها و بررسی edge-case ها با unit test برای تشخیص رفتاری: Telemetry که فراخوانی‌های حساس مثل خوندن فایل/شبکه رو لاگ کنه تا اگر تابع‌ های مشکوک ظاهر شد سریع ببینید Reading a Function in a Disassembler How to Find Out from Assembly What a Function Does Exactly? Input Protocol, Conditions, and Outputs Have you ever seen a function in a disassembler that seems to be talking cryptically or something? First look for prologue and epilogue. Those push/pop and mov of the first and last parameters are usually in registers or on the stack. See where it works with memory. What arguments it reads and what it returns. Give it a simple name: for example check_len or read_input — then read the pseudocode. Comment a line that says this function checks the length of the string and if it is > 5 it says OK. Example: Open a simple file that takes input in Ghidra/IDA. Open the main function. See if there are push rbp, mov rbp, rsp and a few cmp/jle. If you see a cmp with the number 5, guess where it compares the length. Name it check_length and read the pseudocode. Detection Too many or unusual push/pops in the prologue/epilogue. Cmp/jmps that generate a lot of branches. Repeated use of functions like strlen, memcpy or I/O calls. Process token Input Mitigation Logging inputs and examining edge-cases with unit tests For behavioral detection: Telemetry that logs sensitive calls like file/network reads so you can quickly see if suspicious functions appear @reverseengine

https://github.com/Maldev-Academy/MaldevAcademyLdr.2 RunPE Implementation With Multiple Evasive Techniques @reverseengine

Repost from Fuzzing ZONE
Someone has created a website revealing information about the developers behind Lumma stealer https://lummakrysy.rip/ @FUZZ0x

تحلیل یک سری حملات، که توسط باج افزار Qilin انجام شده است. Analysis of a series of attacks, carried out by Qilin ransomware. https://blog.talosintelligence.com/uncovering-qilin-attack-methods-exposed-through-multiple-cases/ @FUZZ0x

AsmLdr Dynamic Shellcode Loadee https://github.com/0xNinjaCyclone/AsmLdr