Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Самомодификация кода на стеке/куче

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

StillPhelix



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Разобрался. Из-за невнимательности пропустил одну букву. Вобщем, дорогу одолеет идущий.  
Правильный код:
 

Код:
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
#include<windows.h>
#define SELF_SIZE 0x18//((int)x_self_mod_end-(int)x_self_mod_code)
 
 
__declspec(naked)int x_self_mod_code(int a,int b)
{
    __asm
    {
        mov eax,[esp+4]//Получаем первый аргумент
        call get_eip//Определяем текущее положение в памяти (заталкивается в стек адрес метки get_eip)
get_eip:
        add eax,[esp+8+4]//Складываем/вычитаем из первого аргумента второй (+4 байт - это размер места, занимаемого адресом метки get_eip)
        pop edx//В edx адрес начала инструкции add eax, ...
        xor byte ptr[edx],28h//Меняем add на sub и наоборот
        ret
    }
}
void x_self_mod_end(){};
 
int main()
{
    int a;
    int (__cdecl*self_mod_code)(int a,int b);
    self_mod_code=(int (__cdecl*)(int,int))VirtualAlloc(NULL, SELF_SIZE, MEM_COMMIT,PAGE_EXECUTE_READWRITE);
    //self_mod_code=(int (__cdecl*)(int,int))malloc(SELF_SIZE);
    printf("error=0x%X, size=0x%X\n",GetLastError(),SELF_SIZE);
    memcpy(self_mod_code,x_self_mod_code,SELF_SIZE);
    for(a=1;a<10;a++)printf("%02X",x_self_mod_code(4,2));
    printf("\n");
    VirtualFree(self_mod_code, 0, MEM_RELEASE);
    return 0;
}

 
Добавлено:
Разобрался. Из-за невнимательности пропустил одну букву. Вобщем, дорогу одолеет идущий. Правильный исходник:
 
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
#include<windows.h>
#define SELF_SIZE 0x18//((int)x_self_mod_end-(int)x_self_mod_code)
 
 
__declspec(naked)int x_self_mod_code(int a,int b)
{
    __asm
    {
        mov eax,[esp+4]//Получаем первый аргумент
        call get_eip//Определяем текущее положение в памяти (заталкивается в стек адрес метки get_eip)
get_eip:
        add eax,[esp+8+4]//Складываем/вычитаем из первого аргумента второй (+4 байт - это размер места, занимаемого адресом метки get_eip)
        pop edx//В edx адрес начала инструкции add eax, ...
        xor byte ptr[edx],28h//Меняем add на sub и наоборот
        ret
    }
}
void x_self_mod_end(){};
 
int main()
{
    int a;
    int (__cdecl*self_mod_code)(int a,int b);
    self_mod_code=(int (__cdecl*)(int,int))VirtualAlloc(NULL, SELF_SIZE, MEM_COMMIT,PAGE_EXECUTE_READWRITE);
    printf("error=0x%X, size=0x%X\n",GetLastError(),SELF_SIZE);
    memcpy(self_mod_code,x_self_mod_code,SELF_SIZE);
    for(a=1;a<10;a++)printf("%02X",x_self_mod_code(4,2));
    printf("\n");
    VirtualFree(self_mod_code, 0, MEM_RELEASE);
    return 0;
}


Всего записей: 173 | Зарегистр. 18-08-2013 | Отправлено: 16:47 18-07-2015
opencl26

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну дык это то, что вам говорил ne_viens и что я вам положил на тарелочке, оставалось применить copypaste
плохо когда изучаешь по pdf или djvu, а оттуда криво копируется, постоянно косяки с синтаксисом вылазят

Всего записей: 319 | Зарегистр. 17-09-2014 | Отправлено: 19:34 18-07-2015
StillPhelix



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
ну дык это то, что вам говорил ne_viens и что я вам положил на тарелочке, оставалось применить copypaste
плохо когда изучаешь по pdf или djvu, а оттуда криво копируется, постоянно косяки с синтаксисом вылазят

 
Писать код надо ручками. Часто-густо бывает, что вместе с copypaste приходят косяки вместе с невидимыми символами. Проблема здесь в том, что после своих ручек ошибку найти реально, а после copypaste надо код переписывать полностью (левые символы-то вы не видите, авнешне код без ошибок).

Всего записей: 173 | Зарегистр. 18-08-2013 | Отправлено: 21:07 18-07-2015
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Самомодификация кода на стеке/куче


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru