본문으로 바로가기

ASM to C with IDA - 068 (strrev)

category Reversing/ASM to C 2018. 7. 20. 09:17

C300_068



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== 0 ) break;
 
        strrev( string );
        puts( string );
 
    } while1 );
}
 
cs



IDA - Layout Graph






IDA - Text View





strrev함수: char *strrev(char *string)

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
#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_C;
        var_10 = edx;            //var_10에 string의 길이가 저장됨.    
 
        if(var_10 == 0break;
    
        eax = string;
        strrev(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
31
#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(*var_8++ != NULL);
 
        var_10 = var_8 - var_C;            //var_10에 string의 길이가 저장됨.    
 
        if(var_10 == 0break;
    
        strrev(string);
 
        puts(string);
    }while(1)
    return 0;
}
cs








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

ASM to C with IDA - 070  (0) 2018.07.20
ASM to C with IDA - 069 (strdup, strcpy)  (0) 2018.07.20
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 - 065 (strnset)  (0) 2018.07.19