본문으로 바로가기

ASM to C with IDA - 066 (strupr)

category Reversing/ASM to C 2018. 7. 19. 08:45

C300_066



C300_소스코드



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <string.h>
 
void main(void)
{
    char string[100];
 
    puts("문자열을 입력한 후 Enter키를 치세요 !");
    puts("아무 문자도 입력하지 않으면 프로그램은 종료됩니다 !");
 
    do
    {
        gets(string);
 
        if (strlen(string== 0break;
 
        strupr(string);
        puts(string);
 
    } while (1);
}
cs



IDA - Layout Graph




IDA - Text View




strupr: char *strupr(char *string)

strupr은 string 문자열을 대문자로 바꿔주는 함수입니다.



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
45
#include <stdio.h>
 
void main(void)
{
    char var_1;
    char var_8[7];
    int var_C;
    int var_10;
    char string[100];
 
    puts(Str);
    puts(byte_403020);
 
    do{
        eax = string;
        gets(eax);
    
        ecx = string;
        var_8 = ecx;
        edx = var_8;
        edx = edx + 1;
        var_C = edx;
 
        do{
            eax = var_8;
            cl = [eax];
            var_1 = [cl];
            var_8 = var_8 + 1;
        }while(var_1 != NULL);
 
        edx = var_8;
        edx = edx - var_8;
        var_10 = edx;        // var_10에 string의 길이 저장
 
        if(var_10 == NULL)
            break;
    
        eax = string;
        strupr(eax);
 
        ecx = string;
        puts(ecx);
    }while(1);
    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>
void main(void)
{
    char var_1;
    char var_8[7];
    int var_C;
    int var_10;
    char string[100];
 
    puts(Str);
    puts(byte_403020);
 
    do{
        gets(string);
    
        var_8 = string;
        var_C = string + 1;
        
        while(*string++ != NULL);
        
        var_10 = string - var_8;        // var_10에 string의 길이 저장
 
        if(var_10 == NULL)
            break;
    
        strupr(string);
        puts(string);
    }while(1);
    return 0;
}
cs










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

ASM to C with IDA - 068 (strrev)  (0) 2018.07.20
ASM to C with IDA - 067 (strlwr)  (0) 2018.07.19
ASM to C with IDA - 065 (strnset)  (0) 2018.07.19
ASM to C with IDA - 064 (strset)  (0) 2018.07.18
ASM to C with IDA - 063 (strpbrk)  (0) 2018.07.18