본문 바로가기

2014/05

[윈도우 후킹] Message hooking - 1 0x00 후킹의 개념 후킹은 소프트웨어 공학 용어로, 운영 체제나 응용 소프트웨어 등의 각종 컴퓨터 프로그램에서 소프트웨어 구성 요소 간에 발생 하는 함수 호출, 메세지, 이벤트 등을 중간에 바꾸거나 가로채는 명령, 방법, 기술이나 행위를 말한다. 이때 이러한 간섭된 함수 호출, 이벤트 또는 메세지 처리하는 코크를 후크라고 한다.크래킹을 할떄 크래킹 대상 컴퓨터의 메모리 정보, 키보드 입력 정보등을 뺴돌리기 위해서 사용 되기도 한다. 예를 들어 특정한 API를 하쿵 히가 되면 해당 API의 리턴값을 조작하는 등의 동작을 수행 할 수 있다.(위키백과 펌) 즉 다른 프로세스의 실행 경로를 가로 채는 것을 말 합니다.대표적인 예로 키로거,매크로, 원격 등이 있습니다. 종류는 구성 요소간에 발생 되는 모든것을 .. 더보기
[PlaidCTF 2013] three eyed fish_100 문제는 64bit elf 파일이며, stripted가 걸려 있는 파일 입니다. 실행시 아무런 반응이 없어서 strace로 실행을 시켜 보았습니다. ptrace(PTRACE_TRACEME, 0, 0, 0) 에서 에러가 남을 확인 할 수 있습니다.찾아보니까 주어진 프로세스에 대한 UDI가 현재 사용자의 UID와 매칭되지 않으면 다음과 같은 에러가 뜨는 것 입니다. 단순히 UID만을 검사 하는것이면은 프로그램에서 '없어도' 될것이라 판단이 되며 코드패치로 삭제시켜 보았습니다. objdump로 함수 주소를 찾아도되고, IDA64에서 찾아도 무방 합니다. 찾아서 이렇게 NOP코드로 변환 시켜주게 되면 저 함수는 실행되지 않고 그냥 지나치게 되어 버립니다. UID 검사 루틴을 제거해주니, 비정상적인 종료를 하지않고.. 더보기
[CSAW CTF 2012] Reversing_400 문제는 64bit, not stripped 파일 입니다 실행시 암호화된 Key값이 보입니다. 단순히 Key값만을 출력해줌을 알 수 있습니다. IDA64로 디버깅 했을시, 단순히 값들을 입력받고 encrypt 함수를 실행시켜서 암호화 한후 그 결과값을 출력 해 줍니다. 허나 이 문제의 경우 encrypt 함수가 있고 decrypt함수도 존재 합니다.즉 encrypt를 Call 하는 부분을 강제로 decrypt로 eip를 바꾸게 되면 키값이 decrypt가 될것이라 생각 했습니다. gdbserver로 리모트 디버깅을 시도해서 eip를 강제로 decrypt쪽으로 분기 시키니까 키값이 보이게 되었습니다. 다른 방법으로는 코드패치가 있었습니다.출처 : http://havu.tistory.com/28 Encrypt.. 더보기
[Codegate2014] dodoCrackme_200 프로그램은 다음과 같이 64-bit elf파일이며 stripped가 걸려 있습니다. 실행을 했을 떄 입력을 받으며 Permission denied을 출력하며 프로그램이 종료 됩니다.. strace로 확인 했을 때 write와 와 read가 보임을 확인 할 수 있습니다. IDA 64로 열어봤을 때, 이러한 루틴이 반복됨을 확인했고, 증가 된 값을 메모리 어딘가에 저장을 합니다.반복되었기 때문에 찍히는 문자열을 보았고, 키값이 나왔습니다. 허나 이 방식은 제대로 된 풀이 방법이 아니기 때문에, 타 블로그에 있는 정상적인 방법을 쓰겠습니다.출처 : http://pwnbit.kr/42 write의 경우 호출값은 1이며 read는 0 입니다.다음은 64bit 환경 리눅스에서 read 및 함수들이 어떻게 호출 되는.. 더보기
[Reversing.kr] Direct3D_FPS 프로그램을 실행 시키면 다음과 같은 3D_FPS 게임이 시작 되게 됩니다.저 달걀(?)을 몇방 쏘면 사라지며 게임내의 모든 달걀들을 없에더라도 클리어가 되질 않습니다. 또한 HP10은 달걀과 몸을 부딕쳤을 경우 피가 소모 됩니다.상단바 위의 ReversingKr / FPS는 값이 시시각각 변하긴 하는데 그닥 중요한 값이 아니라 생각이 들었습니다. Ollydbg의 막강한 기능중 하나인 Search for all referenced string를 이용하여 Game Clear 부분을 따라 가보았고그곳으로 억지로 강제로 분기를 조작하여 출력을 했더니 이상한 값을 출력 했습니다.이 이상한 값을 메모리 덤프에서 검색을 해 보았더니 00407028의 주소값에 있는 값을 출력함을 알 수 있었습니다. 스크린샷을 찍으면서.. 더보기
[Secuinside2013] beist_attack_game_150 프로그램을 실행 시키면 다음과 같은 게임 화면이 나오게 됩니다.점수 획득이 가능하며 1000점을 달성했을 시에 보스몹이 나오게 되고그 보스몹의 피는 999999 입니다. 보스몹은 전체공격(?)을 시전해서 정상적인 방법으로도저히 클리어가 불가능합니다. 보스몹 출현!! 보스몹의 피를 깍는건 거의 불가능 합니다. 현재 게임에서 볼수 있는 단서는 점수라고 생각하고그 점수값이 1000점이 되었을때 새로운 함수가 실행 된다라는 생각이 들어서점수를 중심적으로 찾아 보았습니다. 예상대로 1000점이었을경우 if문 안으로 분기해서 보스몹을 띄우는 루틴을 찾을 수 있습니다. 여러 루틴을 살피던 도중에 스코어 값이 20점이 되었을때 406450의 메모리의 값을바꿔버리는 루틴을 찾을 수 있었습니다. 바뀐 이후의 메모리 값 입.. 더보기