тест антиотладки

Тема в разделе "WASM.UNIX", создана пользователем pikofarad, 12 апр 2009.

  1. pikofarad

    pikofarad New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2008
    Сообщения:
    35
    более прокаченная версия приема может использовать отладочные регистры в кач-ве регистров общего назначения, тем самым лишая возможности установки хардварных бряков в обычных отладчиках.
     
  2. pikofarad

    pikofarad New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2008
    Сообщения:
    35
    я писал, что надо линковать следующим образом:
    ld -N hello.o -o hello
    опция -N указывает линковщику, что создавать загружаемый сегмент нужно с правами RWE. Можно и ручками в любом hex-редакторе подправить.

    1

    Код (Text):
    1. .global _start
    2. _start:
    3.     movl    $26,%eax
    4.     movl    $0,%ebx
    5.     int     $0x80
    6.  
    7.     cmpl    $(-1),%eax
    8.     je  debug
    9.  
    10.     xorl    %eax,%eax
    11.     incl    %eax
    12.     int $0x80
    13.  
    14. debug:
    15.     xorl    %eax,%eax
    16.     incl    %eax
    17.     movl    $0x29a,%ebx
    18.     int     $0x80
     
  3. Mecid

    Mecid New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2009
    Сообщения:
    27
    ясно)во твой код мне напомнил
    Код (Text):
    1. foo_beg(){//na etu funkciyu ne postavit brak}
    2. foo_end(){}
    3. int main(){
    4. int a; unsigned char *p; a=0;
    5. for(p=(unsigned char*)foo_beg;p<(unsigne char*)foo_end;p++) a+=*p;
    6. if(a!=MY_CRC) printf("gdb detect\");
    7. return 0;
    8. }
     
  4. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Нехорошо так делать, лучше нанести int 3h на стек и исполнить ее там.
     
  5. pikofarad

    pikofarad New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2008
    Сообщения:
    35
    при нормальном исполнении завершается с кодом 0
    под отладчиком - 0x29a ;)
     
  6. Mecid

    Mecid New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2009
    Сообщения:
    27
    не могу понять почему но твои файлы у меня на убунте не пашут :dntknw:
     
  7. pikofarad

    pikofarad New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2008
    Сообщения:
    35
    Mecid, у тебя платформа x32 или x64?
    покажи, плз, вывод strace + заодно uname -a
     
  8. Mecid

    Mecid New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2009
    Сообщения:
    27
    кстати почему этот код под отладчиком нормально пашет?
    Код (Text):
    1. #include <stdio.h>
    2. #include <sys/ptrace.h>
    3. #include <signal.h>
    4. int main(){
    5. pid_t pid; int status;
    6. switch(pid=fork()){
    7. case 0:
    8. ptrace(PTRACE_TRACEME);
    9. printf("sekret\n");
    10. exit(1);
    11. case -1:
    12. perror("fork");
    13. exit(1);
    14. default:
    15. if(ptrace(PTRACE_ATTACH,pid)){kill(pid,SIGKILL);exit(1);}
    16. while(waitpid(pid,&status,0)!=-1)
    17. ptrace(PTRACE_CONT,pid,0,0);exit(0);
    18. }
    19. return 0;
    20. }
     
  9. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Mecid
    Эта прога создает новый дочерний процесс. Я думаю, что чтобы она сработала, gdb должен отлаживать именно этот дочерний процесс, а не родителя.
    Поставь паузу после создания нового процесса, чтобы в gdb ты смог начать его отлаживать. Или поменяй процессы местами - пусть не отец отлаживает ребенка, а ребенок - отлаживает отца.