ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • assem 분석 1
    공부/리버싱 2014. 5. 5. 18:09

    http://www.hackerschool.org/HS_Boards/data/Lib_system/binary1.txt

    요고 보면서 정리중

    Asm.pdf

    이건 기본적인 어셈이 정리되어있는문서

    +

    http://download.intel.com/design/processor/manuals/253665.pdf

    Intel® 64 and IA-32 Architectures Software Developer’s Manual V1 3장부터 보면 됩니다



    개인적으로 정리하는 글입니다.

    틀린부분이 있을 수 있습니다


    if문


    0x8048460 <main>: push %ebp // 스택 밑바닥 0x8048461 <main+1>: mov %esp,%ebp //현재 스택위치 표시 0x8048463 <main+3>: sub $0x8,%esp //스택 8byte확장 0x8048466 <main+6>: cmpl $0x1,0x8(%ebp) //1과 argc비교 0x804846a <main+10>: jg 0x8048478 <main+24> 1보타 argc가 클경우 jmp if(argc < 2) 0x804846c <main+12>: sub $0xc,%esp 0x804846f <main+15>: push $0x0 //스택에 0 push 0x8048471 <main+17>: call 0x8048348 <exit>//exit호출 0x8048476 <main+22>: mov %esi,%esi exit(0); 0x8048478 <main+24>: leave 0x8048479 <main+25>: ret //main 종료 0x804847a <main+26>: mov %esi,%esi


    #include<stdio.h>
    
    int main(int argc, char *argv)
    {
            if(argc < 2) 
    		exit(0);
    }



    0x8048460 <main>: push %ebp 0x8048461 <main+1>: mov %esp,%ebp 0x8048463 <main+3>: sub $0x8,%esp 0x8048466 <main+6>: cmpl $0x2,0x8(%ebp) //2와 argc비교 0x804846a <main+10>: jg 0x8048478 <main+24> //argc가 더 클경우 점프 if(argc <= 2 ) 0x804846c <main+12>: sub $0xc,%esp 0x804846f <main+15>: push $0x1 //1 push 0x8048471 <main+17>: call 0x8048348 <exit> // exit(1) (exit(0)과 다른점은 오류종료라는 점) 0x8048476 <main+22>: mov %esi,%esi 0x8048478 <main+24>: leave 0x8048479 <main+25>: ret //main의 끝 0x804847a <main+26>: mov %esi,%esi main(int argc, char *argv[]) { if(argc <= 2) exit(1); }


    0x8048490 <main>: push %ebp 0x8048491 <main+1>: mov %esp,%ebp 0x8048493 <main+3>: sub $0x8,%esp 0x8048496 <main+6>: cmpl $0x2,0x8(%ebp)//2와 argc비교 0x804849a <main+10>: jle 0x80484a8 <main+24> // 작거나 같을때 점프 // if(argc > 2) 0x804849c <main+12>: sub $0xc,%esp 0x804849f <main+15>: push $0x0 0x80484a1 <main+17>: call 0x804837c <exit>//종료 0x80484a6 <main+22>: mov %esi,%esi // exit(0); 0x80484a8 <main+24>: sub $0xc,%esp 0x80484ab <main+27>: push $0x8048528 // "Input Arg\n" 문자열 주소 push 0x80484b0 <main+32>: call 0x804835c <printf> //프린트 0x80484b5 <main+37>: add $0x10,%esp //스택 축소 // printf("Input Arg\n"); 0x80484b8 <main+40>: leave 0x80484b9 <main+41>: ret //정리 0x80484ba <main+42>: mov %esi,%esi (gdb) x/s 0x8048528 0x8048528 <_IO_stdin_used+4>: "Input Arg\n" main(int argc, char *argv[]) { if(argc > 2) exit(0); printf("Input Arg\n"); }



    0x8048460 <main>: push %ebp 0x8048461 <main+1>: mov %esp,%ebp 0x8048463 <main+3>: sub $0x8,%esp //int i 와 비교값을 위한 스택 확장 0x8048466 <main+6>: cmpl $0x1,0xfffffffc(%ebp)//비교 0x804846a <main+10>: jle 0x804847c <main+28>//1보다 작거나 같으면 점프 0x804846c <main+12>: sub $0xc,%esp 0x804846f <main+15>: push $0x80484e8 //문자열 push 0x8048474 <main+20>: call 0x804833c <printf> //문자역 출력 0x8048479 <main+25>: add $0x10,%esp //스택 정리 0x804847c <main+28>: leave 0x804847d <main+29>: ret //main정리 0x804847e <main+30>: mov %esi,%esi 0x80484e8 <_IO_stdin_used+4>: "I >=2\n" main() { int i; if(i >= 2) printf("I >=2\n"); }



    0x8048490 <main>: push %ebp 0x8048491 <main+1>: mov %esp,%ebp 0x8048493 <main+3>: sub $0x8,%esp //argc argv확장 0x8048496 <main+6>: cmpl $0x2,0x8(%ebp) //2와 argc비교 0x804849a <main+10>: jne 0x80484a8 <main+24> argc와 2가 같지 않을경우 jmp 0x804849c <main+12>: sub $0xc,%esp 0x804849f <main+15>: push $0x0 //스택에 0 push 0x80484a1 <main+17>: call 0x804837c <exit> // 종료 0x80484a6 <main+22>: mov %esi,%esi 0x80484a8 <main+24>: sub $0xc,%esp 0x80484ab <main+27>: push $0x8048528 //문자열 push 0x80484b0 <main+32>: call 0x804835c <printf> // 문자열 print 0x80484b5 <main+37>: add $0x10,%esp //스택정리 0x80484b8 <main+40>: leave 0x80484b9 <main+41>: ret//프로그램 종료 0x80484ba <main+42>: mov %esi,%esi main(int argc, char *argv[]) { if(argc == 2) exit(0); printf("Input Arg\n"); }



    '공부 > 리버싱' 카테고리의 다른 글

    assem 분석 2  (0) 2014.05.12
    리버싱문제 패스워드 숨기기  (0) 2014.05.06
    assem 분석 1  (1) 2014.05.05
    upx 언패킹 성공  (0) 2013.09.12
    펌 리버싱을 위한 어셈정리  (0) 2013.08.13
    crackme3-abexcm3  (0) 2013.08.06

    댓글 1

Designed by Tistory.