RTL(3)
-
RTL_Core 풀이
안내 문자열을 출력해주고, gets() 함수로 s를 입력받습니다. 그리고 if문으로 가면 check_passcode() 함수에 s를 인자 값으로 넣은 리턴 값이 hashcode와 같냐는 조건이 보입니다. hashcode는 이따가 주소 값을 좀 찾아보도록 하겠습니다. 그럼 이제 check_passcode() 함수를 분석해보겠습니다. v2라는 int형 변수를 선언해서 0으로 초기화해줍니다. 그리고 0~5까지 for문을 돌려서 a1(main() 함수에서의 s)의 인자 값을 4byte씩 증가시키며 v2에 더해줍니다. 그리고 누적된 v2를 리턴합니다. 이제 hashcode의 주소 값을 확인해보겠습니다. 0C0D9B0A7(10진수로 3235492007) s에는 저 주소를 넣어주고 뒷부분을 0으로 채우면 될 것 같습..
2021.07.18 -
RTL_World 풀이
int __cdecl main(int argc, const char **argv, const char **envp) { int result; // eax int v4; // [esp+10h] [ebp-90h] char buf; // [esp+14h] [ebp-8Ch] void *v6; // [esp+94h] [ebp-Ch] void *handle; // [esp+98h] [ebp-8h] void *s1; // [esp+9Ch] [ebp-4h] setvbuf(stdout, 0, 2, 0); handle = dlopen("/lib/i386-linux-gnu/libc.so.6", 1); v6 = dlsym(handle, "system"); dlclose(handle); for ( s1 = v6; memcmp(..
2021.07.17 -
PLT와 GOT
- PLT란? PLT는 *Procedure Linkage Table의 약자입니다. 파일 내부가 아닌 다른 외부 *라이브러리의 함수를 호출할 때 연결을 해주는 테이블입니다. * 리턴 값이 없는 함수 * 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임 이렇게 정의만 말하면 조금 어렵게 느껴질 수도 있습니다. 추가적인 설명과 함께 예시를 들어보겠습니다. 우선 PLT가 필요한 상황과 필요하지 않은 상황이 있습니다. Dynamic Link를 할 때는 PLT가 필요하고, Static Link를 할 때는 PLT가 필요하지 않습니다. 그 이유는 무엇일까요? Static Link는 Link 단계에서 라이브러리를 바이너리에 포함시킵니다. 그 말인 즉슨, 별도의 외부 파일이나 라이브러리가 없어도 실행..
2021.07.17