본문으로 바로가기

ASM to C with IDA - 065 (strnset)

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

C300_065



C300_소스코드



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>
#include <string.h>
 
void main(void)
{
    char string[100];
 
    puts("문자열을 입력한 후 Enter키를 치세요 !");
    puts("아무 문자도 입력하지 않으면 프로그램은 종료됩니다 !");
 
    do
    {
        gets(string);
 
        if (strlen(string== 0break;
 
        strnset(string'*'5);
        puts(string);
 
    } while (1);
}
 
cs




IDA - Layout Graph





IDA - Text View




strnset: char *strset(char *string, int c, size_t count);

strnset 함수는 string 문자열에서 count만큼의 수를 순서대로 c의 문자로 초기화 하는 것이다.



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(var10 == NULL
            break;
    
        eax = string;
        strnset(eax, '*'5);
        
        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
31
32
33
#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(var10 == NULL
            break;
 
        strnset(string'*'5);
        
        puts(string);
    }while(1);
    return 0;
}
 
cs





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

ASM to C with IDA - 067 (strlwr)  (0) 2018.07.19
ASM to C with IDA - 066 (strupr)  (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
ASM to C with IDA - 062 (strtok)  (0) 2018.07.18