Tuesday, December 25, 2018

어셈블리어와 그 의미

Immunity Debugger를 이용한 

Debugging & Reversing


간단한 소스코드를 이용하여 디버깅과 리버싱을 하며 어셈블리어 이해

  • Source_1

[ C++ 소스코드 ]
char : %s : 문자
int : %d : 정수


  • Asm

[ 참고 ]
보안검사 ; 
기본적으로 제공되는 보안검사를 안해서 
해석할 때 이해도가 높아짐







[ SUB A, B (A=A-B) ]

  • ESP : Stack Frame의 최상단(=Stack Pointer), PUSH<->POP
  • POP A : Stack의 Top에서 꺼내 A에 저장
  • EBP : Stack Frame의 최하단(=Base Pointer), 함수 호출할 때만 변경됨
  • EAX : 누산기, 임시결과저장
  • EDX : 32bit CPU register (=DX+(DH+DL))->쪼개어 쓸 수 있음
  • DX : 16bit CPU register
  • RDX : 64bit CPU register


[ LEA  Load Effective Address ]
5를 3만큼 2에 그냥 넣음


[ PUSH-PUSH-CALL ]
=scanf(=printf)

[ MOV EAX, DWORD PTR SS ] [EBP-C] 
5를 3만큼 찾아 읽어서 2에 옮김


[ 함수프롤로그 ]
(=Stack Frame 초기화)
; 함수가 사용할 스택프레임을 지정하는 작업


[ 함수에필로그 ]
(=Stack Frame 정리)
; 함수가 사용할 스택프레임을 정리하는 작업


[ DWORD PTR SS:[EBP-4] ]
SS:[EBP-4]에서 DWORD만큼 이동


  • BYTE : 1byte CS: CODE SEGMENT []->주소
  • WORD : 2byte SS: stack segment
  • DWORD : 3byte DS: data segment
  • SWORD : 4byte
  • BYTE MACHINE : 메모리에는 1바이트마다 주소가 배정됨
  • LITTLE ENDIAN : 높은 주소에서 낮은 주소를 읽는다.
    • (오른쪽에서 왼쪽으로 6261626F=>6F626162)

  • 지역변수 : 함수의 내부에 선언, 함수 내부에서만 접근이 가능, STACK에 할당(함수가 끝나면 변수도 사라짐)
  • 전역변수 : 함수의 외부에 선언, 모든 함수에서 접근이 가능, DATA에 할당(함수가 끝나도 저장되어있음)
  • stack에 필요없어진 정보는 지워지지않고 후에 덮어서 사용-> 정보가 남아있어서 hack가능(Heart bleed)-> 메모리에 hack 흔적이 남아있어서 분석


[ JGE SHORT Prjt_Hel.0040106A ]

  • 분기(Branch=jump)

  1. 무조건 분기 : JMP주소 
  2. 조건분기 : Jxx주소, Jx주소

  • JGE A, B : (A>=B) Jump ok (Jump if Greater than or Equal)
  • JL : (Jump if less than) ,<
  • JG : >
  • JLE : <=
  • CMP(Compare)==if, while (A-B) : 빼고 앞에 결과값저장 안함. 빼기만


[ EFLAGS Register (32bit) ]
0과 1(올라감) (32개의 깃발)

  • CF(Carry Flag) : 음수가되면 1, 나머지는 0
  • ZF(Zero Flag) : 값이 0이면 올라감(1이됨)
  • SF(Sign Flag)
  • CPU에 연산결과를 보고 결과에 따라 Flag가 바뀜
    • ex) 2-3=-1 CF=1,ZF=0 // 2-2=0 CF=0,ZF=1 // 3-2=1 CF=0,ZF=0




  • Source_2

 
[ if문을 이용하여 18세 초과의 경우 allow ]


  • 디버깅


[ 로직을 바꿈 ]



[ 결과값을 바꿈 ]


2018-11-27

No comments:

Post a Comment

List

MobSF

MobSF는 오픈소스 모바일 앱 자동 보안 진단 프레임워크로 자동 분석 시스템 구축할 때 사용한다. 정정 및 동적 분석이 가능하며, Android, iOS, Windows에 대해 침투 테스트, 멀웨어 분석 및 보안 평가를 할 수 있다. 참고자료 필...