From Chrome renderer code exec to kernel with MSG_OOB
https://projectzero.google/2025/08/from-chrome-renderer-code-exec-to-kernel.html
@reverseengine
Post #1722
81
RE @reverseengine
Showing posts older than #1723 · Back to latest
GDB
Ghidra
IDA
ASan
ReverseEngineering بخش بیست و هشتم بافر اورفلو AFL++ و Instrumentation چطور Fuzzer میفهمه داخل برنامه چه خبره توی بخش قبل با libFuzzer و Coverage Guided Fuzzing آشنا شدیم حالا میریم سراغ AFL++ AFL++ یکی از معروف ترین ابزارهای Fuzzing هست که مخصوصا برای تست برنامه های C…
Part 28 Buffer Overflow
#include <stdio.h>
#include <string.h>
int main(void)
{
char input[32];
if (!fgets(input, sizeof(input), stdin))
return 0;
if (strncmp(input, "HELLO", 5) == 0)
{
puts("First check passed");
if (input[5] == '!')
{
puts("Second check passed");
}
}
return 0;
}
GDB
Ghidra
IDA
ASan
بخش بیست و هشتم بافر اورفلو
#include <stdio.h>
#include <string.h>
int main(void)
{
char input[32];
if (!fgets(input, sizeof(input), stdin))
return 0;
if (strncmp(input, "HELLO", 5) == 0)
{
puts("First check passed");
if (input[5] == '!')
{
puts("Second check passed");
}
}
return 0;
}
ReverseEngineering Copy on Write یا COW سیستم عامل چطور بدون کپی کردن همه چیز fork میسازه توی پست های قبلی گفتیم وقتی fork اجرا میشه یک Child Process ساخته میشه در نگاه اول شاید فکر کنیم سیستم عامل این کارو میکنه Parent Process │ ▼ کپی کامل حافظه │ ▼ Child Process یعنی کل…
ReverseEngineering Copy on Write یا COW سیستم عامل چطور بدون کپی کردن همه چیز fork میسازه توی پست های قبلی گفتیم وقتی fork اجرا میشه یک Child Process ساخته میشه در نگاه اول شاید فکر کنیم سیستم عامل این کارو میکنه Parent Process │ ▼ کپی کامل حافظه │ ▼ Child Process یعنی کل…
Telemetry
Context
Timeline
Correlation
ReverseEngineering Thread Analysis و Start Address بعضی وقتا خود Process چیز خاصی نشون نمیده ولی Thread هاش داستان اصلی رو لو میدن تا اینجا دیدیم که EDR فقط اسم فایل یا Process رو نگاه نمیکنه یکی از چیزایی که عمیق تر بررسی میشه Thread های داخل Process هستن هر Process میتونه…
Process Tree
Cross Process Access
Memory Regions
Memory Permission Changes
Thread Start Address
Call Stack
Timeline
ReverseEngineering Thread Analysis و Start Address بعضی وقتا خود Process چیز خاصی نشون نمیده ولی Thread هاش داستان اصلی رو لو میدن تا اینجا دیدیم که EDR فقط اسم فایل یا Process رو نگاه نمیکنه یکی از چیزایی که عمیق تر بررسی میشه Thread های داخل Process هستن هر Process میتونه…
Telemetry
Context
Timeline
Correlation
Process Tree
Cross Process Access
Memory Regions
Memory Permission Changes
Thread Start Address
Call Stack
Timeline
ReverseEngineering Data Flow Analysis دنبال کردن مسیر واقعی داده تا اینجا بیشتر تمرکزمون روی این بود که برنامه چه دستور هایی اجرا میکنه ولی از اینجا به بعد یک سؤال مهمتر میپرسیم: داده از کجا میاد و آخرش کجا میره؟ این دقیقا همون چیزیه که بهش Data Flow Analysis میگیم فرض…
int calculate(int a, int b)
{
int x = a + b;
int y = x * 2;
return y;
}
a ─┐
├── ADD ──> x ──> MUL ──> y ──> Return
b ─┘
int temp = 500;
temp ^= 123;
temp += 20;
mov eax, edi
add eax, esi
imul eax, 2
EDI ─┐
├──> EAX ──> ADD ──> IMUL
ESI ─┘
User Input
↓
Buffer
↓
Function A
↓
Function B
↓
Comparison
int process(int a)
{
int x = a;
x = x ^ 0x55;
x = x + 10;
int junk = 100;
junk *= 5;
return x;
}
int calculate(int a, int b)
{
int x = a + b;
int y = x * 2;
return y;
}
a ─┐
├── ADD ──> x ──> MUL ──> y ──> Return
b ─┘
int temp = 500;
temp ^= 123;
temp += 20;
temp هیچوقت روی y یا خروجی تابع تأثیر نذاره توی مسیر اصلی داده قرار نمیگیرهmov eax, edi
add eax, esi
imul eax, 2
EDI و ESI ورودی هستن مسیر داده این شکلیه:EDI ─┐
├──> EAX ──> ADD ──> IMUL
ESI ─┘
RAX وارد RBX بشه بعد داخل حافظه ذخیره بشه و دوباره داخل RCX برگردهUser Input
↓
Buffer
↓
Function A
↓
Function B
↓
Comparison
int process(int a)
{
int x = a;
x = x ^ 0x55;
x = x + 10;
int junk = 100;
junk *= 5;
return x;
}
a تا خروجی رو بکشیدjunk وارد مسیر اصلی داده میشه یا نهReverseEngineering Vtable چیه و چرا داخل ++C اهمیت داره؟ پست قبل دربارهی Function Pointer صحبت کردیم و دیدیم که برنامه میتونه آدرس یک تابع رو نگه داره و بعدا از طریق اون تابعی رو اجرا کنه حالا در ++C یک مفهوم مشابه ولی پیچیده تر داریم: Vtable یا: Virtual Table این…