본문 바로가기

reversing/reversing

(33)
C++ 리버싱 연습 [2] -이론 C++ 분석 정리 x86에서 c++ 분석과 관련된 내용을 정리 해놓는다. 사전 지식thiscall 호출 규약 ECX에 인스턴스 주소를 기억한 후 함수를 호출하는 방법 바인딩(bindding) 정적바인딩 : 컴파일 시점에 호출될 함수를 결정하는 함수 동적바인딩 : 함수 호출이 실제로 일어나는 시점에 함수를 결정하는 방법 가상함수(virtual function) 상속을 받은 클래스에서 재정의가 가능한 멤버 함수 가상함수는 동적 바인딩을 사용하므로, 가상 함수 테이블에서 실제 함수 주소를 찾아야함 분석방법1. 클래스 찾기1-1. ecx를 이용한 함수 호출 등 발생 여부를 확인한다.1-2. 생성자와 소멸자지역 객체지역 변수로서 객체를 선언하고 사용하는 것을 말한다.생성자 - 지역 객체가 선언하는 시점에서 호출소..
SMT - z3[sudoku] 보호되어 있는 글입니다.
inline function hooking 이것 저것 돌아다니다 보니 inline function hooking 이라는 기법이 있었다. 기본적인 후킹은 원래의 흐름을 변경시켜 원하는 행위를 하게하고 다시 돌려놓는(?) 기법을 말한다. 뭐.. 많이 사용하는 ssdt, iat 후킹 같은 기법들을 보면 기본적으로 함수 테이블이 존재 한다.그리고 그 함수 테이블의 하나의 entry, index를 수정하여서 원하는 흐름으로 동작하게 하는 기법이다.하지만 이러한 후킹 기법 같은 경우는 쉽게 검출할 수 있다.단지 함수 테이블만 검사해서 값을 체크하면 된다. 기본적인 함수 포인터 변조를 이용한 후킹 기법을 그림으로 표현한 것이다.이외에도 코드에 큰 영향을 주지 않는 asm을 찾아서 변경하고 다시 복귀 및 복구하는 intercept 후킹 같은 기법도 있다. 이와..
[Project] 디버거 만들기 [Python] 보호되어 있는 글입니다.
MIPS Disassemble MIPS 32bit 환경에서 gdb를 이용해서 분석 해보기.root@debian-mipsel:/home/user# file handhand: ELF 32-bit LSB executable, MIPS, MIPS-II version 1, dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0x76cbeddb5054f529eabb50bfdada135f44c0675e, with unknown capability 0xf41 = 0x756e6700, with unknown capability 0x70100 = 0x1040000, not strippedroot@debian-mipsel:/home/user# ./hand Add : 50간..
MIPS Instruction[Assembly] MIPS Instruction 정리한 문서에 분석하면서 설명되어있지 않던 명령어[http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html] --> 명령어 설명 좋음 lui : Load upper immediate syntex : lui $t, imm값 : $t = imm $v0 = 0x40
ARM Handray 환경 구축 후, 간단하게 ARM 어셈블리를 살펴보려 한다.자료를 보니... 백날 봐봤자 지루하기만해서 간단한 프로그램을 어셈으로 보면서 스택, 함수 호출, 리턴 등 관련해서 살펴본다. 사용 TOOL : GDB, IDA 32bit richong@ubuntu:~$ file HAND HAND: ELF 32-bit LSB executable, ARM, version 1, statically linked, for GNU/Linux 2.6.8, not stripped위와 같은 파일이고 실행하면 더하기랑 간단하게 정보를 출력한다.[실행 화면] 기본적인 어셈 명령어 및 레지스터R0 - R10 : 범용 레지스터, 임시 저장 용R11 : Current SFP(Stack Frame Pointer)R12 : ARM Mode ..
C++ 리버싱 연습 역분석을 하다 보면 C 말고 C++ 파일을 보게 된다. 그냥 생각없이 동적으로 보면서 이게 이거구나 저게 저거구나...직관적으로 분석하였는데 정리 해보고자 한다.기본적인 내용을 알면서 다양한 분석을 통해서 실력을 키워가면 좋을것 같다. 모든 C++ 문법을 다 해보는건 아니지만 그래도 적당히 분석에 필요한 내용을 알아본다. 밑의 첨부한 코드는 C++문법에 사용되는 이것 저것 들을 넣어 보았다.해당 코드를 최적화 하지 않고 컴파일하여 IDA를 이용하여 분석해본다. [그림-1] 위의 [그림-1]은 IDA를 통해 본 main 함수 부분이다. 첫 줄에 보이는 v8 = operator new(28u); 부분을 확인하면 28 size만큼 공간을 할당한다.해당 size를 통해서 객체의 변수와 함수 포인터 들의 총 합 ..