[Reversing] ZwContinue 언패킹 시 ZwContinue()을 자주 보게 되어 살펴보았다.먼저 ZwContinue()의 정보를 확인 할 수 있다.ZwContinue( IN PCONTEXT ContextRecord, //Pointer to CONTEXT structure for current thread IN BOOLEAN TestAlert ); 첫번째 인자의 CONTEXT구조체 포인터로 아래와 같은 구조체 정보를 확인 할 수 있다. typedef struct _CONTEXT { DWORD ContextFlags; DWORD Dr0; DWORD Dr1; DWORD Dr2; DWORD Dr3; DWORD Dr6; DWORD Dr7; FLOATING_SAVE_AREA FloatSave; DWOR..
[Reversing] DLL Injection - 샘플 파일 다운로드> 첨부파일 Dll 인젝션은 대상 프로세스가 스스로 LoadLibrary() 함수를 호출하게 만들어서 원하는 DLL을 로드하게 하는 것으로 먼저 LoadLibrary()는 GetModuleHandle()을 이용하여 kernel32.dll을 넣어 핸들을 구하고 GetProcAddress()을 이용하여 얻은 핸들과 "LoadLibrary" 문자열을 넣어서 함수 주소를 찾는다이후 CreateRemoteThread() 함수를 이용하여 원래 목표인 스레드를 생성하는 것이 아니고 LoadLibrary() 함수를 실행시켜 함수의 인자에 인젝션을 원하는 dll 파일의 경로를 적어 로드하는 것이다.. CreateRemoteThread() API을 이용한..
[Malware analysis] Anti-VM(Ursnif) Ursnif 분석 시 Anti-VM 우회 부분을 정리한 내용이다. > 이전 Unpacking 내용> Anti-Reversing 참고 - 샘플 파일 다운로드> 첨부파일 Payload(decoding) 상세 분석 Ursnif 디버깅 진행 시 해당 시스템 정보를 얻는 것을 확인 할 수 있었으며, 해당 정보을 이용하여 Anti-Vm과 CPU 사이클 횟수 차를 이용하여 Rdtsc 안티 디버깅이 있는 걸 확인 할 수 있다. 즉, 해당 기법을 통하여 디버깅 유무를 확인하는 사실을 확인 할 수 있다. 그림 1 – Anti_VM, Rdtsc 안티 디버깅 먼저 Anti-Vm을 우회하기 위해 해당 “vbox”, “qemu”, “vmware”, “virtual h..
[Malware analysis] Malware Unpacking(Ursnif) Ursnif 분석 시 Unpacking 부분을 정리한 내용이다.- 샘플 파일 다운로드> 첨부 파일 Unpacking(Payload) 동적 분석 시 현재 “Error Initializing Client App!” 라는 메시지와 함께 다른 행위를 하지 않는 것을 확인 할 수 있었다. 디버깅을 통해 packing 유무의 확인이 필요하다. Main()을 살펴보면 CALL 4015A1과 CreateWindowExA()을 볼 수 있다. 0x4015A1()을 살펴보게 되면 RegisterClassExA()를 만나게 되는데 정보 검색을 하게 되면 윈도우를 만드려면 윈도우 클래스를 먼저 등록한 후 CreateWindow()을 호출해야 한다...
[Reversing] Crypto-Ransomware 랜섬웨어를 통해 감염된 파일은 암호화 할 때 RSA 알고리즘(비대칭키) 대신 AES 알고리즘(대칭키)를 사용하는지에 대해 작성 할 것이다.AES 대칭키 알고리즘을 사용하는 이유는 속도에 있다. 즉, 빠른 암호화가 가능하다.반대로 RSA-1024, RSA-2048와 같은 비대칭키 알고리즘은 시간이 오래 걸리지만, RSA 비대칭키 알고리즘은 안정성이 훨씬 뛰어나기 때문에 파일 암호화에 있어 함께 사용하게 된다. 즉, 랜섬웨어 제작자는 파일을 암호화 할 때 속도가 빠른 AES를 사용하고, RSA는 AES를 암호화 하는데 사용함으로써 속도와 안정성 부분을 챙길 수 있다. 공격자의 RSA 개인키를 알 수 있다면 감염된 파일을 복호화 할 수 있다.
[Reversing] Zw함수의 접두사의 의미 참조> https://docs.microsoft.com/ko-kr/windows-hardware/drivers/kernel/what-does-the-zw-prefix-mean- ex) zwopenprocess, zwopenprocesstoken, zwqueryinformationtoken 함수등 함수명 앞에 접두사 Nt 및 Zw로 시작하는 걸 볼 수 있다.MSDN 검색 결과 Nt의 접두사는 NT의 약자지만, Zw의 접두사는 의미가 없다고 한다. 최근 알게된 사실로는 직접 호출이 불가능하여 간접호출만 되면서 뒤에 접두사가 Nt > Zw 로 바뀌는 것을 알게되었다.그저 다른 API와 이름으로 인한 잠재적인 충돌을 피하기 위해 사용했다고 하며, 자세한 내용은 해당..
[Reversing] Anti-Reversing - 참조> http://unprotect.tdgt.org/index.php/Anti-debugging - 샘플 파일 다운로드> 첨부파일 샘플에 적용된 안티 디버깅, 안티 VM 기법에 대해 확인하였다. IsDebuggerPresent, CheckRemoteDebuggerPresent API 안티 디버깅 0x4019D0()에서 IsDebuggerPresent()을 이용하여 디버거를 통해 호출이 되었는지를 확인한다. 디버거 환경이 아니라면 “0”을 반환하고, 디버거 환경이라면 “0”이 아닌 값을 반환 한다. CheckRemoteDebuggerPresent()의 v1 즉, GetCurrentProcess() 현재 프로세스의 핸들을 얻는다. CheckRemoteDe..
[Reversing] VirtualProtect BreakPoint Ollydbg에서 VirtualProtect에서 브레이크포인트를 설정하는 방법unpack 시 알게 된 내용 Alt +F1 누르게 되면 아래와 같은 그림에 "bp VirtualProtect" 입력 후 진행하게 되면 해당 부분에서 BreakPoint가 걸리게 된다. Ctrl+G단축키를 누르게 되면 아래와 같은 팝업창이 실행이 되는데 해당 팝업창에 "kernel32.VirtualProtect" 입력 후 ok 해당 부분으로 가게 된다. 이후 BreakPoint을 설정 후 진행하게 되면 된다.
- Total
- Today