C300_064
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; strset(string, string[0]); puts(string); } while (1); } | cs |
IDA - Layout Graph
IDA - Text View
strset 함수
인자로 operand1, operand2를 갖는다.
operand1의 문자열을 모두 oeprand2로 치환한다.
내부적으로 oeprand1의 문자열의 길이를 구하고 operand1의 각 문자에 순서대로 접근하여 operand2로 수정한다.
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include <stdio.h> void main(void) { char var_1; char var_2; char var_8[6]; int var_C; int var_10; int var_14; int var_18; char string[100]; puts(Str); puts(byte_403020); eax = string; gets(eax); ecx = string; var_8 = ecx; edx = var_8; edx = edx + 1; var_10 = 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_10; // string의 문자열 길이 var_14 = edx; if(edx != 0){ eax = string; var_C = eax; ecx = var_C; var_18 = ecx; edx = 1; eax = edx * 0; ecx = string; var_2 = cl; while(ecx != 0){ edx = var_C; if (edx != 0) eax = var_C; cl = var_2; [eax] = cl; edx = edx + 1; var_C = edx; else eax = string; puts(eax); ecx = 1; } }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 34 35 36 37 38 39 40 41 | #include <stdio.h> void main(void) { char var_1; char var_2; char var_8[6]; int var_C; int var_10; int var_14; int var_18; char string[100]; puts(Str); puts(byte_403020); do{ gets(string); var_8 = string; var_10 = var_8 + 1; while(*string++ != NULL) var_14 = string - var_10; // var_14는 string의 문자열 길이 if(var_14 != NULL){ var_18 = var_C = string; var_2 = *string; while(*var_C++ != 0) var_C = var_2; puts(string); }else break; }while(1) return 0; } | cs |
'Reversing > ASM to C' 카테고리의 다른 글
ASM to C with IDA - 066 (strupr) (0) | 2018.07.19 |
---|---|
ASM to C with IDA - 065 (strnset) (0) | 2018.07.19 |
ASM to C with IDA - 063 (strpbrk) (0) | 2018.07.18 |
ASM to C with IDA - 062 (strtok) (0) | 2018.07.18 |
ASM to C with IDA - 061 (strspn) (0) | 2018.07.17 |