CodeEngn Basic RCE L07 문제 확인 컴퓨터 C 드라이브의 이름이 CodeEngn일 경우 시리얼이 생성되는데 시리얼 생성 과정에서 CodeEngn이 뭐로 변경되는지를 묻고 있다. C 드라이브 이름을 가져온는 것과 관련된 윈도우 API가 사용될 것이고 가져온 이름을 사용해서 시리얼을 생성하나보다. 아래와 같이 시리얼을 입력받고 있다. CodeEngn Basic RCE L07 분석 시리얼을 맞게 입력했다는 문자열이 사용되는 함수로 먼저 가본다. 해당 함수로 가보니 GetVolumeInformationA라는 C드라이브의 이름을 가져올 것만 같은 API가 쓰이고 있다. 그리고 인자를 여러개 받는데 두번째 인자로 VolumeNameBuffer가 push되고 있다. 이 변수에 C 드라이브 이름이 저장..
CodeEngn Basic RCE E06 풀이 언팩 과정에서 OEP를 찾고, 시리얼도 추가적으로 찾는 문제이다. 파일을 실행시켜 보니, 아래와 같이 시리얼을 입력받도록 되어있다. CodeEngn Basic RCE L06 분석 수동 언패킹 과정은 L05 문제에서 했던 방법과 같다. upx 패킹은 초반에 아래와 같이 pushad로 레지스터 정보를 스택에 전부 백업해놓는다. 그리고 아래와 같이 명령어 찾기로 popad를 찾아주고 실행시켜보면, 백업해두었던 스택의 레지스터 값들이 전부 복원된 것을 볼 수 있다. 그리고 그 밑에 jmp에 bp를 걸어주고 실행시킨 후 jmp하는 위치로 가보자. 이렇게 OEP를 찾을 수 있다. 수동으로 언팩을 하려면 OEP, IAT, Imports를 맞춰주어야 하는데 다행히도 X32..
CodeEngn Basic RCE E05 문제 확인 등록키를 찾아내는 문제이다. Register을 누르면 잘못된 시리얼이라며 다시하라는 경고창이 뜬다. CodeEngn Basic RCE E05 분석 IDA로 열어보니 해당 바이너리는 UPX 패킹이 되었음을 알 수 있다. UPX는 매우 간단한 패킹이기 때문에 툴을 사용하면 금방 언팩할 수 있지만, 수동으로 OEP를 찾고 덤프를 떠보려 한다. 대부분의 패킹 알고리즘은 처음에 pushad로 레지스터들의 현재 상태를 스택에 전부 백업을 시켜둔다. 아래 스택창을 보면 EDI부터 EAX까지 스택에 저장되었음을 알 수 있다. 그럼, popad를 하면 백업해둔 레지스터들이 그대로 복원된다. popad를 한다음 OEP(Original EP)로 뛰는 경우가 많기 때문에 p..
CodeEngn Basic RCE L04 문제 확인 해당 프로그램에 걸려있는 안티디버깅 함수 이름을 찾아내는 문제이다. CodeEngn Basic RCE L04 분석 IDA로 확인해보니, IsDbuggerPresent 함수가 임포트되어 있다. 호출하는 곳을 살펴보니 그냥 main에서 호출되고 있다. IsDebuggerPresent 함수 호출 후에 'test eax eax'로 eax 반환값이 0인지 확인하고 있다. 0이라면 오른쪽 분기를 타게 된다. IsDebuggerPresent 함수 호출 부분으로 가서 직접 반환값을 확인해보자. 호출 후 EAX를 확인하니 1이다. 위에서 0인 경우를 확인하고 있었으니 디버깅 중인 경우에는 반환값이 1이고 아닌 경우에는 0인 모양이다. 당연하게도 그냥 실행시켜보면 디버깅..
펌웨어 자동 분석 툴에는 대표적으로 binwalk와 fmk가 있다. 실제 제조사 웹페이지에 공개되어있는 구버전 펌웨어를 사용해서 binwalk와 fmk에서 많이 쓰이는 사용법을 알아보았다(공부하면서 추가되는 내용이 있다면 계속 추가할 예정이다). - 환경: Ubuntu - 펌웨어: 제조사 웹페이지에 공개된 펌웨어 1.2.4 버전 binwalk 사용법 binwalk는 펌웨어 파일의 구성을 분석할수 있는 툴로 파일 시그니처를 사용해서 어떤 데이터가 들어있는지 확인해준다. binwalk 설치는 apt-get으로 간단히 설치가 가능한데 fmk는 binwalk가 설치되어있어야 동작하기 때문에 꼭 설치해주어야 한다. binwalk 옵션은 상당히 많은데 이 중에 자주 쓰이는 옵션만 다뤘다. 파일 시그니쳐 분석 (de..
CodeEngn Basic RCE L03 문제 확인 비주얼베이직에서 스트링 비교 함수를 묻고있다. 구글링으로도 알 수 있지만, 공부하는 입장이므로 분석을 수행해보자. 처음엔 다음과 같이 dll이 없다고 떠서 이것부터 문제인 줄 알았다. 그래서 IDA에서 string 관련 함수를 확인했는데 vba 관련 여러 함수 중에서 vbaStrCmp라는 함수가 눈에 띈다. 어쨋든 dll은 설치해주면 되는 문제였다. dll을 설치하고 나면 아래와 같이 정상적인 UI를 확인할 수 있다. Regcode를 입력받고 있기 때문에 Registrieren을 클릭하면 입력해준 코드가 유효한 코드인지 확인하는 작업을 거칠 것이다. CodeEngn Basic RCE L03 분석 확인해준 함수가 실제로 실행이 되는지 확인하기 위해 imp..
CodeEngn Basic RCE L02 문제 확인 패스워드로 인증하는 실행파일이 손상되어 실행이 안되는 문제가 생겨 패스워드를 찾아내야 하는 문제이다. 실행파일이 손상되었기 때문에 다음과 같이 실행이 되지 않는다. CodeEngn Basic RCE L02 분석 IDA로 확인해보려 했는데, 패킹되어있는 파일이라 어셈 코드를 정확히 볼 수 없다. 실행이 되도록 만드는게 문제의 목적인 것 같지만 그냥 HxD로 들어있는 문자열을 확인해보자. 분기문 후 경고창에 나올것 같은 문자열과 함께 패스워드스러워 보이는 문자열이 존재한다.
2016년에 작성했던 풀이를 현재 블로그에 옮깁니다(하루에 2~3개씩 옮길 예정). CodeEngn Basic RCE L01 문제 확인 HDD를 CD-Rom으로 인식시키기 위한 GetDriveTypeA의 리턴값을 묻고 있다. 드라이브 타입을 얻어오는 GetDriveTypeA 함수 호출 부분 위주로 분석해보면 될 것 같다. CodeEngn Basic RCE L01 문제 풀이 실행파일을 실행시켜보니 'Make me think your HD is a CD-Rom'이라는 경고창이 뜬다. 사실 이 문제는, GetDriveTypeA API의 반환값만 살펴봐도 풀리는 문제이다. CD-ROM으로 인식되야 하기 때문에 반환값은 '5'여야 한다. 하지만, 공부하는 입장이므로 좀더 살펴보자. 아래 분기를 보면, GetDri..
지난 퍼셉트론 포스팅에서 퍼셉트론의 기본 개념을 알아보면서 단층 퍼셉트론의 한계와 그것을 해결하기 위해 등장한 다층 퍼셉트론까지 간단히 살펴봤다. 다층 퍼셉트론은 곧 신경망이라고 보아도 무방하기 때문에 여기서는 다층 퍼셉트론이라는 용어 대신 '신경망'이라고 표기하겠다. 지난 포스팅에 이어서 오늘은 신경망의 학습 규칙인 델타규칙(Delta Rule), 경사하강법(Gradient Descent), 역전파(Back Propagation)에 대해 알아볼 것이다. 이 개념들은 전부 신경망의 학습 과정 중에 나오는 개념들이다. /* 해당 포스팅에서의 표기법은 다음과 같다 */ xi : 입력값 zi : 은닉층 값 yi : 출력층 값 ti : 목표값 E : 에러 α : 학습률 신경망의 계층구조 위에 링크시킨 포스팅의 ..
퍼셉트론(Perceptron)을 실제로 구현해보기 전에 퍼셉트론이란 무엇인지 퍼셉트론의 정의와 학습 규칙에 대해 먼저 살펴본다. 그리고 단층 퍼셉트론(Single Layer Pereptron)과 다층 퍼셉트론(Multi Layer Perceptron)이 어떤 차이가 있는지, 단층 퍼셉트론의 한계점과 이를 해결하기 위해 등장한 다층 퍼셉트론의 경우 어떤 특징이 있는지 등을 살펴본다. 퍼셉트론(Perceptron) 이란? 퍼셉트론이란 신경망의 기원이 되는 알고리즘으로 다수의 신호( in(t):x1,x2... )를 입력으로 받아 하나의 신호( out(t) )를 출력한다. 여기서 퍼셉트론은 복수의 입력 신호에 고유한 가중치(w1,w2...)를 부여하는데 이는 각 신호가 결과에 주는 영향력을 조절하는 요소로 작용..
파이썬 코드로 쉽게 배우는 머신러닝 시리즈 (3) SVM(Support Vector Machine) sklearn을 사용한 SVM 모델 학습으로 주어진 데이터셋을 분류하고 시각화해보려 한다. 참고로, 본 포스팅에서는 수학적 지식은 다루지 않고 sklearn의 SVM을 사용하기 위한 최소한의 개념을 다루며 '코드 구현과 활용'의 측면에 초점을 맞춘다. 또한 sklearn svc 함수의 매개변수 kernel, C에 따른 변화도 살펴본다. SVM(Support Vector Machine) 이란? SVM(Support Vector Machine)은 주어진 데이터가 어느 그룹에 속하는지 분류하는 분류 모델이다. 아직 포스팅하진 않은 신경망을 포함해 기존의 분류 모델들은 분류 오류를 최소화하려는 목적으로 설계되었지..
FTZ level19 문제 확인 이번 문제 소스코드는 단 3줄인데 buf[20]을 선언 후 gets로 여태까지의 다른 문제들과는 확연한 차이가 있다. 바로 setreuid 함수가 사용되어있지 않다는 것이다. 입력값의 길이를 확인하고 있지 않으므로 RET을 덮어쓸 수 있고 쉘 또한 실행시킬 수 있지만, 아래 캡쳐 이미지에서 보는 바와 같이 setreuid가 걸려있지 않았기 때문에 쉘 실행 권한 id가 동일한 level19임을 알 수 있다. setreuid에 대해서는 [해커스쿨 FTZ] level11 풀이 에서 설명한 바 있다. 따라서, 이번 문제는 코드에는 없는 setreuid와 system('/bin/sh')를 직접 실행시켜주어야 하는 문제이다. 그리고 그러기 위해선 RTL(Return to Librar..