Reversing 6

[DIMICTF] keychecker (write - up)

DIMICTF qual keycheckerAnalysisint __cdecl main(int argc, const char **argv, const char **envp) { const char *v3; // rdi ​ if ( argc != 3 ) { printf("%s [mod] [text]\n", *argv, envp); exit(1); } if ( !strcmp(argv[1], "encode") ) { encode(argv[2]); } else if ( !strcmp(argv[1], "decode") ) { v3 = argv[2]; decode(); } return 0; }아주 간단한 프로그램. 인자로 encode를 넘겨주면 뒤의 string을 암호화해준다. decode는 구현안됨 __int64 ..

[Hardware] UART 통신과 물리적 연결

Let's study UART!UART 란?UART : Universal asynchronous receiver/transmitter(범용 비동기 송수신기)UART는 병렬형태로 들어온 데이터를 직렬형태로 전환하여 데이터를 전달하는 하드웨어이다.직렬(Serial) 통신 프로토콜이다.데이터 송신/수신 시 각각 하나의 LINE만 이용한다.하드웨어 통신 규약의 한 종류이다.프로토콜 구현이 매우 간단하다.우리에게는 시리얼 통신(Serial communication) 으로 더 잘 알려져있다.일단 UART 관련 프로그램인 putty,Xshell등을 구하기 쉬워서 접근이 간편하다는게 특징이다.또한, USB-to_Serial같은 장비들도 구하기 쉽다는게 특징이다.해커의 입장에서는 커널, OS의 각종 메시지나 디버그 메시..

Reversing/ETC 2019.09.29

[ARM] ARM asm & instruction / ARM exploitation

Let's study ARM exploitation!RegisterR0 ~ R12 : 범용 레지스터, 인자값 및 임시 계산소 등이 들어감x86의 eax,ebx,ecx... 등과 비슷한 역할을 함R13(SP) : Stack Pointerx86의 esp와 비슷한 역할을 함R14(LR) : Link Register, 함수 호출 전 LR에 리턴 주소를 넣어둠.x86에서는 call할때 함수 호출 전 리턴주소를 stack에다가 넣어두지만, ARM에서는 LR에 넣어두어 함수를 call할때 스택을 사용하지않는다.R15(PC) : 다음 실행할 코드의 주소를 저장한다.x86의 eip와 같은 역할 AssemblyB : Branch B명령어 뒤에 지정된 상수값에 해당하는 주소로 분기하는 명령이다.x86의 jmp와 매우 유사하..

Reversing/Assembly 2019.09.26

[Reversing] 32bit와 64bit의 차이 ( 함수호출규약, 레지스터 )

[ 1. 기본적인 차이 ]일단, 비트가 무슨 의미인지 알아보자.비트 ( bit )란, 2진수 0과 1을 포함할수있는 크기를 말한다.이러한 비트가 2^3 ( 8 )개가있으면 바이트 ( byte ) 이다.이러한 바이트가 2^10 ( 1024 )개 있으면 킬로바이트 ( kbyte ) 이다.이러한 킬로바이트가 2^10 ( 1024 )개 있으면 메가바이트 ( mbyte ) 이다.이러한 메가바이트가 2^10 ( 1024 )개 있으면 기가바이트 ( gbyte ) 이다.:: 32 bit 운영체제는, 이러한 비트를 2^32 만큼 사용하는 운영체제이고, 64 bit는 이러한 비트는 2^64 만큼 사용한다.32 bit 운영체제는 메모리를 0부터 4,294,967,296 만큼 저장할수있고,64 bit 운영체제는 메모리를 0부..

Reversing/ETC 2019.04.15

[Reversing] 메모리구조 - Stack / Heap ( 스택프레임 / 함수 프롤로그, 에필로그 / 힙 개념정리 )

ETC카테고리에 있던 포스팅이였는데 그냥 reversing쪽으로 옮긴다. 리버싱 요소이기도 하다고 생각한다. [1] 메모리 구조 - Stack위 그림은 메모리의 구조를 이해하는데 많은 도움이 된다. 우리는 이중에서 Stack 에 대해서 자세히 알아보도록 할것이다.일단 스택은 LIFO ( Last in First out - 후입선출 ) 구조로 되어있다. 이는 스택이 자라나서 커널부분을 건드리지못하게 하려는 의도로 알고있다. =====스택=====높은 메모리주소 --RET----SFP--:

Reversing/ETC 2019.04.06

[x86] 주요 어셈블리 명령어의 종류와 레지스터 ,( EBP, ESP, EIP, EAX ... )와 SFP

[1] 어셈블리어 ( Assembly ) 는 무엇일까? & 배우는 목적?어셈블리어는 기계어와 함께 유일한 저급 언어 ( Low level ) 언어이다.기계어에 1대1 대응이 되는언어이며, 기계어 바로 전 단계의 언어이다.여기서 저급 언어란, 컴퓨터와 더 가까운 언어라고 생각하면 되고, C언어도 포인터를 통하여 메모리에 접근하기때문에 저급언어적 특징을 가지고잇는 고급 ( High level ) 언어라고 생각하면 된다.여기서 여러분들은 컴퓨터와 더 가까운 언어인 어셈블리어를 왜 배워야할까? 라고 생각할수도있다.물론 나도그랬다.그런데 시스템해킹이라던가, 리버스엔지니어링, 임베이드 프로그래밍 등등 여러가지 분야에서 어셈블리가 필수적이였다는것을 알게되었다.시스템해킹을 공부하다보니 간단한수준의 어셈블리 명령어와 레..

Reversing/Assembly 2019.04.06