بخش بیست و چهارم بافر اورفلو
Fuzzing
شکار باگ بدون اینکه خط به خط کد رو بخونیم
تا اینجا خودمان با تحلیل کد و اسمبلی دنبال باگ میگشتیم
ولی اگر برنامه چند میلیون خط کد داشته باشه چی
اینجاست که Fuzzing وارد میشه
Fuzzing
به جای اینکه ما دنبال باگ بگردیم خودش هزار بار یا حتی میلیون ها ورودی مختلف به برنامه میده تا ببیند برنامه کرش میکنه یا نه
Fuzzing یعنی چی
به زبان ساده
یک ابزار به صورت خودکار ورودی های مختلف تولید میکنه و به برنامه میده
اگر برنامه
کرش کنه
هنگ کنه
رفتار غیرعادی داشته باشه
ابزار اون ورودی رو ذخیره میکنه تا بعدا بررسی کنیم
یک مثال ساده:
فرض کنید برنامه فقط یک رشته از کاربر بگیره
#include <stdio.h>
int main() {
char input[64];
fgets(input,sizeof(input),stdin);
printf("%s",input);
return 0;
}
یک Fuzzer ممکنه این ورودی ها رو امتحان کنه
AAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAA
123456789
!@#$%^&*
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
چرا Fuzzing مهمه؟
چون انسان نمیتونه میلیون ها ورودی رو امتحان کنه
ولی Fuzzer این کار رو در مدت کوتاهی انجام میده
به همین دلیل خیلی از آسیبپذیری های معروف دنیا اولین بار با Fuzzing پیدا شدن
انواع Fuzzing:
Dumb Fuzzing
سادهترین حالت
فقط داده های تصادفی به برنامه میده
هیچ اطلاعی از ساختار برنامه نداره
Smart Fuzzing
ساختار ورودی رو میشناسه
مثلا اگر برنامه فایل PNG باز میکنه
ورودیهایی شبیه PNG تولید میکنه
در نتیجه شانس پیدا کردن باگ بیشتر میشه
Coverage Guided Fuzzing
این روش خیلی محبوبه
ابزار بررسی میکنه هر ورودی باعث اجرای کدوم قسمت های برنامه شده
اگر ورودی جدید مسیر جدیدی از کد رو اجرا کنه
همون مسیر رو بیشتر بررسی میکنه
به همین دلیل خیلی سریع تر از روش های ساده باگ پیدا میکنه
ابزارهای معروف
چند ابزار معروف که تقریباً هر Reverse Engineer باید اسمشون رو بدونه
AFL++
libFuzzer
Honggfuzz
این ابزار ها سال هاست برای پیدا کردن باگهای حافظه استفاده میشن
موقع مهندسی معکوس چرا مهمه؟
فرض کنید یک باینری دارید و هیچ سورسی از اون موجود نیست
میتونید اون رو Fuzz کنید
اگر کرش کرد
همن ورودی رو داخل GDB یا IDA بررسی کنید
و قدم به قدم علت کرش رو پیدا میکنید
به همین دلیل Fuzzing و Reverse Engineering مکمل هم هستن
Fuzzing
یعنی به جای اینکه خودتون حدس بزنید چه ورودی باعث باگ میشه یک ابزار هزار بار یا میلیونها ورودی مختلف رو امتحان میکنه هر جا برنامه رفتار غیرعادی داشت
همان نقطه تبدیل به هدف تحلیل مهندسی معکوس میشه
تمرین:
یک برنامه ساده که از ورودی کاربر استفاده میکنه بنویسید بعد فکر کنید اگر قرار بود یک Fuzzer برای اون بنویسید چه نوع ورودی هایی رو امتحان میکردید
@reverseengine
ReverseEngineering
بخش بیست و چهارم بافر اورفلو Fuzzing شکار باگ بدون اینکه خط به خط کد رو بخونیم تا اینجا خودمان با تحلیل کد و اسمبلی دنبال باگ میگشتیم ولی اگر برنامه چند میلیون خط کد داشته باشه چی اینجاست که Fuzzing وارد میشه Fuzzing به جای اینکه ما دنبال باگ بگردیم…
Part 24 Buffer Overflow
Fuzzing
Bug hunting without reading the code line by line
So far we have been looking for bugs ourselves by analyzing the code and assembly
But what if the program has several million lines of code
This is where Fuzzing comes in
Fuzzing
Instead of us looking for bugs, it gives the program thousands or even millions of different inputs to see if the program crashes or not
What does Fuzzing mean
In simple terms
A tool automatically generates different inputs and gives them to the program
If the program
Crash
Hangs
Or behaves abnormally
The tool saves that input for later review
A simple example:
Suppose the program only takes a string from the user
#include <stdio.h>
int main() {
char input[64];
fgets(input,sizeof(input),stdin);
printf("%s",input);
return 0;
}
A Fuzzer might try these inputs
AAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
123456789
!@#$%^&*
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Why is Fuzzing Important?
Because humans cannot try millions of inputs
But Fuzzer does this in a short time
That is why many of the world's famous vulnerabilities were first found with Fuzzing
Types of Fuzzing:
Dumb Fuzzing
The simplest
Only gives random data to the program
It has no information about the structure of the program
Smart Fuzzing
It knows the structure of the input
For example, if the program opens a PNG file
It produces inputs similar to PNG
As a result, the chances of finding a bug increase
Coverage Guided Fuzzing
This method is very popular
The tool checks which parts of the program each input causes to be executed
If the new input executes a new path of code
It checks the same path more
That is why it finds bugs much faster than simple methods
Famous tools
A few famous tools that almost every Reverse Engineer should know their names
AFL++
libFuzzer
Honggfuzz
These tools have been used for years to find Memory bugs are used
Why is it important when reverse engineering?
Suppose you have a binary and no source is available
You can fuzz it
If it crashes
Examine the same input in GDB or IDA
And you will find the cause of the crash step by step
That is why Fuzzing and Reverse Engineering are complementary
Fuzzing
Instead of guessing what input causes the bug, a tool tries thousands or millions of different inputs. Wherever the program behaves abnormally
That point becomes the target of reverse engineering analysis
Exercise:
Write a simple program that uses user input. Then think about what kind of inputs you would try if you were to write a fuzzer for it
@reverseengine
Dissecting_the_Dark_Web_Reverse_Engineering_the_Tools_of_the_Underground.pdf
21.7 MB
D I S S E C T I N G T H E
DARK WEB
R e v e r s e E n g i n e e r i n g t h e To o l s
of the Underground Economy
@reverseengine
DARK WEB
R e v e r s e E n g i n e e r i n g t h e To o l s
of the Underground Economy
@reverseengine
8 countries. 8 critical sectors. One APT
Everyone talks about killing two birds with one stone
Operation Olalampo proved that Charming Kitten (Iranian APT) could hit 8 birds with one stone.
Egypt, Saudi Arabia, UAE, Turkey, Hungary, Turkmenistan, Israel, and South America.
Government, Healthcare, Financial Services, Energy, Education, Telecommunications, Defense, and Industrial.
GitHub Repository:
https://github.com/S3N4T0R-0X0/APTs-Adversary-Simulation/tree/main/Iranian%20APT/Charming%20Kitten
@reverseengine
Everyone talks about killing two birds with one stone
Operation Olalampo proved that Charming Kitten (Iranian APT) could hit 8 birds with one stone.
Egypt, Saudi Arabia, UAE, Turkey, Hungary, Turkmenistan, Israel, and South America.
Government, Healthcare, Financial Services, Energy, Education, Telecommunications, Defense, and Industrial.
GitHub Repository:
https://github.com/S3N4T0R-0X0/APTs-Adversary-Simulation/tree/main/Iranian%20APT/Charming%20Kitten
@reverseengine
GitHub
APTs-Adversary-Simulation/Iranian APT/Charming Kitten at main · S3N4T0R-0X0/APTs-Adversary-Simulation
This repository contains detailed adversary simulation APT campaigns targeting various critical sectors. Each simulation includes custom tools, C2 servers, backdoors, exploitation techniques, stage...
Forwarded from Malware, Cats and Cryptography
My first presentation in DEFCON Las Vegas. Happy to share my knowledge with the community ❤️
X/twitter
#hacking #malware #offensive #defensive #redteam #blueteam #threatintel #threathunting #research #programming #malwareanalysis
X/twitter
#hacking #malware #offensive #defensive #redteam #blueteam #threatintel #threathunting #research #programming #malwareanalysis
این یکی از مهمترین بخش های Heap هست اگر این مفهوم رو خوب یاد بگیرید خیلی از رفتارهای malloc() و free() براتون قابل پیش بینی میشه
Bin چیه و Allocator حافظههای آزاد
رو چطور مدیریت میکنه؟
در پست قبل گفتیم وقتی free() رو صدا میزنیم معمولا حافظه فورا به سیستم عامل برنمیگرده
سوال اینجاست:
پس این حافظه کجا میره؟
اینجاست که مفهوم Bin وارد میشه
Bin یعنی چی؟
به زبان ساده Bin مثل یک انبار یا لیست انتظار برای Chunk های آزاده
وقتی یک Chunk آزاد میشه Allocator اون رو دور نمیندازه بلکه داخل یکی از Bin ها قرار میده تا اگر بعدا برنامه دوباره به حافظه ای با اندازه مشابه نیاز داشت همون Chunk رو دوباره استفاده کنه
این کار باعث میشه:
سرعت malloc() بیشتر بشه
تعداد درخواست ها از سیستم عامل کمتر بشه
مصرف حافظه بهینه تر بشه
چرا چند نوع Bin وجود داره؟
همهی Chunk ها اندازه یکسانی ندارن
مثلا ممکنه یک برنامه هم 32 بایت حافظه بخاد هم 512 بایت و هم چند کیلوبایت
اگر همهی Chunk ها داخل یک لیست قرار بگیرن پیدا کردن Chunk مناسب زمان زیادی میبره به همین دلیل Allocator اونا رو بر اساس اندازه دسته بندی میکنه
انواع Bin در glibc
در نسخههای امروزی glibc معمولاً با این Binها رو به رو میشیم:
🔹 Tcache
جدیدترین و سریعترین بخش
هر Thread یک Tcache مخصوص خودش داره وقتی Chunkهای کوچیک آزاد میشن معمولا اول وارد Tcache میشن تا اگر دوباره همون اندازه نیاز شد خیلی سریع استفاده بشن
هدف اصلی Tcache افزایش سرعت برنامه هست
🔹 Fast Bin
برای Chunkهای کوچیک استفاده میشه
ویژگی مهم Fast Bin اینه که هنگام آزاد شدن Chunkها عملیات ادغام (Coalescing) بلافاصله انجام نمیشه
این موضوع سرعت رو بالا میبره اما مدیریت حافظه رو کمی پیچیده تر میکنه
🔹 Unsorted Bin
وقتی بعضی Chunk ها آزاد میشن اول وارد Unsorted Bin میشن
بعدا Allocator تصمیم میگیره اونها رو به Bin مناسب منتقل کنه
میشه گفت Unsorted Bin یک محل موقت برای Chunk های آزاده
🔹 Small Bin
برای Chunk هایی با اندازه مشخص و نسبتا کوچیک استفاده میشه
چون اندازه ها مشخصن پیدا کردن Chunk مناسب سریع انجام میشه
🔹 Large Bin
برای Chunk های بزرگ تر استفاده میشه
اینجا Allocator باید دقت بیشتری داشته باشه تا بهترین Chunk رو برای درخواست جدید انتخاب کنه
چرا شناخت Bin ها مهمه؟
چون رفتار malloc() و free() کاملا به همین ساختارها وابسته ست
وقتی یک برنامه حافظه درخواست میکنه Allocator اول بررسی میکنه که آیا داخل Bin ها Chunk مناسبی وجود داره یا نه
اگر پیدا بشه همون رو برمیگردونه
اگر پیدا نشه از Heap یا در بعضی شرایط از سیستم عامل حافظه جدید میگیره
آیا همیشه از سیستم عامل حافظه جدید گرفته میشه؟ خیر
در بیشتر مواقع Allocator سعی میکنه از حافظه هایی که قبلا آزاد شدن استفاده کنه
به همین دلیل ممکن است دو بار malloc() پشت سر هم همون آدرسی رو برگردونه که قبلا با free() آزاد شده بود این رفتار کاملا طبیعیه و برای افزایش کارایی انجام میشه
Bin
ها محل نگهداری Chunk های آزادن Allocator با استفاده از اونها تلاش میکنه بدون درخواست مداوم حافظه از سیستم عامل حافظه های آزاد شده رو دوباره استفاده کنه همین طراحی باعث شده Heap هم سریع تر باشد و هم پیچیده تر از Stack
@reverseengine
Bin چیه و Allocator حافظههای آزاد
رو چطور مدیریت میکنه؟
در پست قبل گفتیم وقتی free() رو صدا میزنیم معمولا حافظه فورا به سیستم عامل برنمیگرده
سوال اینجاست:
پس این حافظه کجا میره؟
اینجاست که مفهوم Bin وارد میشه
Bin یعنی چی؟
به زبان ساده Bin مثل یک انبار یا لیست انتظار برای Chunk های آزاده
وقتی یک Chunk آزاد میشه Allocator اون رو دور نمیندازه بلکه داخل یکی از Bin ها قرار میده تا اگر بعدا برنامه دوباره به حافظه ای با اندازه مشابه نیاز داشت همون Chunk رو دوباره استفاده کنه
این کار باعث میشه:
سرعت malloc() بیشتر بشه
تعداد درخواست ها از سیستم عامل کمتر بشه
مصرف حافظه بهینه تر بشه
چرا چند نوع Bin وجود داره؟
همهی Chunk ها اندازه یکسانی ندارن
مثلا ممکنه یک برنامه هم 32 بایت حافظه بخاد هم 512 بایت و هم چند کیلوبایت
اگر همهی Chunk ها داخل یک لیست قرار بگیرن پیدا کردن Chunk مناسب زمان زیادی میبره به همین دلیل Allocator اونا رو بر اساس اندازه دسته بندی میکنه
انواع Bin در glibc
در نسخههای امروزی glibc معمولاً با این Binها رو به رو میشیم:
🔹 Tcache
جدیدترین و سریعترین بخش
هر Thread یک Tcache مخصوص خودش داره وقتی Chunkهای کوچیک آزاد میشن معمولا اول وارد Tcache میشن تا اگر دوباره همون اندازه نیاز شد خیلی سریع استفاده بشن
هدف اصلی Tcache افزایش سرعت برنامه هست
🔹 Fast Bin
برای Chunkهای کوچیک استفاده میشه
ویژگی مهم Fast Bin اینه که هنگام آزاد شدن Chunkها عملیات ادغام (Coalescing) بلافاصله انجام نمیشه
این موضوع سرعت رو بالا میبره اما مدیریت حافظه رو کمی پیچیده تر میکنه
🔹 Unsorted Bin
وقتی بعضی Chunk ها آزاد میشن اول وارد Unsorted Bin میشن
بعدا Allocator تصمیم میگیره اونها رو به Bin مناسب منتقل کنه
میشه گفت Unsorted Bin یک محل موقت برای Chunk های آزاده
🔹 Small Bin
برای Chunk هایی با اندازه مشخص و نسبتا کوچیک استفاده میشه
چون اندازه ها مشخصن پیدا کردن Chunk مناسب سریع انجام میشه
🔹 Large Bin
برای Chunk های بزرگ تر استفاده میشه
اینجا Allocator باید دقت بیشتری داشته باشه تا بهترین Chunk رو برای درخواست جدید انتخاب کنه
چرا شناخت Bin ها مهمه؟
چون رفتار malloc() و free() کاملا به همین ساختارها وابسته ست
وقتی یک برنامه حافظه درخواست میکنه Allocator اول بررسی میکنه که آیا داخل Bin ها Chunk مناسبی وجود داره یا نه
اگر پیدا بشه همون رو برمیگردونه
اگر پیدا نشه از Heap یا در بعضی شرایط از سیستم عامل حافظه جدید میگیره
آیا همیشه از سیستم عامل حافظه جدید گرفته میشه؟ خیر
در بیشتر مواقع Allocator سعی میکنه از حافظه هایی که قبلا آزاد شدن استفاده کنه
به همین دلیل ممکن است دو بار malloc() پشت سر هم همون آدرسی رو برگردونه که قبلا با free() آزاد شده بود این رفتار کاملا طبیعیه و برای افزایش کارایی انجام میشه
Bin
ها محل نگهداری Chunk های آزادن Allocator با استفاده از اونها تلاش میکنه بدون درخواست مداوم حافظه از سیستم عامل حافظه های آزاد شده رو دوباره استفاده کنه همین طراحی باعث شده Heap هم سریع تر باشد و هم پیچیده تر از Stack
@reverseengine
ReverseEngineering
این یکی از مهمترین بخش های Heap هست اگر این مفهوم رو خوب یاد بگیرید خیلی از رفتارهای malloc() و free() براتون قابل پیش بینی میشه Bin چیه و Allocator حافظههای آزاد رو چطور مدیریت میکنه؟ در پست قبل گفتیم وقتی free() رو صدا میزنیم معمولا حافظه فورا به…
This is one of the most important parts of the Heap. If you learn this concept well, many of the behaviors of malloc() and free() will be predictable for you.
What is Bin and how does Allocator manage freed memory?
In the previous post, we said that when we call free(), the memory is usually not returned to the operating system immediately.
The question is:
So where does this memory go?
This is where the concept of Bin comes in.
What does Bin mean?
In simple terms, Bin is like a warehouse or waiting list for freed Chunks.
When a Chunk is freed, the Allocator does not throw it away, but places it in one of the Bins so that if the program needs memory of the same size again later, it can reuse the same Chunk.
This will:
Increase the speed of malloc().
Reduce the number of requests from the operating system.
Optimize memory usage.
Why are there several types of Bins?
Not all chunks are the same size
For example, a program may need 32 bytes of memory, 512 bytes, or a few kilobytes
If all the chunks are in a list, finding the right chunk will take a long time, so the Allocator sorts them by size
Types of Bins in glibc
In today's versions of glibc, we usually encounter these bins:
🔹 Tcache
The newest and fastest part
Each thread has its own Tcache. When small chunks are freed, they usually enter Tcache first so that if the same size is needed again, they can be used very quickly
The main purpose of Tcache is to increase the speed of the program
🔹 Fast Bin
It is used for small chunks
The important feature of Fast Bin is that when the chunks are freed, the coalescing operation is not performed immediately
This increases speed, but makes memory management a little more complicated
🔹 Unsorted Bin
When some chunks are freed, they enter Tcache first Unsorted Bin
Later, the Allocator decides to move them to the appropriate Bin
You can say that the Unsorted Bin is a temporary place for free Chunks
🔹 Small Bin
Used for Chunks of a specific and relatively small size
Since the sizes are specific, finding the appropriate Chunk is done quickly
🔹 Large Bin
Used for larger Chunks
Here the Allocator must be more careful to choose the best Chunk for the new request
Why is it important to know the Bins?
Because the behavior of malloc() and free() is completely dependent on these structures
When a program requests memory, the Allocator first checks whether there is a suitable Chunk in the Bins or not
If it is found, it returns it
If not found, it gets new memory from the Heap or in some cases from the operating system
Is new memory always taken from the operating system? No
In most cases, the Allocator tries to use previously freed memory
That is why malloc() may return the same address twice in a row that was previously freed with free(). This behavior is completely normal and is done to increase performance
Bins are where freed chunks are stored. The Allocator uses them to try to reuse freed memory without constantly requesting memory from the operating system. This design makes the Heap both faster and more complex than the Stack
@reverseengine
What is Bin and how does Allocator manage freed memory?
In the previous post, we said that when we call free(), the memory is usually not returned to the operating system immediately.
The question is:
So where does this memory go?
This is where the concept of Bin comes in.
What does Bin mean?
In simple terms, Bin is like a warehouse or waiting list for freed Chunks.
When a Chunk is freed, the Allocator does not throw it away, but places it in one of the Bins so that if the program needs memory of the same size again later, it can reuse the same Chunk.
This will:
Increase the speed of malloc().
Reduce the number of requests from the operating system.
Optimize memory usage.
Why are there several types of Bins?
Not all chunks are the same size
For example, a program may need 32 bytes of memory, 512 bytes, or a few kilobytes
If all the chunks are in a list, finding the right chunk will take a long time, so the Allocator sorts them by size
Types of Bins in glibc
In today's versions of glibc, we usually encounter these bins:
🔹 Tcache
The newest and fastest part
Each thread has its own Tcache. When small chunks are freed, they usually enter Tcache first so that if the same size is needed again, they can be used very quickly
The main purpose of Tcache is to increase the speed of the program
🔹 Fast Bin
It is used for small chunks
The important feature of Fast Bin is that when the chunks are freed, the coalescing operation is not performed immediately
This increases speed, but makes memory management a little more complicated
🔹 Unsorted Bin
When some chunks are freed, they enter Tcache first Unsorted Bin
Later, the Allocator decides to move them to the appropriate Bin
You can say that the Unsorted Bin is a temporary place for free Chunks
🔹 Small Bin
Used for Chunks of a specific and relatively small size
Since the sizes are specific, finding the appropriate Chunk is done quickly
🔹 Large Bin
Used for larger Chunks
Here the Allocator must be more careful to choose the best Chunk for the new request
Why is it important to know the Bins?
Because the behavior of malloc() and free() is completely dependent on these structures
When a program requests memory, the Allocator first checks whether there is a suitable Chunk in the Bins or not
If it is found, it returns it
If not found, it gets new memory from the Heap or in some cases from the operating system
Is new memory always taken from the operating system? No
In most cases, the Allocator tries to use previously freed memory
That is why malloc() may return the same address twice in a row that was previously freed with free(). This behavior is completely normal and is done to increase performance
Bins are where freed chunks are stored. The Allocator uses them to try to reuse freed memory without constantly requesting memory from the operating system. This design makes the Heap both faster and more complex than the Stack
@reverseengine
LLMs Have Reshaped How We Think About Decompilation and Collaboration
https://hex-rays.com/blog/llms-have-reshaped-how-we-think-about-decompilation-and-collaboration
@reverseengine
https://hex-rays.com/blog/llms-have-reshaped-how-we-think-about-decompilation-and-collaboration
@reverseengine
Hex-Rays
LLMs Have Reshaped How We Think About Decompilation and Collaboration
How AI agents are reshaping reverse engineering, from decompiler collaboration to the way we approach hacking challenges.
A 0-click exploit chain for the Pixel 10: When a Door Closes, a Window Opens
https://projectzero.google/2026/05/pixel-10-exploit.html
@reverseengine
https://projectzero.google/2026/05/pixel-10-exploit.html
@reverseengine
projectzero.google
A 0-click exploit chain for the Pixel 10: When a Door Closes, a Window Opens
We recently published an exploit chain for the Google Pixel 9 that demonstrated it was possible t...
On the Effectiveness of Mutational Grammar Fuzzing
https://projectzero.google/2026/03/mutational-grammar-fuzzing.html
@reverseengine
https://projectzero.google/2026/03/mutational-grammar-fuzzing.html
@reverseengine
projectzero.google
On the Effectiveness of Mutational Grammar Fuzzing
Mutational grammar fuzzing is a fuzzing technique in which the fuzzer uses a predefined grammar t...
On the clock: Escaping VMware Workstation at Pwn2Own Berlin 2025
https://www.synacktiv.com/publications/on-the-clock-escaping-vmware-workstation-at-pwn2own-berlin-2025
@reverseengine
https://www.synacktiv.com/publications/on-the-clock-escaping-vmware-workstation-at-pwn2own-berlin-2025
@reverseengine
Synacktiv
On the clock: Escaping VMware Workstation at Pwn2Own Berlin 2025
Exploring GrapheneOS secure allocator: Hardened Malloc
https://www.synacktiv.com/publications/exploring-grapheneos-secure-allocator-hardened-malloc
@reverseengine
https://www.synacktiv.com/publications/exploring-grapheneos-secure-allocator-hardened-malloc
@reverseengine
Synacktiv
Exploring GrapheneOS secure allocator: Hardened Malloc
SakDriver: Reversing a Kernel Driver Rootkit
https://0xsec.gitbook.io/0xsec/malware-analysis/sakdriver-reversing-a-kernel-driver-rootkit
@reverseengine
https://0xsec.gitbook.io/0xsec/malware-analysis/sakdriver-reversing-a-kernel-driver-rootkit
@reverseengine
0xsec.gitbook.io
SakDriver: Reversing a Kernel Driver Rootkit | 0xSec
Proxmox Virtual Environment now available for 64-bit ARM
https://forum.proxmox.com/threads/proxmox-virtual-environment-now-available-for-64-bit-arm-arm64.185526
@reverseengine
https://forum.proxmox.com/threads/proxmox-virtual-environment-now-available-for-64-bit-arm-arm64.185526
@reverseengine
Proxmox Support Forum
Proxmox Virtual Environment now available for 64-bit ARM (arm64)!
We are excited to announce the first release of Proxmox Virtual Environment with official support for a second CPU architecture: 64-bit ARM (arm64/aarch64). Until now, Proxmox VE was available for...
IDA pro 9.4
Linux + Windows + Mac + ARM
download
@reverseengine
Linux + Windows + Mac + ARM
download
tree "/home/data/0x01/IDA/IDA pro 9.4/"
/home/reeves/data/soft/IDA/IDA pro 9.4/
├── ida-pro_94_armlinux.run
├── ida-pro_94_armmac.app.zip
├── ida-pro_94_armwin.exe
├── ida-pro_94_x64linux.run
├── ida-pro_94_x64mac.app.zip
├── ida-pro_94_x64win.exe
├── kg_patch
│ ├── idapro.hexlic
│ ├── keygen.js
│ ├── README
│ ├── x64linux
│ │ ├── libida32.so
│ │ └── libida.so
│ └── x64win
│ ├── ida32.dll
│ └── ida.dll
└── misc
├── hexlicsrv94_x64linux.run
├── hexvault94_x64linux.run
├── idapin94.zip
└── lumina94_x64linux.run
5 directories, 17 files
@reverseengine
🔥3