목록Security/Reversing (24)
cdor1's lab
password를 출력해주는 함수가 존재한다. eip 변경으로 패스워드 출력
윈도우 부팅하기 귀찮아서 그냥 맥 vm에서 풀었는데 너무 쉬웠다..compare 함수 부르기 전에 내가 입력한 값과 원본 키값이 stack에 저장되는 것을 보고 알아냈따
패스워드를 구해야 하는 프로그램이다.디버거로 열어보면 id와 DonaldDuck을 비교하는 부분을 쉽게 볼 수 있다.그래서 id는 DonaldDuck으로 넣어주면 되고 내가 넣은 password의 hex값과 원래 password값의 hex값을 비교한다.dec로 고쳐주고 패스워드를 넣어주면 되긴 하는데 비교하기 전까지 bl값은 password가 옳든 id가 옳든 변경되지 않는데이로써 밑에있는 je문이 무조건 실행되서 wrong이 출력되게 된다. nop나 jne로 패치해주자.
upx패킹된 프로그램이여서 풀어주고 시작해야한다. 나의 남은 군생활...을 카운트 해주는 프로그램이다. isdebuggerpresent로 debugger를 체크하니까 리턴값을 0으로 만들어 우회해준다. ebp에 담겨있던 카운트 값에 hardware bp를 걸어 접근할때마다 break가 걸리게 설정해서현재 카운트 값과 달성해야하는 카운트를 비교하는 부분을 찾았다.
귀여운 프로그램이다. 아마도 프로그램이 실행되면서 코드가 복구되는 것 같은데, PEID로는 아무것도 보이지 않아서 call 목록을 보았다. strcmp라는 함수가 있길래 내가 입력한 값과 비교하는 것 같아서 bp를 걸고 실행했다. 생각했던 대로 vbaStrCmp함수에 bp가 걸리고 비교하는 값이 스택에 보이게 되어 키값을 알아낼 수 있었다.
3번과 동일하게 name이 CodeEngn일 때 serial을 구하라고 한다. 반복문을 돌리면서 압축된 내용을 xor하며 풀어주는데 패킹을 풀어주는 과정이다. strcmp함수를 부르길래 bp를 걸고 name과 serial을 넣어주었다. 슥-삭!
name과 serial을 넣어 비교하는 프로그램이다. CodeEngn이 name일 때 serial을 구하라는 것을 봤을때 name값과 연산을 해서 serial을 만드는 것 같다. 분석 하는 도중 GetDlgItemTextA함수로 입력을 받는데 Name값의 길이와 3을 비교해서 3보다 크다면 jmp하지 않는다.바로 밑에는 wrong을 출력해주는 함수가 기다리고 있다.우리가 입력한 CodeEngn의 길이는 8바이트이므로 저 체크에 걸리게되는데cmp eax, 8로 바꿔서 jmp할 수 있게 도와준다. 우리가 입력한 Name 주소를 eax에 넣고 연산한 뒤 strcmp로 연산된 Serial과 입력한 Serial을 비교한다. 답 : 3265754874