2024. 2. 26. 20:37ㆍInformation Security 정보보안/Reverse Engineering 리버스 엔지니어링
배울내용:
어셈블리 코드 분석
Whilte , IF 어셈블리 분석
assembly code 분석
레지스터
Register
어셈블리어 명령어
Reversing Engineering
리버싱 엔지니어링 기초
이전시간 : 실제 코드 어셈블리로 분석하기
https://sarimus.tistory.com/89
Reverse Engineering DAY_007 어셈블리 코드 분석, assembly code 분석, 레지스터, 레지스터 사칙연산, Registe
배울내용: 어셈블리 코드 분석 assembly code 분석 레지스터 레지스터 사칙연산 Register EAX, EDX, ECX, ESI 어셈블리어 명령어 Reversing Engineering 리버싱 엔지니어링 기초 이전시간 : Assembly 명령어 (레지스
sarimus.tistory.com
이번시간 :
실제코드 While 문 , IF 문 어셈블리로 분석하기
While 문
코드 어셈블리로 보기
위와같이 i 가 10 이 될때까지 1씩 더해주는데 1씩 증가한 값을 sum 이라는 변수에 더해준다
그러면 나오는 값은 55 가된다. 이걸 어셈블리로 한번보면 아래와 같다
그리고 <+22> 에 JMP 가 있는데
JMP는 그냥 뛰어넘는 것이고 JLE 는 조건에 맞으면 뛰어넘는것이다
그래서 <+22> 에 왔을때 <+34>로 뛰어넘고 JLE 를 조건을 본뒤에 부합하면 다시
<+24> 로 넘어간다 만약 조건에 충족하면 <+38> 을 뛰어넘는 <+40>으로 넘어가게된다.
아래는 실행됬을때 보이는 것을 테이블로 구현해봤다
0x113d는 메모리 할당을 해주는 것이다 그 할당된값안에 값이 들어간다
그러면 이제 0x114f 와 0x115f 사이에서 조건에 맞을때까지 계속 실행되고
그뒤에 넘어간뒤에 0x1161 로 넘어가게 된다
IF 문
어셈블리로 보기
이렇게 코드를 짜고 컴파일 시킨뒤에 gdc 로 열어서 intel 문법으로
열어보면 아래와 같다
<+8> 에 1E 가 이 있는데 이는 10진수로는 30 이되고
<+15> 에 30을 0xa 인(10)을 비교하는데 틀리다
그아래보면 JNE ( Jump if Not Equal) 가 있는데 같지않기떄문에
<+38> 로 간다 그리고 여기서도 30 과 0x14 (20) 을 비교하고 아니면
<+61>로 간다 그리고 여기에서 내려간뒤에 <+71>에서 어떤값을 출력하는것을알고있다 그값이 else 에 있는 100인걸 우리는 안다
그러면 이걸토대로 아래의 문제를 한번 분석해보자
이것을 보고 어떠한 코드 인지 한번 분석해보자
정답및 해설은 아래에 있다
파란색 부분이 + 된 부분이 출력되는부분이고
초록색이 % 된 부분이 출력되는 부분이고
갈색 부분이 위에 계산된값을 더해준 총합을 출력되는 부분이다
실행된 코드는 아래와 같다
이런코드가 실행이 됐던걸 알수있다
이제는 어느정도 어셈블리를 보는법을 익혔다
다음시간에는 OllyDBG로 실제로 한번 분석을 해볼것이다