본문 바로가기

전체 글

(135)
05. 스택, 스택프레임 1. 스택(Stack) 스택의 구조나 부가적인걸 설명하기에 앞서서 스택의 기본을 설명하겠습니다. 스택은 일단 후입선출구조(FILO)로 마지막에 들어간게 제일 먼저 꺼내지는 특징을 지니고 있다.그리고 높은주소에서 낮은주소로 성장한다. 그림으로 살펴보면 대략 이런식으로 생겼다. 저 안에 들어있는건 신경쓸 필요없다.중요한 부분은 높은주소에서 낮은주소로 성장한다는 것, 그리고 저 옆의 esp라는 것이다.높은주소에서 낮은주소는 그렇다치자. 그럼 esp는 무엇일까? ESP(Extend Stack Pointer) 즉, 말 그대로 스택 포인터다. 스택이 현재 어디에 있는지를 가리키는 역할을 하는 레지스터다.그럼 저 esp는 어디에 쓰일까? 이 그림을 보자. 스택에 메인함수,3,2,function1(),1이 들어있다.현..
xcz.kr PROB32 xcz.kr 의 PROB32이다.제목은 Easy Trick내용은 PHP트릭을 이용해서 키를 구하란다. 먼저 Source Page부터 살펴보자. a라는 매개변수로 값을 받아오고 그게1273536633313213246546??????????????????????????????와 같으면 키를 출력하고 아니면 Failed ur tricks를 출력한다..그런데 저 ?를 알아낼 아무 단서조차 없다.어쨌든 검색으로 찾아낸건데, php에 옛날 취약점이라고한다.숫자가 14자리가 넘어가면 ==에서 그 뒤의 숫자들은 검사와 상관없이자리수만 맞으면 맞는다고 생각한다는것이다. Prob Page로 들어오면 이런 문자가 떠있다..별로 중요하진않다. 아까 말한대로 자릿수만 맞추주면 되니까?대신 1로 자리수를 맞춰주고 페이지를 실행해..
xcz.kr PROB30 xcz.kr 의 PROB30.제목은 Easy DLL이고키를 찾으라고한다. 다운로드 받으면 prob30.dll 이라는 dll 파일이 다운로드 받아진다. 올리디버거에 올려서 스트링 검색을 키자마자the key is %s.. 가 보인다. 저 부분에서 키를 출력하는 것일테니저 부분을 중심으로 살펴보아야한다. 이렇게 브레이크포인트를 걸어두고, 이 dll 안에 키 값을 출력하는 함수부분의 제일 처음으로 넘어가서실행을 한단계씩 시켜봐야한다.그런데 이 파일은 dll, 즉 Dynamic Library Link 파일이고, 이 파일 내부에서는C드라이브 아래의 dllinj 파일 안의 target.exe 파일로 실행되게끔 되어있다.하지만 우리가 지금 dllinjection을 이용해서 이 파일을 실행할 수는 없는 노릇이므로강제로..
xcz.kr PROB3 xcz.kr 의 PROB3이다.제목은 I don't speak English.내용을 보아하니 딱 봐도 암호화 문제같다. 앞의 Serz EKW를 검색해보니 이런 키워드가 눈에 띄었다.alphabetic cipher? 처음 들어본다. 일단 디코더를 검색해보자. 디코더를 검색해도 나오지가 않아서 그냥 alphabetic cipher만 검색해보았더니이건 Vigenere cipher란다. 그래서 Vigenere cipher decoder를 검색했다. 디코더를 찾아 들어가서 암호화 된 문장 모두를 복사해서 넣은다음몇가지 부수적 옵션을 맞춰주고 Break Cipher를 해주면 정상적으로 키는 뭐다 라면서 해독된 문장이 나온다.끝.
xcz.kr PROB2 xcz.kr 의 PROB2다.제목이 Listen Carefully! 고 Auth key 는 대문자라고한다.Download Here에 일단 들어가보자. 5초짜리 짧은 wav파일이 등장한다. 이걸 다운로드 받자. 다운로드 받고 필자는 GoldWave로 열었다.다른 툴이 있다면 다른 툴로 열어도 좋을 것 같다.딱 보면 조금 긴 부분과 짧은 부분으로 나누어져있다.wav파일을 들으면서, 그리고 파일 이름으로 추측하면이건 모스부호일 것이다. 저 GoldWave에 올려진 파일의 막대기?를 맞춰서모스부호로 해독하면 답이 나올것이다. 모스부호 코드는 이걸 보면서 해독하면 되겠다. 끝.
xcz.kr PROB1 xcz.kr 의 PROB1이다. Why So Serious? 라고 적힌 사진이 있고제목은 End Of Image이다.단순 카빙문제이다. 복잡하지않아서 손카빙으로 진행했다. 일단 사진파일을 다운받았다.이제 HxD로 열어보자. 열어봤다. 이 파일은 png 파일이기때문에 파일헤더가 89 50 4e 47인데png파일은 마지막에 끝나는 지점이 IEND~ 로 끝나는 특징을 지닌다. 이 IEND~ 부분을 찾으면 다른 파일의 시작이든, 그 끝부분에 무언가 있겠지란 생각으로 찾아갔다. 찾아간 모습인데, 바로 옆에 FF D8 FF E1 이 보인다.저건 jpg 파일의 헤더부분이다. 그렇다면 이 png파일 뒤에 jpg파일을 붙여놨다고 생각할 수 있다.이제 카빙을 진행하면 저 jpg파일이 추출돼 나올것이다.손카빙을할지 툴을 쓸..
04. 함수 호출 규약 04. 함수 호출 규약 일단 함수 호출 규약에는 3가지 방식이 있다.시작하기에 앞서 함수 호출 규약을 알아보기위해 사용한 코드이다. 12345678910111213141516171819202122232425#include int __cdecl test1(int a1, int a2, int a3) { int result = a1 + a2 + a3; return result;} int __stdcall test2(int a1, int a2, int a3) { int result = a1 + a2 + a3; return result;} int __fastcall test3(int a1, int a2, int a3) { int result = a1 + a2 + a3; return result;} int main..
wargame.kr keypad_crackme wargame.kr 의 keypad Crackme 문제다. start를 눌러 들어가보면 저번 easy_crack 처럼 패스워드를 찾아보라고한다. 다운로드 받아서 실행시키면 이런 네모박스에키패드, AUTH, BYE를 누를 수 있게 되어있다. 이런식으로 숫자를 누르고 AUTH로 인증하는 식이다. 당연히 111을 넣었을 땐 틀리다고 한다.그래서 올리디에 던져서 조금의 분석을 진행해보았다. 여기가 핵심 부분인데, 입력하는 값을 구할 수 있다.이 부분에서 eax는 무조건 7로 세팅되고, 1이 더해서 8이 된다.그리고 그 eax에 FFFCECC9라는 값을 곱한 뒤에그 값을 입력한 값이 저장되어있던 edi에 더해주고edi와 0BADBABE를 비교해서 맞으면 성공문 틀리면 실패문을 출력한다.대략적인 분석과 조금의 계산..