본문 바로가기

Reverse Engineering

4. if 리버싱 (if문이 포함된 어셈블리어 코드)

4. if 리버싱 (if문이 포함된 어셈블리어 코드)

 

 

  

 본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지

 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다.

 

 

 

 

#include <stdio.h>


int main()

{

int lv = 2;

if (lv > 0)

printf("%x ", lv);

return 0;

}



if문이 포함된 어셈블리어 코드 


MOV DWORD PTR SS:[EBP-8],2

CMP DWORD PTR SS:[EBP-8],0

JLE SHORT 01141416

 

[발췌-수정] 

011413EE 주소에서 지역 변수인 lv([EBP-8])에 2를 할당하고, 011413F5 주소에서 CMP 명령어로 상수 0과 비교한다.

CMP 명령어는 2개의 오퍼랜드를 가지며 비교한 결과값을 EFLAGS 레지스터의 사인 플래그(sign Flag)에 저장한다.

JLE(Jump if less than or equal) 명령어는 바로 앞의 명령어인 CMP 명령어가 설정한 EFLAGS 레지스터의 값,

정확히는 사인 플래그를 보고 점프 여부를 결정한다.

 

2는 0보다 크기 때문에 작거나 같으면 점프하는 JLE 명령어는 실행되지 않는다.

따라서 01141416  XOR EAX, EAX 주소의 printf 함수를 실행하게 된다.