본문으로 바로가기

ASM to C with IDA - 016

category Reversing/ASM to C 2018. 5. 28. 10:55

C300_016



C300_소스코드



1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h> 
 
#define KOREA    "대한민국"
#define BOOK    "This is a book."
 
const char* SOCCOR = "나는 축구를 좋아합니다.";
 
main()
{
    printf("문자열형 상수  KOREA의 값 : %s \n", KOREA);
    printf("문자열형 상수   BOOK의 값 : %s \n", BOOK);
    printf("문자열형 상수 SOCCOR의 값 : %s \n", SOCCOR);    
}
 
cs



IDA - Layout Graph





IDA - Text View




#define은 바로 offset이 push 된다.

하지만 pointer는 레지스터로 한번 옮기고 push된다.



실제로 _SOCCOR는 offset unk_403020을 가르키고 있고, unk_403020에는 문자열이 들어가 있다. 



pseudo code - 의사코드



1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h> 
 
main()
{
    printf(_Format, unk_403038);
 
    printf(byte_403078, aThisIsABook);        
 
    eax = _SOCCOR;
 
    printf(byte_40309C, eax);
 
    eax = 0;
}
cs



pseudo code - 최종 의사 코드



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h> 
 
#define temp1 = "대한민국";
#define temp2 = "This is a Book";
 
char *temp = "나는 축구를 좋아합니다.";
 
main()
{
    printf(_Format, temp1);
 
    printf(byte_403078, aThisIsABook);            
 
    printf(byte_40309C, temp);
}
cs


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

ASM to C with IDA - 018  (0) 2018.05.29
ASM to C with IDA - 017  (0) 2018.05.29
ASM to C with IDA - 015  (0) 2018.05.28
ASM to C with IDA - 014(??)  (0) 2018.05.28
ASM to C with IDA - 013  (0) 2018.05.27