Security/Reversing & Dbg
python decompile
python decompile
2017.11.19https://github.com/matiasb/unpy2exe https://github.com/rocky/python-uncompyle6
MPRESS unpacking
MPRESS unpacking
2017.11.19x32`` F9`` 누르고 EntryPoint로 이동하면 `` pushad``가 있다. `` F8`` 눌러서 실행한다.보통 언패킹 이전에 이런 식으로 레지스터를 push해둔다.언패킹이 끝나면서 다시 `` popad``할 때, ESP 값이 현재 ESP 값과 동일한 상태에서 `` popad``해야 레지스터가 제대로 복원되므로 ESP에 hardware bp를 건다. ```cbphws esp,rw``` bp에 걸리면 `` jmp`` instruction이 있을건데, 여기서 OEP로 jmp한 다음Scylla를 이용해 Unpacked binary를 Dump한다. x64x64에는 `` pushad`` instruction이 없기 때문에 `` F9`` 누르고 EntryPoint로 이동하면 다음 instructions가..
[Windows] injection & hooking
[Windows] injection & hooking
2017.08.07Dll injection#1``c OpenProcess()``로 HANDLE을 얻는다.``c VirtualAllocEx()``로 타겟 프로세스에 injection할 dll의 path를 쓸 공간을 할당한다.``c WriteProcessMemory()``로 step 2의 주소에 path를 쓴다.``c GetProcAddress()``로 LoadLibraryA의 주소를 얻는다. ``c CreateRemoteThread()``의 네번째 인자로 실행할 함수( LoadLibraryA )의 주소를, 다섯번째 인자로 그 함수가 실행할 인자(path)를 전달한다.결과적으로 remote process가 ``c LoadLibraryA(path)``를 실행하게 되어 dll을 load하게 되고, ``c Dllmain()``이 ..
[Linux] injection
[Linux] injection
2017.08.07So injection#1리눅스는 윈도우의 CreateRemoteThread같은 API를 제공하지 않기 때문에, ptrace를 이용해야 한다.2016/12/12 - [System/LINUX & UNIX] - ptrace - Linux injection ( code injection / so injection ) #2환경변수 LD_PRELOAD가 설정되어 있는 경우 명시된 라이브러리를 먼저 로드한다.2016/12/19 - [System/LINUX & UNIX] - LD_PRELOAD를 이용한 so injection과 hooking. + wrapping function #3쓰기 권한이 있는 경우 ELF 포맷 대로 수정해서 library를 로딩하도록 하는게 가능할 것 같기는 한데, 해보지는 않았다. Code ..
gdb peda / gdb-multiarch
gdb peda / gdb-multiarch
2017.07.13nxtest```bashprint main_arena // main_arena 구조체를 정리해서 출력.patch 0x555555757000 "/bin/sh" // set 대체. hex나 dex를 입력해도 잘 동작.dumpargs -- Display arguments passed to a function when stopped at a call instructionstrings``````bashfind "/bin/sh" libcfind 0xdeadbeef allfind "..\x04\x08" 0x08048000 0x08049000```바이너리 정보 출력```bashinfo sharedinfo auxvvmmap [binary || libc || stack || all || ...] // procfselfsy..
gdb
gdb
2017.07.12fork/exec 설정peda와 cgdb를 사용할 것. ```bashset env LD_PRELOAD=./libc.so.6set {void*}0x80dfff7a = 0xffset $rdx=0x98583``````bashx/4x &main_arenax/4x &__malloc_hookfind [/size-char] [/max-count] start_addr, +len, val1 [, val2, ...]find [/size-char] [/max-count] start_addr, end_addr, val1 [, val2, ...]``````bashwatch $eax //eax가 변경될 때 마다 중단d [num] // bp 지우는 것과 똑같다.display $eax //중단될 때 마다 eax값 출력``````ba..
x64/x32 dbg
x64/x32 dbg
2017.07.01이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
LD_PRELOAD를 이용한 so injection과 hooking. + wrapping function
LD_PRELOAD를 이용한 so injection과 hooking. + wrapping function
2016.12.19`` LD_PRELOAD``는 prefix로 `` LD_``가 붙은, ld.so에 속하는 환경변수로,windows의 `` AppInit_Dlls`` 레지스트리와 비슷한 역할을 한다.`` LD_PRELOAD``에 설정된 shared object는 libc를 비롯한 다른 모든 shared object보다 먼저 로딩된다.`` LD_PRELOAD``에 설정된 shared library의 함수 중에 이후 로딩된 libc의 함수 이름과 동일한 함수가 있다면 먼저 로딩된( = `` LD_PRELOAD``에 설정된) shared library의 함수를 호출하게 된다. 그래서 결과적으로 보면 자동으로 후킹을 수행하는 것과 같다. 타인 소유 파일에도 동작한다.secure-execution mode로 실행되면 제약이 걸린다..
ptrace - Linux injection ( code injection / so injection )
ptrace - Linux injection ( code injection / so injection )
2016.12.12리눅스는 윈도우의 ``c CreateRemoteThread()``같은 API를 제공하지 않기 때문에, injection에 ``c ptrace()``를 이용한다.2016/12/25 - [System/LINUX & UNIX] - ptrace 타인의 권한으로 실행된 프로세스에는 TRACEME와 ATTACH가 불가능하기 때문에 동작하지 않는다.타인 소유 파일을 내가 실행하는 경우는 동작한다. code injection특정 실행파일에서 원하는 정보를 추출하거나 원하는 동작을 하게 하는 데 유용하게 쓰일 수 있다.code injection을 통해 target 프로세스가 ``c system("echo Code inject");``을 호출하게 해 "Code inject" 문자열을 출력하도록 해보았다. Ubuntu 15..
jmp, call instruction 주소 계산
jmp, call instruction 주소 계산
2016.11.15Intel x86 architecture에서 JMP, CALL 명령어는 5Byte로 opcode와 operand는 다음과 같다.```cJMP : E9 XX XX XX XXCALL : E8 XX XX XX XX```이 때 operand는 절대주소 값이 아니라, 현 위치 기준 상대주소다. 따라서```cXX XX XX XX = 목적지주소 - 현재명령어주소 - 5 ( Little Endian 정렬 )```-5(Byte)는 JMP, CALL 명령어의 크기 만큼 빼주는 것. ex) 402000에서 401000으로 간다면```c402000 - 401000 - 5 = FF FF EF FB E9 FB EF FF FF``` 절대주소를 사용하고 싶은 경우```c mov eax, 401000 jmp *eax```call도 동..
Tools - Reversing, bf tool
Tools - Reversing, bf tool
2016.09.25이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
Anti debugging
Anti debugging
2016.08.31packer / protectorpacker패킹은 실행 압축이다. 압축으로 PE file의 크기를 줄이는게 목적이다.런타임에 언패킹 코드를 먼저 실행해 패킹이 풀리기 때문에, 메모리에 올라가는 코드는 차이가 없다.압축하다보니 언패킹 하기 전 바이너리나 섹션, IAT 등이 안보이는 부수효과도 있다.언패커가 공개되지 않은 패커일 경우 메뉴얼 언패킹 해야 하는데, 이 경우 리버싱을 어렵게 하는 효과도 있다.근데 어차피 리버싱을 어렵게 할거라면 안티 디버깅 등등이 들어가게 되기 때문에 사실상 packer 보다는 protector가 걸렸다고 봐야하는 경우가 대부분이다.언패킹 루틴을 빼면 성능의 차이는 없다고 봐야한다. protector리버싱을 막는게 목적이다.패킹에 Anti-Debugging, Code Obfus..