본문으로 바로가기

ASM to C with IDA - 021

category Reversing/ASM to C 2018. 5. 30. 11:31

C300_021



C300_소스코드



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h> 
 
main()
{
    int x = 1;
    int y = 2;
    int z = 3;
 
    if (x == y) printf("x는 y와 같습니다. \n");
    if (x != y) printf("x는 y와 같지 않습니다. \n");
    if (x > y) printf("x는 y보다 큽니다. \n");
    if (x < y) printf("x는 y보다 작습니다. \n");
    if (y >= z) printf("y는 z보다 크거나 같습니다. \n");
    if (y <= z) printf("y는 z보다 작거나 같습니다. \n");        
}
 
cs



IDA - Layout Graph





IDA - Text View





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


jz(jump zero) : 결과 값이 0이거나, 같을 때 점프 (ZF=1)


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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdio.h> 
 
main()
{
    int x;
    int y;
    int z;
    
    x = 1;
    y = 2;
    z = 3;
 
    eax = x;
    if(eax != y)
    else
        printf(_Format);
    
    ecx = x
    if(ecx == y)
    else
        printf(asc_403034);
 
    edx = x;
    if(edx <= y)
    else
        printf(asc_403050);
 
    eax = x;
    if(eax >= y)
    else
        printf(asc_403064);
 
    ecx = y;
    if(ecx < z)
    else
        printf(aY);
 
    edx = y;
    if(edx > z);
    else
        printf(aY_0);
 
    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
27
28
29
30
#include <stdio.h> 
 
main()
{
    int x;
    int y;
    int z;
    
    x = 1;
    y = 2;
    z = 3;
 
    if(x == y)
        printf(_Format);
    
    if(x != y)
        printf(asc_403034);
 
    if(x > y)
        printf(asc_403050);
 
    if(x < y)
        printf(asc_403064);
 
    if(y >= z)
        printf(aY);
 
    if(y <= z);
        printf(aY_0);
}
cs


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

ASM to C with IDA - 023  (0) 2018.05.31
ASM to C with IDA - 022  (0) 2018.05.30
ASM to C with IDA - 020  (0) 2018.05.30
ASM to C with IDA - 019  (0) 2018.05.29
ASM to C with IDA - 018  (0) 2018.05.29