본문 바로가기

전체 글

(53)
CodeEngn_basic_5 Basic RCE L05 이 프로그램의 등록키는 무엇인가 이번 문제 프로그램은 UPX패킹이 걸려있었기 때문에 upx 언패킹을 진행한 뒤에 프로그램을 실행시켜봤다. Register now같은 버튼이 있는걸로 보아 뭔가 회원가입?같은 걸 하는 느낌이다. 아무것도 바꾸지 않고 Register now를 클릭했더니 다시 시도하라는 텍스트박스가 나왔다. 이 이외에 별다른 것은 없는 것 같기 때문에 리버싱을 진행하려 한다. ollydbg를 통해서 파일을 열었다면 text부분을 찾는 게 편할 것이다. 왜냐하면 이번 문제는 프로그램안에 있는 아마 등록키와 입력값을 비교해주는 부분이 있을 것이기 때문에 우리가 입력을 해줄 754-GFX...이 부분을 찾아가는 게 빠를 것이다. 셈블리코드 부분에 우클릭 > Search fo..
CodeEngn_basic_4 Basic RCE L04 이 프로그램은 디버거 프로그램을 탐지하는 기능을 갖고 있다. 디버거를 탐지하는 함수의 이름은 무엇인가 이번 문제파일도 역시 실행을 시켜보자 실행시켜보니 cmd창에서 정상이라는 텍스트만 출력시킬 뿐 아무런 일도 일어나지 않는 것 같다. 실행 후에 할일은 역시 디버깅을 위한 ollydbg를 키는 것이다 아래는 이번 문제 파일을 ollydbg로 디버깅한 화면이다. 전문제랑 똑같이 이 문제또한 가장 먼저 할일은 함수들이 모여있는 All intermodular calls를 여는 것이다 왜냐하면 문제에서 디버거를 탐지하는 ' 함수 '라고 지칭했기 때문이다. 그럼 바로 어셈블리코드 부분에 우클릭 > Search for > Allintermodular calls를 통해 함수들을 보자 그러면 누..
CodeEngn_basic_3 Basic RCE L03 비주얼베이직에서 스트링 비교함수 이름은? 우선 가장먼저 해봐야 할것은 프로그램을 실행시켜보는 것이다. 이번 문제의 프로그램을 실행시키면 알수 없는(?) 텍스트창이 나온 뒤 확인을 누르면 뭔가를 등록하는 창이 나오는데 아마도 문제에서 이 입력 부분에 텍스트를 넣고 비교를 할 때의 함수 이름을 필요로 하는 것 같다. 대충 문제의 의도를 파악했으니 ollydbg를 통해 디버깅을 진행해보자 ollydbg로 파일을 열면 이런 화면이 나오는데 우리는 basic에서 어떤 비교함수의 이름이 필요하기 때문에 어셈블리코드 부분에 우클릭 > Search for > Allintermodular calls를 클릭해주면 해당 파일에서 사용하는 함수들이 나오는데 아래 사진과 같이 함수들이 모여있는 Foun..
CodeEngn_basic_2 Basic RCE L02 패스워드로 인증하는 실행파일이 손상되어 실행이 안되는 문제가 생겼다. 패스워드가 무엇인지 분석하시오 문제를 풀기 전에 파일을 실행시켜보자 혹시나 해서 실행을 시켜봤지만, 역시 문제에서 실행이 안된다는 말을 하더니 정말 실행조차 불가능했다. 실행시킨 뒤에 혹시나 upx 패킹이 되어있나 확인하기 위해 Exeinfo라는 프로그램을 이용해서 분석해봤지만 아무것도 걸려있지 않은 듯 했다. 그리고 또 혹시나 ollydbg로 바로 보면 뭔가 보일까? 하고 생각하며 ollydbg로 켜보니 역시 에러가 발생했다. 어떠한 패킹도 걸려있지 않고 ollydbg로도 아무것도 할 수 없으니 뭘 해야할지 막막했다. 타 블로거의 문제풀이를 봤는데, 프로그램을 보자마자 알아챘기 때문에 어떤 프로그램을 사용했는..
CodeEngn_basic_1 basic RCE L01 HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가 본격적으로 문제를 풀기 위해서 우선은 프로그램을 실행시켜보자 프로그램을 실행시켰더니 당신의 HD를 CD-Rom이라고 생각하게 만들라는 텍스트를 출력한다. 그 뒤에 확인을 누르면 Error창과 함께 지금의 HD는 CD-Rom이 아니라고 출력한다. 자 이제 프로그램은 실행시켜 봤으니 이제 디버거인 ollydbg로 파일을 디버깅 해보자 우선 이 프로그램을 대충 분석해보면 massagebox로 "Make me think your HD is a CD-Rom"라는 문구를 출력한뒤에 현재 드라이브의 타입을 가져온 뒤에 그 값을 esi에 저장한 뒤 eax와 비교해서 같으면 성공을 출력하는 코드..
원하는 함수의 plt, got주소 찾는법 gdb내에서 info func : 프로그램 내에서 사용된 함수들의 plt, got 주소등을 출력해줌 만약 info func를 했는데도 got를 찾을 수 없다면 objdump -R Hi | grep 함수이름 : 함수의 got주소를 찾을 수 있음 libc에서 offset구하는 방법 objdump -d libc..... | grep 함수이름 : 원하는 함수의 offset을 구할수 있다.
특정 함수의 주소, offset 찾는 방법 gdb-peda에서 필요한 명령 아무곳에나 bp를 걸어준 뒤에 x명령을 이용해서 현재 필요한 함수의 주소를 찾는다. 주소를 찾았다면 뒤에서 2,3번째에 표시된 주소를 저장해둔다. 이걸 주소 1이라 하겠다. ex) 0xf7e5eed0 libc-database 사용되는 명령어들 ldd 파일이름 : 지정된 파일이름에서 사용된 libc의 버전과 주소 등을 출력한다. ./find 함수이름 주소1 : 주소1을 기반으로 함수이름을 찾는다. ./add 사용중인libc의위치 : libc의 종료를 추가한다. ./dump find에서찾은id (찾을함수이름) : id의 offset을 출력한다. +찾을 함수이름을 추가하면 찾을 함수만 출력해준다. base주소 + offset주소 = 실제 함수 주소
프로세스와 스레드_정리 프로그램 ( Program ) ㅡ 어떤 작업을 위해 실행할 수 있는 파일 프로세스 ( Process ) ㅡ 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 ㅡ 메모리에 올라와 실행되고 있는 프로그램의 인스턴스 ( 독릭적인 개체 ) ㅡ 운영체제로부터 시스템 자원을 할당받는 작업의 단위 ㅡ 동적인 개념으로 실행된 프로그램을 의미함 * 인스턴스 : 해당 클래스의 구조로 컴퓨터 저장공간에서 할당된 실체를 의미 스레드 ( Thread ) ㅡ 프로세스 내에서 실행되는 여러 흐름의 단위 ㅡ 프로세스의 특정한 수행 경로 ㅡ 프로세스가 할당받은 자원을 이용하는 실행의 단위 자바 스레드 ( JAVA Thread ) ㅡ 일반 스레드와 거의 차이가 없으며, JVM가 운영체제의 역할을 한다. ㅡ 자바에는 프로세스가 존재하지..