본문으로 바로가기

ASM to C with IDA - 041

category Reversing/ASM to C 2018. 7. 8. 13:23

C300_041



C300_소스코드



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h> 
 
#define true    1
#define false    0
 
typedef int  bool;
 
typedef struct
{
    int kor;
    int eng;
    int math;
} SungJuk;
 
typedef union
{
    char ch;
    int  point;
} Variant;
 
main()
{
    bool bCondition;
    SungJuk SJ;
    Variant V;
 
    bCondition = true;
 
    if (bCondition == true)
    {
        printf("조건식은 true입니다.");
    }
 
    SJ.kor = 50;
    V.ch = 5;
}
 
cs




IDA - Layout Graph





IDA - Text View





모든 변수가 사용되지 않으면, 디스어셈블된 코드로만은 정확한 의사코드를 작성할 수 없다.

우선 SJ 변수가 12byte를 할당받아 이용하고 있다. SJ.kor와 12byte 자료형이 없다는것으로 미루어보아, 구조체임을 추측하였다.

V 또한 본 소스코드는 공용체로 사용하였지만, 정확히 이를 유추할 수 없었다.




pseudo code - 최종 의사코드



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h> 
 
struct sj
{
    int kor;
    int ...
    int ...
}
 
main()
{
 
    int bCondition;
    int V;
    struct sj Sj;
 
    bCondition = 1;
    
    if( bCondition == 1)
        printf(_Format);
 
    SJ.kor = 50;
    V = 5;
 
    return 0;
}
 
cs







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

ASM to C with IDA - 043  (0) 2018.07.08
ASM to C with IDA - 042  (0) 2018.07.08
ASM to C with IDA - 040  (0) 2018.07.06
ASM to C with IDA - 039  (2) 2018.07.06
ASM to C with IDA - 038  (0) 2018.07.06