목록wargame (207)
이번에도 옛날에 사용했던 프로그램을 크랙 한다. 무료 버전은 10번만 사용할 수 있다. 아래 Number of trials left:10이 10번을 사용하면 프로그램을 사용할 수 없게 된다. 잡다한 기능들이 있다. 종료하면 광고가 나온다. 이제 저 10번의 카운트를 없애고, 광고도 없애는 작업을 진행한다. 프로그램 화면이 나오는 곳에 bp를 걸고 함수 안으로 info 하면서 추적한다. 하드웨어 영역은 bp를 따로 걸어 준다. 0x4898e7에서 남은 횟수를 체크한다. EDI+E0은 시리얼 넘버? 인듯하다. 0x4898e1을 jmp로 바꾸어 주어 바로 프로그램을 실행시킬 수 있게 만들어 주었다. 실행하여 호출된 스택을 보면서 찾아가는 게 더 쉽다. 스택을 확인하여 해당 지점이 광고를 호출하는 함수라는 것을..
설치 파일 하나가 들어있다. 이번엔 실제 프로그램을 크랙하는 문제이다. 체험판 프로그램을 크랙하여 회원 유저 처럼 사용할수 있게 만들어 본다. 회원 유저만 그룹을 3개 이상 만들 수 있다. 이 기능도 바꾸어 보도록 한다. 먼저 문자열들을 바꾸기로 했다. 메모리에들어가서 문자열 검색후 unregistered를 registered로 바꾸어 주었다. 잘 바뀌었다. 이제 그룹 기능을 바꾸어 보도록 한다. Executable till user code 로 알림창을 호출한 주소를 찾아 준다. 문자열로 검색해도 된다. CMP EAX, 3이 그룹의 수를 뜻한다. 그 아래 JL을 JMP로 바꾸어 준다. 성공
프로그램 두 개 있는데 먼저 첫 번째를 실행했다. 알림 창을 제거하라고 나온다. 여기서 프로그램을 종료하면 알림 창이 또 나온다. 알림창 두 개를 제거해야 한다. JE를 JMP로 바꾸어 무조권 넘어갈 수 있게 한다. 그럼 알림 창 하나를 건너뛸 수 있다. 바꿔주었다. 그 후 프로그램을 종료하려 할 때 나오는 알림 창이다. 전부 NOP으로 바꿔도 되고 JMP로 0x40104c로 이동해도 되고 방법은 다양하다. nop으로 채워주었다. 알림 창 없이 잘 진행된다. 그다음 옆에 있는 프로그램도 디버깅을 진행해본다. 들어오자마자 에러가 난다. 주소를 0X401000으로 옮겨서 BP를 걸고 진행해도 된다. 근데 PE VIEW를 사용해보기로 한다. PE 파일이 잘못되어있다. 원본과 헥스디를 이용해 비교를 진행한다. ..
프로그램을 누르면 바로 해결했다고 나온다. 이번 문제는 key file의 내용을 분석해 보는 것이다. 기존의 key file을 지우고 새로 만들어주고 프로그램을 실행하면 키 값이 틀렸다고 나온다. 이제 그 값을 알아보도록 한다. 숫자 8개를 넣고 디버거를 켰다. 파일을 읽는 부분에 bp를 걸고 잘 읽어 왔는지 확인했다. 파일의 길이가 8이란 것을 알 수 있다. 조건문에서는 길이가 16이어야 통과할 수 있다. 일단 flag를 꺼두고 계속 진행해 보았다. 0x4010c7 라인을 보면 al이 0이면 0x004010d3으로 이동한다. 문자열이 끝났다는 것을 알 수 있다. 그리고 esi가 8이면 성공했다는 문자열을 출력하고 아니면 키 값이 실패했다는 문자열을 뛰운다. 그럼 esi를 8 이상으로 만들어주어야 하는데..
프로그램 실행 시키면 이런 오류창이 뜬다. 디버깅툴 키고 문자열 부터 찾았다. 마지막 성공 했다는 문자열이 있다. 성공 했다는 문자열까지 도달하기 위한 방법을 찾는다. Z flag를 하나씩 꺼보면서 진행 했다. 조건문들을 모두 통과하면 이런 화면을 볼 수 있다. 강의에서는 점프구문들을 모두 JMP로 바꾸어 진행하였지만 사실 하나만 바꿔도 해결할 수 있다. 바로 flag로 가는 주소로 바꾸면 된다. 크랙판으로 새롭게 프로그램을 만들고 실행한 모습이다. IDA랑 단축키가 비슷해서 생각보다 편했다.
보안프로젝트에서 강의하는 윈도우 리버싱 ( window reversing) 완벽 이해 - 레나 챌린지 풀이 를 듣게 되었다. 리버싱에 대해서 혼자 독학 해서 공부를 하고 있었으나 아무래도 혼자 공부하기 보단 전문가의 강의를 들으면서 놓친 부분을 찾아가는 시간을 가지는게 좋다고 생각해서 듣게 되었다. 10강 이후부터는 유료이기 때문에 포스팅도 비공개로 돌릴 것이다. 운영체제는 xp에서 하고 올리디버거를 사용한다고 한다. IDA나 기드라만 사용했던 나에게는 생소 했다. 암튼 강의에서 시키는대로 세팅을 진행 했다. 공유 폴더를 만들어 실습파일들을 옮겼다. 15년 만에 XP를 만나게 되었다. 오랜만에 보니 옛날 기억들이 떠오른다.
welcome함수가 진행하고 login함수가 진행된다. 실행을 시켜보았다. passcode1를 치자마자 세그폴트가 뜬다. 그이유는 scanf에 레퍼런스가 없다. 초기화 되지 않은 passcode1에 쓰레기값이 들어가 있어 내가 입력하면 그 쓰레기값에 값을 넣는것이기 때문에 오류가 난다. name입력에서 bof가 일어나 passcode1의 값을 덮을 수 있다. passcode1의 값을 미리 fflush got주소로 덮어두고 passcode1을 입력 받을때 system주소로 입력 해준다. name : ebp-0x70 passcode1 : ebp-0x10 차이는 96 fflush got주소 : 0x804a000 인자 값 가져오는거 까지 생각해서 0x080485e3으로 사용해준다.