• XSS.stack #1 – первый литературный журнал от юзеров форума

Трейс всех записей в виртуальную память через DBI

ah_for_no_one

CD-диск
Пользователь
Регистрация
18.08.2023
Сообщения
17
Реакции
1
Всем привет, не так давно узнал про такую волшебную вещь как dbi. У меня возникла идея, раз можно перехватить с помощью DBI все обращения к памяти, то в теории, можно, например распаковать файл найдя, запись с сигнатурой MZ или PE. Или, например, в браузере строку вида "GET / HTTP/1.1\r\n" и попробовать таким образом найти функцию шифрования/расшифрования трафика. Прошу тех у кого есть опыт работы с DBI, может существуют готовые инструменты позволяющие сделать то, что я описал выше.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
У меня возникла идея, раз можно перехватить с помощью DBI все обращения к памяти, то в теории, можно, например распаковать файл найдя, запись с сигнатурой MZ или PE.
Всё верно, можно мониторить сигнатуры при работе в памяти посредством DBI.
Прошу тех у кого есть опыт работы с DBI, может существуют готовые инструменты позволяющие сделать то, что я описал выше.
DynamoRIO, Pin или Frida. Для дампа можно юзать OllyDumpEx или scylla. Ну и Wireshark если речь про сеть. Успехов!
 
Всё верно, можно мониторить сигнатуры при работе в памяти посредством DBI.

DynamoRIO, Pin или Frida. Для дампа можно юзать OllyDumpEx или scylla. Ну и Wireshark если речь про сеть. Успехов!
Я понимаю что используя DynamoRIO, PIN и т.д. можно написать код, который будет выводить строки, я ищу именно готовый инструмент.
 
У меня получилось отследить строки динамически в простой программе на FASM.
C-подобный:
format PE64 console
include 'win64ax.inc'
 
entry start
 
section '.data' data readable writeable

caption db "MSTEST", 0

section '.code'  code readable executable


        start:
        ;first access
        mov al, BYTE [caption]
        nop
        nop
        nop
        nop
        ;second access
        mov eax, DWORD [caption]
        nop
        nop
        nop
        mov rax, 0x000054534554534D
        push rax
        ;third access
        mov bl, BYTE [rsp]
        mov rbx, rsp
        fastcall [MessageBoxA],0,rbx,rbx,0
        fastcall [ExitProcess], 0




section '.idata' import data readable
        library kernel32, 'kernel32.dll',\
                user32, 'user32.dll'

        import kernel32,\
               ExitProcess, 'ExitProcess'

        import user32,\
               MessageBoxA, "MessageBoxA"
Происходит 2 обращения к строке "MSTEST", а третье обращение это строка "MSTEST" на стэке, чтобы убедиться в том что всё действительно работает.
Вот исходный код программы для PIN.
C++:
#include "pin.H"
#include <iostream>
#include <fstream>

char searchstr[] = { "MSTEST" };

bool findPattern(char* str1, char* str2)
{
    for (int i = 0; i < sizeof(searchstr); i++)
    {
        if (str1[i] != str2[i])
        {
            return false;
        }
    }
    return true;
}



bool isStringPiece(const char* ptr)
{
    if (!ptr)
    {
        return false;
    }
    return findPattern((char*)ptr, searchstr);
}


VOID InsAnalysis(ADDRINT addr, ADDRINT read_ea, UINT32 read_size)
{
    if (isStringPiece((char*)read_ea))
    {
        std::cout << "STRING READING FOUND AT:" << (void*)addr << std::endl;
    }
}


VOID InsInstrument(INS ins, VOID* v)
{
    if (INS_IsMemoryRead(ins)) {
        INS_InsertCall(ins, IPOINT_BEFORE,
            (AFUNPTR)InsAnalysis,
            IARG_INST_PTR,
            IARG_MEMORYREAD_EA,
            IARG_MEMORYREAD_SIZE,
            IARG_END);
    }
}



int main(int argc, char* argv[])
{
    PIN_Init(argc, argv);

    INS_AddInstrumentFunction(InsInstrument, 0);

    std::cout << "starting program" << std::endl;
    PIN_StartProgram();


    return 0;
}
1699121343297.png

Адреса совпадают с теми, что в IDA

1699121414548.png


Я конечно понимаю что строка может быть юникодной, но это решается очень быстро. У меня возникла проблема гораздо раньше, когда я пытаюсь запустить chrome под PIN всё вроде бы работает, запустился через пару минут, но моя программа для PIN почему-то не работает, даже функция main не вызывается. Может кто-то знает в чём может быть проблема. Подключаться по PID хрома пробовал, выдаёт ACCESS_VIOLATION даже если подключаюсь без своей программы.
 
Как выяснилось, проблема не хроме, PIN не работает с любым GUI приложением, или работает,хрен его знает, приложение под PIN запускается и работает медленно собственно как и должно, но функция main моего PINtools приложения не вызывается, в интернете ничего про это найти не получается :(
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх