ReverseEngineering – Telegram
ReverseEngineering
1.24K subscribers
40 photos
10 videos
55 files
666 links
Download Telegram
Forwarded from Source Byte
Morphisec Thwarts Russian-Linked StealC V2 Campaign Targeting Blender Users via Malicious .blend Files

https://www.morphisec.com/blog/morphisec-thwarts-russian-linked-stealc-v2-campaign-targeting-blender-users-via-malicious-blend-files/
3
MaldevAcademyLdr.2

RunPE implementation with multiple evasive techniques

@reverseengine
4
File Tunnel

https://github.com/fiddyschmitt/File-Tunnel

Bypassing a firewal
l:

# Host A
ft.exe -L 5000:127.0.0.1:3389 --write "\\server\share\1.dat" --read "\\server\share\2.dat"

# Host B
ft.exe --read "\\server\share\1.dat" --write "\\server\share\2.dat"


Tunnel TCP through RDP:

# Host A
ft.exe -L 5000:192.168.1.50:8888 --write "C:\Temp\1.dat" --read "C:\Temp\2.dat"

# Host B
ft.exe --read "\\tsclient\c\Temp\1.dat" --write "\\tsclient\c\Temp\2.dat"


@reverseengine
4
Locals متغیرهای محلی

هر متغیر محلی داخل استک فریم قرار میگیره

مثلا در C:

void f() {
    int a;
    int b;
    int c[10];
}


کامپایلر ممکنه این فریم رو بسازه:

|--------------------------|
|  return address          |
|  previous RBP            |
|--------------------------|
|  a (4 bytes)             |
|  b (4 bytes)             |
|  padding (align)         |
|  c[10] (40 bytes)        |
|--------------------------|


Saved Registers  رجیسترهایی که باید ذخیره بشن

طبق ABI سه نوع register داریم:

نوعنیاز به ذخیره توسط callee

مثال

caller-savedنهRAX, RCX, RDX

callee-savedبلهRBX, RBP, R12-R15

specialبسته به شرایطRSP


پس اگر تابعی مثل این باشه:

void foo() {
    int a;
    int b;
    // uses RBX
}



کامپایلر باید RBX رو هم داخل فریم ذخیره کنه چون callee-saved هست




Spill slots  وقتی رجیستر کم میاد

اگر تعداد متغیرها زیاد بشه رجیستر کم میاد و کامپایلر مجبور میشه بعضی مقدار ها رو داخل استک بریزه

مثلا:

void f(int a, int b, int c, int d, int e, int f) {
      ....  
}


برای اینا رجیستر کم میاد
میرن spill slot روی استک



Temporary space فضاهای موقت

کامپایلر برای کارهایی مثل call هایی که پارامتر زیاد دارن حافظه موقت روی استک میسازه

مثال:
printf("%d %d %d %d", a, b, c, d);


ممکنه کامپایلر موقت همه رو داخل استک بچینه


Locals

Every local variable is placed in a stack frame

For example, in C:

void f() {
int a;
int b;
int c[10];
}



The compiler may create this frame:

|--------------------------|
| return address |
| previous RBP |
|---------------------|
| a (4 bytes) |
| b (4 bytes) |
| padding (align) |
| c[10] (40 bytes) |
|---------------------|

Saved Registers Registers that need to be saved

According to the ABI, we have three types of registers:

Types that need to be saved by the callee

Example

caller-saved No RAX, RCX, RDX

callee-saved Yes RBX, RBP, R12-R15

special Depending on the RSP conditions

So if a function is like this:

void foo() {
int a;
int b;
// uses RBX
}


The compiler must also store RBX in the frame because it is callee-saved

Spill slots when the register runs out

If the number of variables increases, the register runs out and the compiler is forced to push some values ​​onto the stack

For example:

void f(int a, int b, int c, int d, int e, int f) {
....
}


For this, the register runs out

They go to the spill slot on the stack

Temporary space Temporary spaces

The compiler creates temporary memory on the stack for tasks such as calls that have many parameters

For example:

printf("%d %d %d %d", a, b, c, d);


The compiler may temporarily push everything onto the stack

@reverseengine
4👍1