Очень глупый вопрос по с++


Edith Wooten

Уважаемый пользователь
Форумчанин
Регистрация
17.04.2019
Сообщения
108
Репутация
22
как сделать запутывание функции и проверки ее на целостность (control flow?)

допустим если значение в ней изменили, нужно проверить его на целостность и вызвать иной код.
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 168
Репутация
8 302
Можно посчитать контрольную сумму функции, примерно так:
Код:
static int test_proc()
{
    return 1;
}

static void size_proc()
{}

static size_t test_proc_size()
{
    return (uintptr_t)((uintptr_t)(void*)size_proc - (uintptr_t)(void*)test_proc);
}

test_proc - Адрес в памяти вашей функции.
test_proc_size - Размер вашей функции.

Ну и монипулируйте с этими данными, можете сами поменять функцию.)))

Только оптимизацию компилятора отключите, либо еще вариант, дизасемблируйте вашу функцию и сделайте ассемблерную вставку, тогда 100 процентов все отработает, т.е. посчитаете контрольную сумму и т.д.
 

Edith Wooten

Уважаемый пользователь
Форумчанин
Регистрация
17.04.2019
Сообщения
108
Репутация
22
Можно посчитать контрольную сумму функции, примерно так:
Код:
static int test_proc()
{
    return 1;
}

static void size_proc()
{}

static size_t test_proc_size()
{
    return (uintptr_t)((uintptr_t)(void*)size_proc - (uintptr_t)(void*)test_proc);
}

test_proc - Адрес в памяти вашей функции.
test_proc_size - Размер вашей функции.

Ну и монипулируйте с этими данными, можете сами поменять функцию.)))

Только оптимизацию компилятора отключите, либо еще вариант, дизасемблируйте вашу функцию и сделайте ассемблерную вставку, тогда 100 процентов все отработает, т.е. посчитаете контрольную сумму и т.д.
а что делать в случае если эту функу запатчат?
 

Edith Wooten

Уважаемый пользователь
Форумчанин
Регистрация
17.04.2019
Сообщения
108
Репутация
22
Код:
; Listing generated by Microsoft (R) Optimizing Compiler Version 19.16.27030.1

    TITLE    C:\Users\WORK\source\repos\ConsoleApplication6\ConsoleApplication6\ConsoleApplication6.cpp
    .686P
    .XMM
    include listing.inc
    .model    flat

INCLUDELIB MSVCRT
INCLUDELIB OLDNAMES

PUBLIC    _main
; Function compile flags: /Odtp
; File c:\users\work\source\repos\consoleapplication6\consoleapplication6\consoleapplication6.cpp
;    COMDAT _main
_TEXT    SEGMENT
_hi$ = -4                        ; size = 4
_main    PROC                        ; COMDAT

; 20   : {

    push    ebp
    mov    ebp, esp
    push    ecx

; 21   :     auto hi = test_proc_size();

    call    ?test_proc_size@@YAIXZ            ; test_proc_size
    mov    DWORD PTR _hi$[ebp], eax

; 22   : }

    xor    eax, eax
    mov    esp, ebp
    pop    ebp
    ret    0
_main    ENDP
_TEXT    ENDS
; Function compile flags: /Odtp
; File c:\users\work\source\repos\consoleapplication6\consoleapplication6\consoleapplication6.cpp
;    COMDAT ?test_proc_size@@YAIXZ
_TEXT    SEGMENT
?test_proc_size@@YAIXZ PROC                ; test_proc_size, COMDAT

; 15   : {

    push    ebp
    mov    ebp, esp

; 16   :     return (uintptr_t)((uintptr_t)(void*)size_proc - (uintptr_t)(void*)test_proc);

    mov    eax, OFFSET ?size_proc@@YAXXZ        ; size_proc
    sub    eax, OFFSET ?test_proc@@YAHXZ        ; test_proc

; 17   : }

    pop    ebp
    ret    0
?test_proc_size@@YAIXZ ENDP                ; test_proc_size
_TEXT    ENDS
; Function compile flags: /Odtp
; File c:\users\work\source\repos\consoleapplication6\consoleapplication6\consoleapplication6.cpp
;    COMDAT ?test_proc@@YAHXZ
_TEXT    SEGMENT
?test_proc@@YAHXZ PROC                    ; test_proc, COMDAT

; 9    : {

    push    ebp
    mov    ebp, esp

; 10   :     return 1;

    mov    eax, 1

; 11   : }

    pop    ebp
    ret    0
?test_proc@@YAHXZ ENDP                    ; test_proc
_TEXT    ENDS
; Function compile flags: /Odtp
; File c:\users\work\source\repos\consoleapplication6\consoleapplication6\consoleapplication6.cpp
;    COMDAT ?size_proc@@YAXXZ
_TEXT    SEGMENT
?size_proc@@YAXXZ PROC                    ; size_proc, COMDAT

; 7    : {}

    push    ebp
    mov    ebp, esp
    pop    ebp
    ret    0
?size_proc@@YAXXZ ENDP                    ; size_proc
_TEXT    ENDS
END

@X-Shar вот такой листинг получился, что вы хотели сказать по ассемблерной вставке? этого не понял
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 168
Репутация
8 302
@Edith Wooten, ну-да тут так просто не декомпильнеш.:(

Функция ещё вызывает какие-то подфункции ?

Можно сделать так:Малварь как искусство - Генерация кода на си. Часть вторая. Исполняем код на лету

В той теме написано, как получить бинарный код функции, далее вы можете это дело пошифровать, вычислить контрольную сумму и т.д.

Ну и запустить эту функцию у себя в программе.)))
 

Edith Wooten

Уважаемый пользователь
Форумчанин
Регистрация
17.04.2019
Сообщения
108
Репутация
22
@Edith Wooten, ну-да тут так просто не декомпильнеш.:(

Функция ещё вызывает какие-то подфункции ?

Можно сделать так:Малварь как искусство - Генерация кода на си. Часть вторая. Исполняем код на лету

В той теме написано, как получить бинарный код функции, далее вы можете это дело пошифровать, вычислить контрольную сумму и т.д.

Ну и запустить эту функцию у себя в программе.)))
муторно конечно всё это, нет генераторов для с++ для таких делов?
 

virt

Уважаемый пользователь
Форумчанин
Регистрация
24.11.2016
Сообщения
704
Репутация
228
муторно конечно всё это, нет генераторов для с++ для таких делов?
А как такой генератор сделать, у каждой функции свой набор параметров, далее если вы вызываете подфункции, с этим тоже проблема.

Да муторно и долго. Но можно один раз сделать для основных функций в своем проекте и ладно.

Может как-то и можно автоматизировать, я незнаю. К сожалению как-то здесь, да и не только здесь мало кто это обсуждает, т.к. это веяние времени, специалистов по низкоуровневому кодингу в РФ очень мало, т.к. они особо и не нужны в стране и малооплачиваемы.

На западе таких спецов ценят, поэтому поищите на зарубежных бордах, если владеете языком.

В книгах Криса Касперски тоже можно что-то найти, но это не самое новое и не всё актуально уже сейчас.

Как-то так вкратце.)
 

Edith Wooten

Уважаемый пользователь
Форумчанин
Регистрация
17.04.2019
Сообщения
108
Репутация
22
А как такой генератор сделать, у каждой функции свой набор параметров, далее если вы вызываете подфункции, с этим тоже проблема.

Да муторно и долго. Но можно один раз сделать для основных функций в своем проекте и ладно.

Может как-то и можно автоматизировать, я незнаю. К сожалению как-то здесь, да и не только здесь мало кто это обсуждает, т.к. это веяние времени, специалистов по низкоуровневому кодингу в РФ очень мало, т.к. они особо и не нужны в стране и малооплачиваемы.

На западе таких спецов ценят, поэтому поищите на зарубежных бордах, если владеете языком.

В книгах Криса Касперски тоже можно что-то найти, но это не самое новое и не всё актуально уже сейчас.

Как-то так вкратце.)
подскажите в лс зарубежные форумы
 

virt

Уважаемый пользователь
Форумчанин
Регистрация
24.11.2016
Сообщения
704
Репутация
228
подскажите в лс зарубежные форумы
Здесь форум, в личке нехочу не с кем общаться, только если пользователь мне интересен.

Гуглите вопросы, либо duckduckgo, например "Code segment encryption" и так далее, много статей, например вот интересный механизм, запуск без создания процесса, т.е. в памяте текущего процесса стаба:
 
Верх Низ