본문 바로가기

Reverse Engineering

7. for 리버싱 for문이 포함된 어셈블리어 코드

7. for 리버싱 for문이 포함된 어셈블리어 코드

 

  

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

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

 

 

 

 

 

#include <stdio.h>


 

int main()

{

int lv;

for (lv=0; lv<2; lv++)

printf("% ", lv);

return 0;


}

 

  01241410                        CALL ConsoleA 01241136           

  01241421                        JMP SHORT 012413FA

  01241423                        XOR EAX, EAX 



[발췌-수정]

012413EE 주소에서 지역 변수인 lv([EBP-8]에 먼저 0을 할당한다. 01241400 주소에서 CMP 명령어로 2와 먼저 

비교해 01241404 주소의 JGE(jump if greater or equal) 명령어에 의해 [EBP-8] 에 할당된 변수가 2보다 크거나 같으면

반복문을 빠져 나간다.

JGE 명령어에 의해 점푸하지 않은 경우 아래로 내려와 01241421 주소의 JMP 명령어에 의해 반복문을 실행하게 된다.

그리고 012413FA 주소에서 [EBP-8]에 1을 더해준다.


for문은 초기화 (Lv=0)를 먼저하고, 조건문 (lv<2)을 검사한다. 그리고 for 문 안의 코드를 실행시키고 

연산(lv++)을 하고 다시 조건문 검사를 한다. 이론으로만 알고 있던 내용을 어셈블리어로 보면 명확해진다.