[C++ Korea] Effective Modern C++ Study item 24-26Seok-joon Yun
[C++ Korea] Effective Modern C++ Study item 24-26
Item 24: Distinguish universal references from rvalue references. +석정로
Item 25 : Use std::move on rvalue references,
std::forward on universal references. +서승덕
Item 26 : Avoid overloading on universal references. +윤석준
모던 C++의 시초인 C++11은 C++ 코드 전반에 많은 변화를 가져왔습니다. 그리고 최근 C++20의 표준위원회 회의가 마무리되었습니다. 내년에 C++20이 도입되면 C++11이 처음 도입되었을 때와 비슷한 규모, 또는 그 이상의 변화가 있을 것이라고 예상하고 있습니다. C++20에는 Concepts, Contract, Ranges, Coroutine, Module 등 굵직한 기능 외에도 많은 기능들이 추가될 예정입니다. 이번 세션에서는 C++20에 추가될 주요 기능들을 살펴보고자 합니다.
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기Chris Ohk
기존에 작성해 놓은 C++ 코드에 모던 C++를 적용하기는 쉽지 않습니다. 막상 개선하려고 마음먹었다고 해도, 어디서부터 바꿔야 할 지 막막하기만 합니다. 이 세션에서는 기존 C++ 코드에서 모던 C++를 적용해 프로그램의 구조와 성능을 개선하는 방법에 대해서 설명합니다. 그리고 기존 C++ 코드에 모던 C++를 적용할 때 주의해야 될 점에 대해서도 살펴봅니다.
[C++ Korea] Effective Modern C++ Study item 24-26Seok-joon Yun
[C++ Korea] Effective Modern C++ Study item 24-26
Item 24: Distinguish universal references from rvalue references. +석정로
Item 25 : Use std::move on rvalue references,
std::forward on universal references. +서승덕
Item 26 : Avoid overloading on universal references. +윤석준
모던 C++의 시초인 C++11은 C++ 코드 전반에 많은 변화를 가져왔습니다. 그리고 최근 C++20의 표준위원회 회의가 마무리되었습니다. 내년에 C++20이 도입되면 C++11이 처음 도입되었을 때와 비슷한 규모, 또는 그 이상의 변화가 있을 것이라고 예상하고 있습니다. C++20에는 Concepts, Contract, Ranges, Coroutine, Module 등 굵직한 기능 외에도 많은 기능들이 추가될 예정입니다. 이번 세션에서는 C++20에 추가될 주요 기능들을 살펴보고자 합니다.
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기Chris Ohk
기존에 작성해 놓은 C++ 코드에 모던 C++를 적용하기는 쉽지 않습니다. 막상 개선하려고 마음먹었다고 해도, 어디서부터 바꿔야 할 지 막막하기만 합니다. 이 세션에서는 기존 C++ 코드에서 모던 C++를 적용해 프로그램의 구조와 성능을 개선하는 방법에 대해서 설명합니다. 그리고 기존 C++ 코드에 모던 C++를 적용할 때 주의해야 될 점에 대해서도 살펴봅니다.
1. BSides Delhi CTF 2018 WriteUp
avap (Reversing 75points)
by 이 세 한 (Alchemic)
2. 2
BSides Delhi CTF 2018 WriteUp [avap (Reversing 75points)]
다음과 같이 문제가 주어집니다.
CTF에 참여하는 모든 분들을 위한 쉬운 문제라고 합니다.
3. 3
파일을 살펴보면 다음과 같이 ELF x64 바이너리 파일인 것을 확인할 수 있습니다.
이는 리눅스에서 실행 가능한 바이너리를 의미하며, 64bit 환경에서 동작하는 것을
의미합니다.
BSides Delhi CTF 2018 WriteUp [avap (Reversing 75points)]
4. 4
[IDA Pro]를 이용하여 바이너리를
살펴보면, 다음과 같은 main 함수를
확인할 수 있습니다.
0x4006F5 부터 0x400751 까지
특정한 바이트가 입력되어 있고,
사용자로부터 키보드 입력을 받아서
두 문자열을 비교하는 순으로 진행이
되는 것을 확인할 수 있습니다.
특정 바이트
문자열 키보드 입력
문자열 비교
BSides Delhi CTF 2018 WriteUp [avap (Reversing 75points)]
5. 5
BSides Delhi CTF 2018 WriteUp [avap (Reversing 75points)]
특정 바이트들을 ASCII 코드 테이블을 참조하여 문자로 바꾸면 다음과 같습니다.
rbp+var_40 = 0x61 => a
rbp+var_3F = 0x6B => k
rbp+var_3E = 0x66 => f
rbp+var_3D = 0x60 => `
rbp+var_3C = 0x7C => |
rbp+var_3B = 0x33 => 3
…
음... flag 라고 생각하기 힘든 문자들입니다.
main 함수의 마지막 부분을 보면 항상 깊이 파보라는(?) 말이 있으니...
더 분석을 진행하도록 하겠습니다.
!!!!!
6. 6
BSides Delhi CTF 2018 WriteUp [avap (Reversing 75points)]
[_start] 부분을 확인해보도록 하겠습니다.
0x40056D 을 확인하게되면 rdi 값에 [main] 함수의 주소값이 들어가는 것이 아니라, [check]
함수의 주소값이 들어가는 것을 확인할 수 있습니다.
즉, 프로그램이 시작되면 [main] 함수가 실행되는 것이 아니라 [check] 함수가 실행되어지는
것입니다.
main으로 실행되는 함수 => check
8. [check] 함수의 C 스타일 의사코드를 확인해보도록 하겠습니다.
변수 v4의 값을 계산할 수 있는 식이 보입니다.
조건식이 {v4 * (v4 – 14) == -49 && v4 <= 24 && v4} 이므로, 간단히 보면 변수 v4의 값은
24보다 작거나 같고, [v4 * (v4-14) = -49] 라는 식을 만족하는 값이면 되는 것입니다.
결국 간단한 수학문제이므로, 변수 v4의 값은 ‘7’ 이라는 것을 쉽게 찾을 수 있습니다.
또한, 변수 v4의 값을 변수 key값으로 주는 것을 확인할 수 있습니다.
8
BSides Delhi CTF 2018 WriteUp [avap (Reversing 75points)]
9. 9
[check] 함수를 확인했으므로, 다시
[main] 함수에서 어떤 일들이 발생
하는지를 확인하도록 하겠습니다.
main 함수의 마지막 부분을 보면
키보드 입력이 끝난 후, [strcmp_]
함수를 호출하는 것을 확인할 수
있습니다.
특정 바이트
문자열 키보드 입력
문자열 비교
BSides Delhi CTF 2018 WriteUp [avap (Reversing 75points)]
10. 10
BSides Delhi CTF 2018 WriteUp [avap (Reversing 75points)]
[strcmp_ 함수의 일부]
[strcmp_ 함수의 의사코드]
11. 11
BSides Delhi CTF 2018 WriteUp [avap (Reversing 75points)]
[strcmp_] 함수의 C 스타일 의사코드를 확인해보도록 하겠습니다.
Junk 코드가 먼저 보이고, 그 다음에 이전 main 함수에서 이미 입력되어 있던 특정 바이트들에
‘xor key’ 연산을 수행한 뒤, 시스템 함수인 [strncmp] 함수를 호출하여 새롭게 연산된
특정 바이트들(문자열)과 사용자로부터 입력받은 문자열을 비교하는 것을 확인할 수 있습니다.
변수 key의 값은 이전 [check] 함수에서 ‘7’이라는 것을 알 수 있고,
이를 토대로 특정 바이트들을 연산하는 간단한 프로그램을 작성해보도록 하겠습니다.
Junk Code
Main 함수에 입력되어 있던
특정 바이트에 [XOR 7] 연산 진행
시스템 함수인 [strncmp] 함수를 호출하여 문자열 비교
12. 12
BSides Delhi CTF 2018 WriteUp [avap (Reversing 75points)]
마침내 flag 값을 확인할 수 있습니다!
The flag is... flag{4s_e45y_4s_1t_g3ts}