[Reversing] 레지스터 관련 정리 정리가 필요하여 메모한다.(개인정리) > https://software.intel.com/content/www/us/en/develop/articles/intel-sdm.html 레지스터 크기E 문자가 붙으면 32비트R 문자가 붙으면 64비트x64 R 레지스터에 저장된 값중 dword, word, byte만 사용도 가능하며, 64bit r8의 경우 r8d, r8w, r8b를 통해 각 비트에 접근 할 수 있다고 한다.RAX 64비트EAX 32비트AX 16비트AH/AL 8비트 소프트웨어 레지스터범용레지스터논리, 산술 연산등에 사용되나 디버깅 시 유기적으로 사용하는 것 같다.AX, BX, CX, DX, SP, BP, SI, DI 세그먼트 레지스터코드, 데이터, 스택등의..
[Reversing] ZwQuerySystemInformation(), ZwDuplicateObject(), ZwQueryObject() 분석 중 해당 API에 대해 정리가 필요해 작성한다.NtQuerySystemInformation() API을 보게되면 첫번째 멤버는 System_Information_class로 인자값에 대한 시스템 정보를 보여준다. (그림 1)의 해당 API의 스택에 쌓인 인자를 보게되면 “10”을 가지고 있으며, SystemHandleInformation로 시스템 핸들의 정보를 원하는 것을 확인 할 수 있다. [https://www.geoffchappell.com/studies/windows/km/ntoskrnl/api/ex/sysinfo/query.htm]이후 진행 시 ZwDup..
[Reversing] ROP(Return Oriented Programming)참고> https://github.com/BreakingMalwareResearch/atom-bombing Atombombing 기법을 보다가 정리가 필요하여 일부 정리를 한다. (이해가 되지 않아 잠시 멈춤..)ROP는 Retrun Oriented Programming의 약자로 데이터 실행 방지(Data Execution Prevention, DEP)을 우회하기 위하여 이용된다. 또한, 취약한 프로그램 내부에 있는 기계어 코드들의 섹션(Gadget)을 이용하여 버퍼오버플로우 공격시 특정 명령을 실행시키는 방법이기도하다.ROP의 방법에 대해서는 1.Virtual Protect() 2.할당 등 여러가지 방법이 있으며 해당 POC..
[Reversing] 메모리 생성 방식에 따라 버퍼 기본값 변화 참조> https://www.codeguru.com/cpp/w-p/win32/tutorials/article.php/c9535/Inside-CRT-Debug-Heap-Management.htm CVE-2017-8291 취약점에서의 Postscript aload 연산자를 살펴보던 중 0x020EADBA or 0x0DF0ADBA 같은 값이 있어 찾아본다.메모리 생성 방식에 따라 버퍼의 기본 값이 정해진다.HeapAlloc() 호출 후 메모리를 보면 아래와 같다.ex) 주소 HeapAlloc () 이후 00320FD8 09 00 09 01 00320FDC E8 07 18 00 00320FE0 0D F0 AD BA 00320FE4 0D F0 AD ..
[Reversing] 알려진 난독화 종류 난독화 TOOL이다. PowerShell의 대표적인 난독화 방식 종류 설명 Random Case 대소문자 변화 (예 : tEsT) Division 문자 분할 (예 : 'te'+'st') Reorder 문자 순서 지정 (예 : '{1}{0}' -f 'te', 'st') Back Ticks Back Tick 문자 추가 (예 : 't'e's't) Call Operator 스크립트 블록 사용 (예 : & (test)) Whitespace 문자 중간에 공백 추가 (예 : 'te' + 'st') Ascii Char Assigns 아스키코드 사용 (예 : [char]116+[char]100) Replace Replace 기능 사용 (예 : 'aesa'.replace('a', ..
[Reversing] Register security center valuse AvtiVirus, Firewall, Update 관련 레지스트리 값 레지스트리 값을 설정하여 Windows Defender, 보안 알림 및 시스템 복원과 같은 Windows 보안 기능을 비활성화 한다.해당 레지스트리를 살펴보면 아래와 같다.AntiVirusDisableNotify 백신 경보 비활성화 AntiVirusOverride 사용자 고유 백신 활성화 AutoUpdateDisableNotify 자동업데이트 경보 비활성화 FirewallDisableNotify 방화벽 경보 비활성화 FirewallOverride 사용자 방화벽 활성화 UpdatesDisableNotify 보안 업데이트 경보 비활성화 UpdatesOverrid..
[Reversing] 전역 변수 지역 변수_어셈블리어 전역 변수는 모든 함수가 접근하고 사용할 수 있다.지역 변수는 정의된 함수에서만 접근이 가능하다. 어셈블리어로는 어떻게 다르게 보이는지 확인해 본다.전역 변수는 메모리 주소에 의해 참조되며,지역 변수는 스택 주소에 의해 참조 된다.즉, 전역 변수는 아래와 같으며mov eax, dword_[주소]mov dword_[주소], eaxmov ecx, dword_[주소]push ecxds : [주소] > 전역변수 지역변수는 다음과 같다.([ebp-4]는 지역 변수 int x 가정)mov dword ptr [ebp-4], 0mov eax, [ebp-4]mov [ebp-4], eaxmov ecx, [ebp-4]push ecxss : [주소] > 지역변수
[Reversing] CreateProcessInternalW() Process Hollowing 기법을 이용하는 Lokibot 분석 시 궁금하여 CreateProcessInternalW()에 대해 메모해본다. 아래 표는 CreateProcess()의 내부함수를 나열하였으며, 후킹하거나 행위를 숨기기 위해 내부 함수를 사용하는 경우가 있다. kernel32.CreateProcessW kernel32.CreateProcessInternalW ntdll.ZwCreateUserProcess //프로세스 생성됨(Suspend 상태) ntdll.ZwResumeThread //메인 스레드 Resume(프로세스가 실행) (표 - 1) CreateProcessInternalW()의 내부 함수를 들어가본다.(그림 - 1..