반응형

분류 전체보기 154

Lena Reversing - tutorial 24_1

Lena Reversing tutorial 24_1 이번 단계에서 볼 프로그램은 RegMech 프로그램이다. 같은 프로그램을 두 번에 나누어서 그냥 언패킹을 하는 방법과 loader를 이용해서 패치하는 과정을 진행한다. 해당 글에서는 먼저 언패킹을 진행해보도록 한다. 먼저 프로그램을 Exeinfo PE 프로그램에 올려주었다. Armadillo 프로텍터가 적용되었다는 것을 확인 할 수 있다. Ollydbg로 열어서 확인해준다. Ollydbg로 열어서 진행하면 어느순간 꺼져버린다. Armadillo 프로텍터의 특징이다. 디버거를 탐지해서 실행중이던 프로그램을 꺼버린다. 그냥 프로그램을 열어서 프로그램을 확인해주려고 했으나.. 멈춰서 실행이 안된다. 현재 32bit 환경인데 64bit 환경으로 진행하니 프로그..

Lena Reversing - tutorial 23

Lena Reversing tutorial 23 이번 단계에서는 'stolen byte' 라는 것에 대해 배우게 된다. stolen byte는 프로그램의 코드 중에서 패커가 위치를 이동시킨 코드를 말한다. 할당된 메모리 공간으로 이동되어 실행되고 때문에 이를 복구하지 못하고 덤프하게 되면 정상적으로 작동하지 못한다. 일종의 안티 디버깅 기법 중 하나라 할 수 있다. 주어진 프로그램을 분석하도록 한다. 이번 단계도 역시 프로그램 하나만 존재한다. 압축을 풀어 나온 NfoViewer 프로그램을 Ollydbg로 열어준다. 바로 분기해서 PUSHFD, PUSHAD로 가고 있다. ESP를 이용해 OEP를 찾아준다. PUSHFD를 지나자 ESP 값이 변경되었다. hw bp를 걸어주고 실행한다. break가 걸린다...

Lena Reversing - tutorial 22

Lena Reversing tutorial 22 이번 단계에서는 API Redirect 라는 기능에 대해서 배우는 것이 목적이다. 20, 21 단계에서 많은 수의 프로그램을 진행했는데 이번엔 다행히 프로그램이 하나다. ㅎ Ollydbg로 프로그램을 열어준다. 패킹되었을 때 자주 보였던 PUSHAD 가 가장 먼저 보인다. ESP 를 이용해서 OEP를 구해준다. PUSHAD를 지나자 ESP 값이 변한다. 12FFA4에 hw bp를 걸어준다. F9를 눌러 진행해준다. break가 걸린다. POP을 두번한 후 CALL을 하고 있다. F8을 진행해서 CALL 하는 EAX 값을 확인하면 4331B8이다. 이 값을 OEP로 추정할 수 있다. Import REC를 통해 dump해준다. Import REC를 열고 프로그..

Lena Reversing - tutorial 21_4

Lena Reversing tutorial 21_4 마지막 네번째 프로그램은 UnPackMe_WinUpack0.39 이다. Ollydbg로 열어준다. 오류창과 함께 시작된다. 특이하게 7C로 시작하는 주소에서 시작이 된다 . Memory map을 열어 확인해본다. 프로그램의 memory 영역이 PE header밖에 없고 크기가 매우 크다. PE header 안에 모든 내용을 집어 넣은 것으로 보인다. 더블클릭하여 좀 더 살펴본다. Entry point가 1018로 되어있다. 401018에 breakpoint를 걸고 실행한 뒤 한 줄씩 진행해본다. 프로그램 영역 내부이지만 다른곳으로 분기하는 부분이 있다. 계속 진행해준다. F8을 눌러 진행하는데 끝이 보이지 않게 계속 진행된다. 아래쪽에 RETN이 보인다..

Lena Reversing - tutorial 21_3

Lena Reversing tutorial 21_3 세번째 프로그램은 PCGuard4.06C_UnpackmeAll 이다. Ollydbg로 열어준다. 이번에도 ESP를 이용해서 OEP를 찾아주도록 한다. PUSH EBP가 실행되자 ESP값이 변한다. 12FFC0 메모리에 hw bp를 걸어준다. F9를 누르면 break가 걸리는데 의미 없는 곳에 걸린다. 계속해서 눌러주다보면 break가 계속해서 걸리고 마지막엔 멈추게 된다. 강의에서는 F9를 누르다보면 OEP로 가게 되는데 뭔가 이상하다. 바로 401000에 hw bp를 걸고 실행을 시켜도 break가 걸리지 않는다. 해당 파일이 이유는 아직 부족한 실력으로 잘 모르겠다... 강의를 기반으로 계속해서 설명을 하면 OEP를 401000으로 구했기 때문에 d..

Lena Reversing - tutorial 21_2

Lena Reversing tutorial 21_2 이번엔 두번째 프로그램 UnPackMe_UPX 를 가지고 진행을 한다. 파일이름에서 볼 수 있는 UPX는 상당히 유명한 패커의 일종이다. Ollydbg로 열어준다. PUSHAD로 시작하는 것이 눈에 띈다. 이번에도 ESP를 이용해서 OEP를 찾아주도록 한다. F8을 눌러 한 줄 진행하자마자 ESP값이 변한다. 0012FFA4 에 hw bp를 걸어준다. 그 다음 F9를 눌러 진행해준다. 다음과 같이 break가 걸린다. 00401000으로 분기하고 있고 이 주소가 OEP로 보인다. ollydump를 통해 dump를 떠준다. Rebuild Import는 체크 해제하고 진행한다. LoadPE 프로그램을 통해서 dump 한 파일을 Rebuild PE를 해준다...

Lena Reversing - tutorial 21_1

Lena Reversing tutorial 21_1 이번 단계의 프로그램은 총 4개이다. 하나씩 진행하도록 한다. 가장 먼저 볼 프로그램은 UnPackMe_FSG2.0 이다. 먼저 Exeinfo PE로 프로그램을 열어준다. FSG 패커로 패킹이 되어있는 것을 확인할 수 있다. Ollydbg로 프로그램을 실행해준다. ESP 값을 통해 OEP를 찾아준다. F8을 눌러 한 줄 넘어가면 ESP 값이 다음과 같이 변한다. 오른쪽 마우스를 눌러 Follow in dump를 눌러 메모리영역을 확인하고 해당 메모리에 hw bp를 걸어준다. F9를 눌러 실행하면 다음과 같이 break가 걸린다. 404000 번지로 분기하고 있다. 이 주소가 OEP로 보인다. Ollydump로 dump를 해준다. Rebuild Impor..

랜섬웨어(Ransomware)

랜섬웨어 (Ransomware) 악성코드의 일종이며 최근에 가장 일반 사람들에게 잘 알려진 랜섬웨어에 대해 알아본다. 랜섬웨어란 무엇일까? 정보처리기사, 정보보안기사에 용어에 대한 문제에 가끔씩 출제되는 부분이다. 랜섬웨어는 몸값을 뜻하는 Ransom과 software를 합성한 단어로 공격 대상자의 시스템을 잠그거나 시스템 안의 데이터들을 암호화시켜서 공격 대상자가 자신의 시스템을 사용할 수 없도록 만든다. 이 피해자가 자신의 시스템과 데이터를 사용하려면 공격자가 요구하는 금액을 지불해야 하며 금액을 지불한다 하더라도 원활하게 복구가 되는것은 확신할 수 없다. 이 악성 프로그램은 신뢰할 수 없는 사이트, 스팸메일, 파일공유 사이트, 네트워크 망을 통해 유포가 된다. 특히 최근에는 SNS가 급속도로 활발해..

백준 14889번 스타트와 링크

백준 14889번 스타트와 링크 문제이다. 이번 문제는 설명이 매우 길다. 사람을 두 그룹으로 나누어 묶고 시너지 표를 보고 각 그룹의 시너지의 차이를 구하면 된다. 이해가 잘 안된다면 입출력 예시를 본다. 이번 문제도 백트래킹 문제이기 때문에 한 그룹에 사람을 한명씩 넣어가도록 한다. 한 그룹에 사람이 반절 차게 되면 다른 한 그룹도 정해지게 된다. 그룹이 정해지는 순간 시너지 표에서 각 그룹의 시너지 합을 구해 차를 비교해준다. 차가 최솟값이 되어야 하기 때문에 최솟값으로 구해진 값과 비교하여 갱신해준다. 여기서 생각해줘야 할 점은 solve 함수에 들어간 k값이다. k 값을 넣음으로써 그룹에 한 사람이 들어갔다면 다시 처음사람부터 확인하는 것이 아니라 k번째 다음 사람부터 확인이 가능하다. def ..

백준 14888번 연산자 끼워넣기

백준 14888번 연산자 끼워넣기 문제이다. 연산자 끼워넣기 문제이다. 역시 백트래킹 문제이고 이전에 N과 M 문제는 숫자를 하나씩 넣어가면서 수열을 만드는 것이었다면 이번에는 연산자를 하나씩 넣어서 확인하는 방식이다. 숫자와 연산자 갯수를 배열에 넣어주고 연산자를 하나씩 골라가면서 연산을 해주면 될 것으로 보인다. 최댓값, 최솟값을 구해야 하기 때문에 연산자를 모두 쓰는 순간, 나온 값을 최댓값 최솟값과 비교하여 갱신해주면 될 것이다. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream..

반응형