본문 바로가기

Wargame & CTF/picoCTF 2014

[Reverse Engineering] Basic Asm

Problem

We found this program, but we're having some trouble figuring it out. What's the value of %eax when the last instruction (the NOP) runs?

Hint

You may want to convert the assembly into some equivalent C code, which will be easier to read!

ㅁ 문제 정보

 문제 유형

 Reverse Engineering

 문제 타입

 ASM

 문제 난이도

 하


ㅁ 문제 상세분석


# This file is in AT&T syntax - see

http://www.imada.sdu.dk/Courses/DM18/Litteratur/IntelnATT.htm

# and http://en.wikipedia.org/wiki/X86_assembly_language#Syntax. Both gdb and objdump produce

# AT&T syntax by default.

MOV $119,%ebx

MOV $28557,%eax

MOV $8055,%ecx

CMP %eax,%ebx

JL L1

JMP L2

L1:

IMUL %eax,%ebx

ADD %eax,%ebx

MOV %ebx,%eax

SUB %ecx,%eax

JMP L3

L2:

IMUL %eax,%ebx

SUB %eax,%ebx

MOV %ebx,%eax

ADD %ecx,%eax

L3:

NOP

[그림 1] 문제 내용


문제 풀이 방법은 여러 가지 방법이 있지만 여기에서는 어셈블리 언어를 C언어 소스 코드로 작성해서 풀었다.

AT&T 문법을 익숙한 INTEL 문법으로 변경해서 분석을 진행했다. Att2Intl 도구를 사용하면 AT&T 문법을 INTEL 문법으로 변경할 수 있다.


[그림 2] Att2Intl 실행


MOV   ebx,    119

MOV   eax,    28557

MOV   ecx,    8055

CMP   ebx,    eax

JL      [L1]

JMP    [L2]

L1:     ; basic label

IMUL   ebx,    eax

ADD   ebx,    eax

MOV   eax,    ebx

SUB    eax,    ecx

JMP    [L3]

L2:     ; basic label

IMUL   ebx,    eax

SUB    ebx,    eax

MOV   eax,    ebx

ADD   eax,    ecx

L3:     ; basic label

NOP

[그림 3] INTEL 문법 


AT&T 문법을 INTEL 문법으로 변경하기 위해서 ATT2INTL 실행해서 문법을 변경한다. 1행 ~ 3행에서 값을 레지스터로 이동시키고  CMP ebx, eax를 진행하고 조건 분기를 진행한다. JL 조건문은 ebx가 작을 경우에 분기하는데 ebx 값에 119값이 들어가 있고 eax에는 28557 값이 들어가 있기 때문에 L1으로 점프한다. L1에서는 곱셈과 더하기를 진행하고 마지막에 ecx 값(8055)를 뺀다.


[그림 5] 문제 결과


어셈블리 언어 분석 결과를 C언어로 작성하고 실행하면 Flag 값을 알 수 있다.



'Wargame & CTF > picoCTF 2014' 카테고리의 다른 글

[Reverse Engineering] Function Address  (0) 2015.12.17
[Reverse Engineering] Cyborg Secrets  (0) 2015.12.15