본문으로 바로가기

ASM to C with IDA - 004

category Reversing/ASM to C 2018. 5. 25. 08:43

C300_004



C300_소스코드



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h> 
 
main()
{
    int x;
    int y;
 
    x = 10;
 
    y = x - 5;
 
    if (x > y)
    {
        printf("x의 값이 y보다 큽니다.");
    }
    else
    {
        printf("x의 값이 y보다 작습니다.");
    }
}
cs



IDA - Layout Graph





IDA - Tex View




IDA의 Layout Graph는 Graph 처럼 소스가 어느 방향으로 흘러가는지 보여준다.

원본 소스에는 if라는 분기문이 있는데, if 분기문을 Layout Graph에서 두가지 길로 보여준다.

초록선은 if가 True일 때 실행되는 코드이고 빨간선은 if가 False일 때 실행되는 코드이다.


cmp는 내부적으로 빼는 작업을 하여 zf를 설정해준다.

두 operand를 빼 0이면 zf=1가 설정되고 0이 아니면 zf=0으로 설정된다.


jle(jump less or equals) : 첫 번째 파라미터가 두번째 파라미터보다 작거나 같으면 jump한다.


IDA에서 _Format, asc_403038의 string을 알기위해 앞서 설명한것과 같이 찾아가보면 해당 문자열을 찾을 수 있다.


위 정보를 가지고 아래와 같이 의사코드를 작성할 수 있다.


pseudo code - 의사코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
main()
{
    x = 10;
    eax = x;
    eax = eax - 5;
 
    y = eax
    ecx = x
 
    if(ecx <= y)
        printf(asc_40308);
    else
        printf(_Format);
 
    eax = 0;
}
cs



pseudo code - 최종의사코드


1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
main()
{
    x = 10;
    y = 5;
 
    if( x <= y)
        printf("x의 값이 y의 값보다 작다");
    else
        printf("x의 값이 y의 값보다 작");
}
cs



'Reversing > ASM to C' 카테고리의 다른 글

ASM to C with IDA - 006  (0) 2018.05.25
ASM to C with IDA - 005  (0) 2018.05.25
ASM to C with IDA - 003  (0) 2018.05.24
ASM to C with IDA - 002  (0) 2018.05.24
ASM to C with IDA - 001  (0) 2018.05.24