본문으로 바로가기

ASM to C with IDA - 022

category Reversing/ASM to C 2018. 5. 30. 22:57

C300_022




C300_소스코드




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h> 
 
main()
{
    int x = 5;
    int y = 2;
 
    if (x > 0 && x < 10)
    {
        printf("0 > x < 10 \n");
    }
 
    if (x < 0 || y == 2)
    {
        printf("x가 0보다 작거나, y는 2입니다. \n");        
    }
 
    if (!(x>y))
    {
        printf("x가 y보다 크지 않습니다. \n");
    }
}
 
cs




IDA - Layout Graph






IDA - Text View





jnz(jump not zero) : 결과 값이 0이 아니거나, 같지 않을 때 점프 (ZF=0)


jle(zump less or equal) : 결과 값이 같거나 작을 때 점프 (ZF=1, or SF != OF) 


jge(jump greater or equal) : 결과 값이 같거나 클 때 점프 (ZF =1, or SF == OF)


jl(jump less) : 결과 값이 작을 때 점프 (ZF=1);


jg(jump greater) : 결과 값이 클 때 점프 (ZF=1);


IDA에서 나오는 조건을 보면(cmp), 사용자가 실제 소스에서 사용한 조건과 정확히 반대되는 조건으로 사용한다.

반대되는 조건이 나오기 때문에 해석할 때 역으로 생각하면 쉽다.



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
#include <stdio.h> 
 
main()
{
    int x;
    int y;
 
    x = 5;
    y = 2;
 
    if(x <= 0)
    else
        if(x >= 10)
        else
            printf(_Format);        
 
    if (x < 0 )
        printf(asc_403030);
    else
        if(y!=2)
        else
            printf(asc_403030);
 
    eax = x;
    if(eax > y)
    else
        printf(asc_403054);
eax = 0;
}
cs




pseudo code - 최종 의사 코드



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h> 
 
main()
{
    int x;
    int y;
 
    x = 5;
    y = 2;
 
      if(x > 0 && x < 10)
        printf(_Format);     
 
    if (x >= 0  || y ==2)            
        printf(asc_403030);
 
    if(!(x > y))
}
cs






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

ASM to C with IDA - 024  (0) 2018.05.31
ASM to C with IDA - 023  (0) 2018.05.31
ASM to C with IDA - 021  (0) 2018.05.30
ASM to C with IDA - 020  (0) 2018.05.30
ASM to C with IDA - 019  (0) 2018.05.29