목록Security/Reversing (24)
cdor1's lab
프로그램이 몇 밀리세컨드 후에 종료되는지 찾아야 한다. ollydbg로 열었지만 pushad 명령어가 보이므로 upx가 걸려 있음을 알 수 있는데 프로그램 시작마다 풀어주기 귀찮음으로 upx- d program 해서 upx를 풀어준다. 분석하다보면 IsDebuggerPresent함수를 이용해서 디버거를 체크하는데 리턴값을 0으로 만들어 우회해준다. timegettime함수를 이용해서 프로그램이 실행되고 흐른 시간을 구하고 ebx+4지점에 있는 값과 비교해서 현재 흐른 시간이 저 값보다 적으면 계속 돈다.ebx+4 == 0x337B0x337b == 13179md5 encode해서 제출하면 끝 사실 이 프로그램은 AutoIt스크립트로 짜여졌는데하위버전의 AutoIt은 디컴파일이 가능하다.뚝딱!
프로그램이 정상적으로 실행되는 것을 막도록 바이너리가 패칭되어있는데이렇게 exit함수를 부르거나 검증을 진행하는 함수들을 모두 nop으로 패칭한다. (이런 분기문이 *50정도 더 있다....)ida의 graph view를 보면 이렇게 다양한 분기문을 이용해서 옳은 값인지 확인하는데이전에 포스팅했던 angr를 통해서 풀어보려고 한다. import angr proj = angr.Project("./angrybird", load_options={'auto_load_libs':False}) path_group = proj.factory.path_group(threads=2) path_group.explore(find=0x404fab) #0x404fab로 가는 방법을 찾도록 set print path_group...
'DLL Injection' 1. DLL이란 무엇인가? 마이크로소프트가 만든 동적 링크 라이브러리다.내부에는 프로세스가 불러서 사용할 수 있는 다양한 함수들을 가지고 있다. DLL에게는 2가지 사용(링킹) 방법이 있는데 이는 묵시적, 명시적 링킹이다. 묵시적 링킹: 파일 자체에 어떤 DLL의 어떤 함수를 사용하겠다는 정보를 포함시키고 OS가 파일 실행 시 해당 함수들을 초기화한 후 이용하는 방법.명시적 링킹 : 프로그램이 실행 중일 때 API를 이용하여 DLL 파일이 있는지 검사하고 동적으로 원하는 함수만 불러와서 쓰는 방법. 이러한 두가지 라이브러리 링킹 방법이 있다. 2. DLL Injection은 무엇인가? ※오타수정※프로세서X -> 프로세스O '자박꼼X -> D박꼼''Special thanks t..
'UPX 패킹된 PE파일을 분석해보자' 1. UPX패커란? PE파일의 내부 코드와 데이터들을 감춰주는 패커의 한 종류이다. Ultimate Packer for eXcutables의 약자로 많이 쓰이는 PE파일 패커중 하나다. PEID로 PE파일의 정보를 보면 이렇다. (UPX패킹이 적용된 파일) (UPX패킹이 적용되지 않은 파일) 2. PEview를 통한 분석 먼저 가장 눈에 띄는 차이점부터 보자. (왼 UPX패킹 오 정상파일) IMAGE_NT_HEADERS 부분의 .textbss~.reloc영역이 단숨에 UPX0, UPX1, .rsrc영역으로 축소되었고.text~.reloc.섹션또한 UPX0, UPX1, .rsrc영역으로 축소되었다.이로써 패킹을 하게 되면 파일 크기가 줄어드는 것이다. 여기서 잠깐!왜..