일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 신경망
- 달고나bof
- 신경망파이썬
- 파이썬신경망
- BOF
- 스트림암호
- 신경망구현
- C언어알고리즘
- 백준
- FTZlevel10
- 알고리즘
- 딥러닝
- 머신러닝
- 보안
- 인공지능
- 정보보안
- 백준알고리즘
- 활성화함수파이썬
- C언어 알고리즘
- 밑바닥부터시작하는딥러닝
- 항등함수
- 버퍼오버플로우
- 소프트맥스함수
- 신경망 학습
- c언어
- BOJ
- 파이썬
- 8086CPU레지스터
- 딥러닝파이썬
- C알고리즘
- Today
- Total
목록분류 전체보기 (235)
HeeJ's
우선 실행 파일을 실행시킨 후, 예시의 Serial 값을 넣어보았다. 틀렸을 때 나타나는 문자열을 확인할 수 있었다. 디버거로 바로 열어보았다. PUSHAD로 실행이 시작되는 것으로 보아, 패킹된 실행파일이라는 것을 알 수 있다. 이 파일을 우선 언패킹 해주었다. cmd를 관리자 권한으로 실행시켜주어야 언패킹을 할 수 있다. PUSHAD부분이 풀려 명령어들로 나열되어있는 것을 확인할 수 있다. OEP는 프로그램 실행 시작점의 주소를 말한다. OEP는 00401360임을 확인했다. 그리고 Serial 값을 찾기 위해 문자열 검색을 통해 아까 에러 문자열을 찾아가주었다. 분기문 근처에 SERIAL로 보이는 ASCII값을 확인하고, 실제 SERIAL이 맞는지 확인하기 위해 실행파일을 실행시킨 후 값을 넣어보았..
비주얼 베이직에서 스트링 비교 함수의 이름은 vbaStrCmp이다. 위의 실행파일을 분석해보아도, vbaStrCmp 함수가 자주 사용되는 것을 확인할 수 있다.
실행파일이 손상되었다고 한다. 여러 분석 툴들로 열어줄 수 있을지는 모르겠지만, 우선은 그냥 실행시켜보았다. 그냥 실행시키게 되면, 이렇게 앱을 실행할 수 없다는 문구가 뜬다. 이걸 그대로 바로 디버거로 열어보아야겠다. 디버거에서 또한 파일을 열 수 없다. 그래도 파일에 어떤 내용이 들어있는지 알아봐야 하기 때문에 String으로 파일을 확인할 수 있는 HxD로 열어보았다. 실행파일에 사용하는 여러 함수들을 확인할 수 있었다. 이 파일들을 더 살펴보면, password를 찾을 수 있을 것이다. 패스워드로 유추되는 문자열을 획득했다. 위의 값을 입력해 문제를 해결했다.
문제 사이트로 들어가면, google 사이트가 나오는데, URL을 보면 알 수 있다. flag.php에 flag가 있는 것 같다. 그러면 command를 사용해서 flag.php를 확인해주면 될 것이다. flag.php가 필터링 되고 있는 것 같다. 그래서 flag가 필터링 되어도, flag.php가 나타날 수 있도록 url을 조작해서 입력해주었다. flag를 획득했다.
문제 화면을 열면 php 코드가 들어있는 것을 확인할 수 있다. 모르는 함수가 있어서 찾아보았다. - trim() : 문자열 맨 앞과 맨 뒤의 공백을 제거한다. - file_get_contents() ex. -> 웹사이트에 있는 전체 파일을 문자열로 읽어들이는 php 함수 - isset() : 들어있는 값이 NULL이 아님을 의미 (변수가 설정되었는지 확인) 코드를 해석해보면, 1. guess 변수에 값이 있으면 filename 변수에서 파일 문자열을 읽어들인 것을 $secretcode 변수에 넣는다. 2. $guess와 $secretcode 값이 같으면 flag.txt를 출력해준다. filename 변수와 guess 변수의 내용을 조작해서 문제를 해결할 수 있다. 어떻게 값을 전달해줄까 하다가, 입력 ..
문제 힌트를 읽어보면 HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가라고 적혀있다. 이 문제 힌트를 먼저 해결한 후, exe 파일을 열어보려고 한다. 위의 힌트를 해결하기 위해 GetDriveType 함수를 찾아보았다. GetDriveType 함수의 원형은 UINT WINAPI GetDriveType( _In_opt_ LPCTSTR lpRootPathName ); 이며 이 함수는 인자로 전달받은 드라이브가 어떤 종류의 드라이브인지 판별하여 리턴해줍니다. 이제 리턴 값들에 대해 알아보면 힌트에 대한 답을 찾을 수 있을 것이다. 리턴 값 상수 설명 0 DRIVE_UNKNOWN 알 수 없음 1 DRIVE_NO_ROOT_DIR 최상위 경로가 없음 2 DRIV..
문제를 내려받아 실행시켜보니, 이렇게 Password를 입력하고 확인하는 프로그램이었다. 아무 값이나 입력하고 확인 버튼을 눌러보았더니 Incorrect Password라는 문자열이 떴다. 이 프로그램을 Ollydbg로 열어보았다. 비밀번호를 틀렸을 때 뜨는 문자열을 알기 때문에 이 프로그램에 있는 문자열들을 검색해주었다. 문자열들을 살펴보니, 틀렸을 때 떴던 문자열인 "Incorrect Password"와 성공 문자열로 보이는 "Congratulation !!"도 확인할 수 있었다. 성공과 실패로 분기되는 곳으로 이동해 위를 살펴보면 입력 값과 패스워드를 비교하는 부분을 찾을 수 있을 것이다. 분기문으로 이동한 후, 코드를 확인해보니 아래의 Incorrect Password로 Jump되는 부분이 아래 ..
문제의 소스코드를 한 번 살펴보려고 한다. if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); 이 부분을 보면 or와 and가 필터링되고 있다. 이런 경우, 연산자를 사용해주면 된다. or를 대신해 || , and를 대신해 && 를 사용해주면 된다. $query = "select id from prob_darkelf where id='guest' and pw='{$_GET[pw]}'"; 입력받는 쿼리문의 형태이다. pw를 get 방식으로 받아주는걸 알 수 있다. 그냥 간단하게 풀던 방법에서 or 대신에 ||를 사용해주면 될 것이다. 이렇게 제..