Почему _read не читает

Discussion in 'Реверсинг' started by addiddas2233, 24 Jun 2015.

  1. addiddas2233

    addiddas2233 New Member

    Joined:
    17 Jun 2015
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    Доброго всем времени суток.
    Есть такой код.

    // cl local.c /Zi /link /base:0x08040000 ws2_32.lib

    #include <stdio.h>
    #include <string.h>
    #include <fcntl.h>
    #include <winsock2.h>
    #include <windows.h>

    #define SIZE_BUF 461

    unsigned char c;
    unsigned int limit = SIZE_BUF + 100;


    int processing_request (int, int, int, int);


    int main (unsigned int argc, char *argv[], char *envp[]) {

    processing_request (0xBAADBAAD, 0xBAADBAAD, 0xBAADBAAD, 0xBAADBAAD);

    return 0;
    }


    int processing_request (int a, int b, int c, int d) {

    char *info = "complete\n";
    struct {
    char buf[SIZE_BUF];
    unsigned int i;
    } s;

    s.i = 0;
    while (_read (fileno (stdin), &c, 1) > 0) {

    if (c == '\n'){
    s.buf[s.i] = 0;
    break;​
    }
    s.buf[s.i++] = c;

    if (s.i > limit){
    break;
    }​
    }

    printf ("read %d bytes\n", s.i);
    printf (info);

    memset (&a, 0xDA, 16);

    return s.i;
    }​
    Задача вообще стоит такая: переполнением локального буфера выполнить свой шеллкод.
    Суть в том, почему-то когда я через консоль подаю на программе файл с символами так: local.exe < text.txt.
    Либо python -c 'print("A"*600)' | local.exe . Но получается что _read возвращает 0 и идет возврат из while, считывает максимум 413 +- байт, и выходит из цикла еще до переполнения буфера. Делал на windows xp sp2, запускал таким образом программу раз 50, и все время одно и тоже.
     
  2. ximera

    ximera Member

    Joined:
    3 Jul 2015
    Messages:
    7
    Likes Received:
    6
    Reputations:
    0
    Ну засунь в отладчик, попробуй получить GetLastError.

    Вообще попрактикуйся в отладчике, потому что переписывание примеров из книг не всегда дают знания, а когда ты возишься два дня, после чего прозреваешь так тогда знания на долго в голове застряют.
     
    addiddas2233 likes this.
  3. addiddas2233

    addiddas2233 New Member

    Joined:
    17 Jun 2015
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    Да забыл отписаться в эту тему) уже разобрался, получалось, что просто перетирал счетчик, когда шло переполнение буффера. Отттого и получался такой результат.