모의해킹/리버싱 (33) 썸네일형 리스트형 API 리다이렉션을 활용한 언패킹 방해 기법 우회 PEview툴을 사용해 임포트 테이블을 확인해준다. 오늘 우리가 알아야하는 곳은 GetProcAddress이다. * GetProcAddress는 함수를 불러온다. -> Func의 address을 불러온다 프로그램을 올리디버거에 올리면 패킹이 되어있어 alert 경고창이 출력이 된다. PUSHAD가 바로 있는거 보면 PUSHAD로 밀어 넣고 분석이 끝난 뒤에 POPAD할 것이다. F8로 PUSHAD해준 다음 ESP 스택의 위치로 가서 브레이크 포인트를 걸어준다. F9을 눌러서 실행시켜주면 우리가 걸었던 하드웨어 브레이크 포인트거가 걸린다. CALL EAX에 들어가서 보면 PUSH EB가 원래 보여야한다....뭐지,..하여튼 여기는 함수의 프로로그를 나타내는 구간이기에 플러그인으로 덤프를 떠준다,.! 이제 .. Import address table 복구 : 레나 챌린지 (Level 21) PEview툴을 사용해 프로그램의 Import address table을 확인해 보자. Windows API에 관련된 함수들을 가지고 있다.(Process, dr\aw text, AndPoint..) 올리디버그로 보면 GetModuleHandleA인 windows api을 볼 수 있다. 여기를 통해서 윈도가 할 수 있는 명령어들을 많이 실행한다. GetModuleHandleA에 들어가면 포인터를 가지고 점프를 하는 걸로 보인다. 포인터가 어디인지 보려면 밑에 402000에 저장이 되어 있고. 7080B741이라느 숫자가 저장되어 있다. Ctrl + G 누르고 402000으로 이동을 해보자. 덤프창에서 보면 Import address table이다 PEview툴에서 볼 수 있다. 결론은 현재 프로그램을 올.. 패커와 프로텍터 : 레나 챌린지 (Level 20) 최초 패커의 등장 : "압축" -> exe 파일을 패커를 통해 압축한다. 프로텍터 : 패커에서 진화한 게 프로텍터이다. 패커와 목적이 다르다. "exe 파일 보호" 오늘 풀어볼 문제의 프로그램이다. 올리디버그로 프로그램을 열면 경고창이 뜬다. PE헤더에 나와있는 엔트리 포인트가 코드 섹션 밖에 있다는 내용이 적혀있다. (압축된 게 풀려야 된다는 의미?) 메모리 영역을 UnPackMe의 .text에서 실행이 되어야 하는데 46B000 주소부에서 실행되었다. F8로 하나씩 실행시키다보면 4271 B0 주소로 점프를 한다.. 여기 부분은 어디인지 모르기 때문에 메모리 영역을 확인해 보자. 메모리 영역을 보면 UnPackMe의 code 섹션 부분이다. DB라고 해가지고 데이터가 나와있는데 볼륨을 분석하기 위해서.. IsDebuggerPresent를 사용한 안티디버깅 방법 : 레나 챌린지 (Level19) 오늘 풀 문제들이다. - Debugger Detected.exe 프로그램을 실행시키면 정상적으로 작동이 되지만, 올리디버거에 올린 상태에서 실행을 시키면 정상적으로 동작이 되지 않는다. F8로 하나씩 실행시키다 보면 DialogBoxPraramA에서 메시지 박스가 출력이 된다. user32은 DLL 이다 -> 윈도 운영체제에서 유저와의 어떤 인터페이스를 제공한다. * user32자체에는 안티디버깅 기법이 걸려있지 않다. Ctrl + N 을 눌러 메시지 박스를 찾아 모든 곳에 브레이크 포인트를 걸어준다. 프로그램을 다시 실행시키면 브레이크 포인트가 걸리는 메시지 박스가 있다. 커널 스택에 들어가 보면 첫번째 스택에서 호출이 되었다. 최종적으로 어디서 호출이 되는지 따라가 보자 ctrl + g 을 눌러 [e.. 난독화 코드 해석과 패치 방법 : 레나 챌린지(Level18) 프로그램을 실행시키면 nag가 출력이 된다. 메시지를 보면 "nag을 제거하는데 두 개의 바이트를 패치해서 없앨 방법을 찾아내라"라고 적혀있다. 올리디버그로 열었는데 바로 밑에 우리가 원하는 nag 메시지 박스가 있는걸 볼 수 있다. 해당 부분에 브레이크 포인트를 걸고 실행을 해보니까...메시지 박스에 브레이크가 걸리지 않는다.. Ctrl + N 을 눌러 다른 곳에 메시지 박스가 존재하는지 확인하기 위해 브레이크 포인트를 걸어준다.. 다시 프로그램을 실행시키면 해당 부분에서 걸리게 된다. 내용을 밖에 나가서 보기위해 ctrl + g를 눌러 [esp]을 입력을 해보자. 점프하는 곳으로 오게 된다...그 위 주소를 보니까 nag 내용이 출력하는 메시지박스가 있는 걸 확인할 수 있다. 401011을 기억하고 .. 키 생성기(키젠) 만들기 : 레나 챌린지(Level17) • 정적 분석 MASM32는 어셈블리어로 짜진 프로그램인 거 같다. • 분석 시작 임의의 값을 입력을 했을 때, 나오는 메시지이다. 메시지가 출력하는 상태에서 일시정지를 눌러준 다음 콜스택을 확인해 보면 MessageBox가 있는 걸 볼 수 있다. MessageBox에 위치에 가서 어디에서 호출이 되었는지 확인을 위해 Find references > Selected command에 들어간다. 모든 곳에 브레이크 포인트를 걸어주고 다시 실행을 해준다. 브레이크 포인트에 걸리는 걸 확인할 수 있다. 해당 위치에서 조금 올려보면 줄이 묶여있는 애가 keygen이라고 볼 수 있다. 키를 확인하는 루프이다. 브레이크 포인트를 걸고 다시 실행을 시키면 해당 위치에 브레이크가 걸린다. 레지스터를 보면 우리가 넣은 데.. 윈도우 ID 추적과 레디스트리 쿼리 분석 : 레나 챌린지(Level16) - 첫 번째 문제 URLegal.exe 파일을 실행시키고 종료시킬 때 나오는 창이다. 우리가 풀어여할 문제는 저 창이 안 나오게 하는 것이다. (레나 챌린지 15처럼 인라인 패치를 통해서 할 수 도있음) Resource Hacker 툴을 사용하여 리소스 분석을 해보자. Dialog 폴더에 들어가 보면 여러 개의 중 103:1033 이 우리가 원하는 창이 이미지로 보이게 되고, 어떻게 동작이 되는지도 확인을 할 수 있다. 이 창을 띄우기 위해서는 이 아이디를 호출을 해준다. (103번) -> 103은 Hex로 67이다 Ctrl + s을 눌러 명령 어을 찾는다.(push 67은 10진수로 103이다) *ctrl + l 누르면 다음 거를 찾을 수 있음 F8로 하나씩 시작하 보면 CALL이 실행되는 쪽에서 메시.. 인라인 패치를 할 때 고려해야 하는 것들 : 레나 챌린지(Level 15) 오늘 문제는 nag를 없애는 문제이다. 프로그램 실행 시작 전, 종료할 때 nag가 출력이 된다. nag가 실행이 될 때, 일시정지를 눌러준다. Call Stack에 가서 하나씩 분석해 보자. eax로 가져온다. inc eax -> eax를 1을 올려준다. mov [446 FF0], eax -> [446FF0] 주소에다가 eax를 저장한다. cmp eax, 2 pop eax -> 다 쓰고 나서 다시 복구를 해줘야 한다. je 42037b -> eax가 2면 windows가 실행이 된다. jmp 004204 BA -> windows가 실행이 안된다 nag가 실행 안된다 새로 작성한 주소로 jmp 437 D65를 해준다. 그다음 나머지는 Nop으로 채워주고 파일을 저장하면 정상적으로 첫 번째 nag와 세 번.. 이전 1 2 3 4 5 다음