본문으로 바로가기

ASM to C with IDA - 029

category Reversing/ASM to C 2018. 7. 3. 13:37

C300_029



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 i = 5;
 
    switch (i)
    {
    case 1:
        printf("i는 1입니다. ");
        break;
    case 2:
        printf("i는 2입니다. ");
        break;
    default:
        printf("i는 %d입니다.", i);
        break;
    }
}
 
cs



IDA - Layout Graph




IDA - Text View




jz(je) : 0일때, 같을 때 jump 한다. 


if 충접으로 되어있는데 자세히 보면 switch 문과 거의 흡사하다.

따라서 보기 쉽게 switch문으로 바꾸어 의사코드를 작성했다.


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
#include <stdio.h>
 
main()
{
    int var_4;
    int i;
 
    i = 5;
    eax = i;
    
    var_4 = eax;
    if(var_4 == 1)
        printf(_Format);    
    else{
        if(var_4) == 2){                
            printf(aI);                
        }else{
            ecx = i;
            printf(aI_0, i);
        }
    }
 
    eax = 0;
 
}
cs



pseudo code - 최종 의사 코드



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
main()
{
    int var_4;
    int i;
 
    i = 5;
    switch(i)
    {
    case 1:
        printf(_Format);                
        break;
    case 2:
        printf(aI);
        break;
    default:
        printf(aI_0, i);
        break;
    }
    return 0;
}
cs


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

ASM to C with IDA - 031  (0) 2018.07.03
ASM to C with IDA - 030  (0) 2018.07.03
ASM to C with IDA - 028  (0) 2018.06.01
ASM to C with IDA - 027  (0) 2018.06.01
ASM to C with IDA - 026  (0) 2018.06.01