Reversing/ASM to C

ASM to C with IDA - 027

MarcoKhan 2018. 6. 1. 18:09

C300_027



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
#include <stdio.h> 
 
main()
{
    int i = 1;
    int j = 2;
    int k = 7;
 
    if (i == 1)
    {
        if (j == 2)
        {
            if (k == 3)
                printf("i=1, j=2, k=3입니다.");
            else if (k == 4)
                printf("i=1, j=2, k=4입니다.");
            else if (k == 5)
                printf("i=1, j=2, k=5입니다.");
            else
                printf("i=1, j=2, k=%d입니다.", k);            
        }
    }
}
 
cs



IDA - Layout Graph






IDA - Text View





jnz(jump not zero) : 두 값이 같지 않으면 점프한다. (ZF=0)

disassemble 하면 모든 조건이 반대로 나온다. 따라서 의사 코드를 작성할 때 뒤집어 생각하면 보다 쉽다.



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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <stdio.h> 
 
main()
{
    int k;
    int i;
    int j;
 
    i = 1;
    j = 2;
    k = 7;
 
    if(i != 1)
        eax = 0;
    else
        if(j != 2)
            eax = 0;
        else{
            if(k != 3){
                if(k != 4){
                    if (k != 5){
                        eax = k;
                        printf(aI1J2KD, eax);            
                        eax = 0;
                        }
                    else{
                        printf(aI1J2K5);
                        eax = 0;
                        }
                }
                else{
                    printf(aI1J2K4);
                    eax = 0;
                    }
            }
            else{
            printf(_Format);
            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
23
24
25
26
#include <stdio.h> 
 
main()
{
    int k;
    int i;
    int j;
 
    i = 1;
    j = 2;
    k = 7;
 
    if(i==1){
        if(j==2){
            if(k==3)
                printf(_Format);                // i=1, j=2, k=3
            else if(k==4)
                printf(aI1J2K4);                // i=1, j=2, k=4
            else if(k==5)
                printf(aI1J2K5);                // i=1, j=2, k=5
            else
                printf(aI1J2KD, k);                // i=1, j=2, k=k
        }
    }
}
 
cs