Reversing Quick Note
재미있는 리버싱 관련 자료 몇 가지 봐둔 것들을 정리해 둠. (원래도 관심이 있었지만, 유튜브가 자꾸 추천해 줌 ㅎㅎ)
Reverse Engineering iOS App
https://www.youtube.com/watch?v=_i_v6pWqDQQ
- 단순 iOS 어플리케이션 리버싱 엔지니어링을 떠나서, 원격 디버깅 방법 + static 디스어셈블러 툴을 활용한 동적 디버깅 등 환경 구성 자체에 꽤 유용한 기법들이 많다.
- 사용하는 툴은 이것저것이 있으나, 크게 lldb(디버거) + hopper(디스어셈블러) + iproxy(iOS — Host 프록시 for lldb) + tcprelay(iOS 프록시, ssh 접속용 — lldb 띄워야 함) 정도가 있음. Diagram으로 그리면 (생략)
- ASLR 뚫는 법: (일반적으로는) 프로그램 가장 첫 번째 섹션을 Disassemble로 까서 __TEXT 섹션이 보인다? 그럼 거기가 ASLR offset 이다. 그걸 기준으로 계속 메모리 주소 환산해가면서 찾아가면 된다. 어렵지 않다. (귀찮을 뿐…)
- 여기서 디버깅 포인트를 찾는 방법은, Resource string을 까서 그 근방 코드를 step in 하면서 trial 하는 방식. 바로 콕 집어서 예시를 보여주는 것을 보니 이미 시연하기 전에 파악을 좀 해 둔듯.
- 레지스터에 들어있는 메모리 주소 값을 놓치지 않고 까보는 소소한 디테일도 배워야 할 점.
- (물론 최근의 아이폰 앱으로는 안 될듯 하다 — 탈옥을 해야 ssh 접속도 하고 할 수 있으니…)
Another Reverse Engineering iOS App
https://www.youtube.com/watch?v=R414lH8njRo
- 위와 비슷하다. 이번엔 툴이 LLDB + IDA로 좀 더 고급스러워졌을 뿐.
- 다만 활용 자체는 훨씬 간단하게 한다. Value를 메모리 검색으로 찾아서, 해당 주소에 watch HW breakpoint 걸고, 베이스 주소 구하고 (여기서는 Lldb의 다른 명령어 image lookup -a 를 활용하는 듯), IDA 에서 디스어셈블리 확인 후 어셈 조작(NOP), 끝.
- 또 하나 눈여겨 볼 것은 iOS 자체 디버깅 툴을 잘 활용하고 있다는 것. 여러모로 Cheat Engine을 떠오르게 한다.
Reversing Private API
https://www.youtube.com/watch?v=Fa1zlLEGPtw
- 역시 유서깊은 MITM/모니터링 공격 방식이다. 아무래도 모바일에서 직접 Wireshark 같은 걸 쓰기 힘드니까 주로 많이 쓰는 방식이긴 하다.
- 참고로 Wireshark 자체가 MITM을 지원하기는 한다. 참고: https://domdom.tistory.com/221
- 여기서는 AP를 만들어 MITM을 하는 대신 프록시를 사용해서 함.
- https 통신을 위해 인증서를 설치함. 재미있는 건 이를 위한 툴과 사이트가 아예 만들어져 있다는 것이다. http://mitm.it/
- TMI: 아마 정말 보안에 민감한 서버라면, 허가되지 않은 인증서는 차단하는 방식으로 보안을 강화할 수 있을 듯. 이러면 서버 단위에서 MITM이 막힐 것이다.
- 뭐,,, 이후는 하던대로, access token을 세션에 유지해 가면서 계속 리퀘스트 날리면 끝.
- 변조된 request을 날리는 방법으로는 curl 도 있지만, postman 이라는 좋은 물건이 요즘 힙하다 ㅎㅎ. 마침 내 회사에서도 테스트 용도로 자주 애용하고 있다.
- TMI: OAuth 2.0 같은 경우에는 리퀘스트 자체에 access_token 이 노출되지 않을 수 있다. 이럴 땐 세션 정보까지 뜯어봐야 함. 근데 어차피 request 다 뜯어볼 수 있는 상황에서는 무슨 의미가 있나 싶다.
TMI: 아예 맨바닥에서 시작하는 경우는 brute-force로 API를 뜯어오는 공격기법도 있나 보다. 그런데 일반적인 상황에서는 사용할 일이 없을 뿐더러 요즘은 비정상 접속 감지 시스템이 다 있어서 걸리기 딱 좋을 듯.
Reverse Engineering Windows application
https://www.youtube.com/watch?v=8XgnCT3U-k8
- 전형적인 Crackme 문제인데, obfuscation & debugger 방지 등을 곁들였다.
- 언제나 그렇듯, 어려운 부분은 대충 넘기고 중요한 Jmp 로직 관련 잘 살펴보면서 큰 흐름 찾는게 제일 중요하다. 어려운거랑 중요한거랑 구분을 잘 짓는게 중요함. 중간중간 변수명/함수명 이름 지어주는 것도 큰 도움 됨. (어지간한 디스어셈블러에는 해당 기능이 있음)
- 사용하는 툴은 Ollydbg(lldb도 비슷한 거 없나…) + IDA, windows 한정 최강조합!
- 그나마 난이도가 쉬운 게, symbol obfuscation도 안 되어 있고 기타 데이터 섹션도 해져(?)있지 않고 이래저래 덜 꼬은 편이다.
키젠은 안 만드네
(게임용) 오버레이 윈도우 만들기
https://www.youtube.com/watch?v=OhZBt4iX1Q8
별건 아니고 그냥 재밌어 보여서 들고 옴 ㅋ… 해킹이랑은 별반 관련 없다.
- 근데 서브스레드에서 DX 객체 만드는 게 되나…? 안되지 않나?
- 이거 말고 알파채널 렌더링 하는 건 여전히 잘 모르겠다. 예전에 미려함을 목적으로 관련 기술 쓰는 프로그램들 꽤 있었는데.
물론 다른 (단골) 공격기법으로 스택오버플로우나 이를 이용한 코드 인젝션 등이 있고, 하드웨어 레벨에서는 시그널 분석해서 리버싱 하는 기법도 있으나 (아이폰 인증 칩셋 흉내낼 때 활용된 기법)… 둘 다 딱히 내 입장에선 쓸모가 없어서 스킵… 하지만 전자의 경우 결국 위 기법을 응용한 것이다.
Reverse Engineering Basics
https://www.youtube.com/watch?v=a2EkORFcSZo
여기서부턴 조금 고급 테크닉들이 나온다. 영상이 긴데 약간 수면(?)용으로 딴짓하면서 들으면 그냥저냥 볼만하다. 한 가지 재미있는 점은 바이너리 엔트로피를 따면 해당 프로그램이 패킹된 건지 아닌지 바로 확인이 된다는 것. 언패킹을 해야 할지, 아니면 다른 트릭을 살펴봐야 할 지 판단하는 데 큰 도움이 될 듯.
Getting Started in Reverse Engineering
https://www.youtube.com/watch?v=1MotMBPX7tY
정말 좋은 강의다. 헥스코드부터 시작해서 레지스터, 바이너리, 등등 리버스 엔지니어링에 대한 기초 개념들을 싹다 가볍게 훑고 감. 근데 정말 가볍게만 훑고 가서 아예 기본이 없는 사람들에게는 도움이 그닥 되지 않을 것 같고, 게다가 바로 난이도가 다소 있는 Stack Overflow로 급발진해버리는 , 사실은 매운 난이도 아닐까 함.
저기까지 열면 관련 영상에도 꽤 재미있는 것들이 많이 나온다 ㅋ. 백신에 안 걸리는 바이러스 특징 설명해주는데 재밌네.TLS 로 디버거 attach 파훼하는 거라던가.
그나저나 새삼스럽지만 요즘은 정말 이런 자료들 보기가 좋아졌다. 예전에는 책이나 인터넷 뒤져야 겨우 나오는 자료였는데 … 😮