- Today
- Total
목록Pwnable/Crackme 직접 푼것 (7)
Phantom
이번 문제도 이름과 시리얼을 크랙하는 문제로 보인다 비베로 짜였고 비교 함수가 있을 것으로 추측된다. 두개에 BP를 걸고 한번 실행해본다. 조금 아래로 내려보면 이것이 있다. 난 이게 아스키인줄 알고 3일간 삽질했다 무시하고…..그냥 넣으면 되더라 그래서 시리얼을 넣고 실행해보면
도스로 뜨는 프로그램이다. 비밀번호 입력하면 또 참 거짓으로 나눠줄 것 같은데… 디버거로 열어보자 문자열은 이상한 것이 나온다 이제껏 보지 못한 언어인 듯 하다. PEID로 뭐로 짜여져 있는지 알아야겠다. …dev-C++이네 뭐…그래 함수를 찾아봐야겠다. Strcmp 함수 발견 두 곳에 BP를 걸고 실행한다. ….? BP를 넘었..? 프롤로그 이후 저곳에서 모든 것이 일어나는 것 같다 저 안에 들어가서 문자열을 찾아보니 나왔다. Correct와 Wrong에 BP를걸고 먼저 들어가 분기문에도 BP를 걸어야겠다. 16-03-12 아…. 항상 삽질을 한다..ㄷ 지금 저 CMP문에 7F97E56C를 아스키로 생각해서 아니라 생각했는데 그래서 계속 삽질했는데 저걸 10진수로 바꿔야 하더라 그 힌트를 IDA에서 얻..
이번에도 시리얼을 넣고 체크하는 것 같다 디버거로 열어보자 바로 문자열을 봤는데 시리얼이…???? 뭐지 이문제? 두곳과 분기에 BP를 걸고 실행해봐야겠다 호오.. strcat로 로컬 디스크를 붙이는 것 같은데 로컬 디스크는 어디서 온것이지? 이 함수가 VolumeNameBuffer 를 인자로 해서 strcat를 한다. 이제 그럼 천천히 아래로 내려가보자 위의 루프와 함수를 다 거쳐서 마지막 비교함수에 왔다 저것이 시리얼이고 위에가 내가 입력한 문자열이다. 다르면 에러로 보낼것이다. 저 시리얼을 그대로 입력해보자 clear
시리얼을 찾는 문제이다. 비베로 만들어졌고.. 맞는 시리얼이 입력되면 아래 Registered가 활성화가 되는 것 같다. 한번 디버거로 열어보자 비베 머신 들어가기 전에 문자열을 봐야겠다. . 문자열이 있다 BP를 걸고 부분으로 가보니 이렇게는 되어 있으나 다른 곳과 동떨어진 곳이었다. 함수를 봐야겠다. 문자열 비교 함수 발견 여기다 BP를 걸고 실행해봐야겠다. 모두 입력이 되는 것이 아닌가보다 a한개 입력했는데 값이 나왔다. 이 값을 따로 실행해서 넣어봐야겠다. 활성화가 됐다 clear
프로그램을 클릭하면 이렇게 뜨면서 종료한다. 보아하니 keyfile이 없어서 에러라 뜨는 것 같다. 디버거로 열어보자 보아 하니 CreateFileA함수의 리턴값으로 아래 JE문에서 분기가 일어나는 것 같다. CreateFileA함수에 대해 알아봐야 할 것 같다. CreateFile 함수에 대한 자세한 것은 여기로 함수의 인자 중에 Mode에서 OPEN_EXISTING으로 되어 있다. 존재하는 파일을 연다는 것이다. 그리고 호출 된 후 eax를 비교하는 것을 보아 리턴값만 알면 될 것 같다. 함수가 리턴에 성공하면, 리턴값은 특정 파일이나 디바이스, 이름있는 파이프, 또는 메일 슬롯의 열려있는 핸들값이 된다. 영어 맞나..? 나는 파일이 없으므로 -1을 리턴하고 같으므로 JE에서 에러로 향한다. 그럼 파..
네임과 시리얼을 넣고 Check를 누르면 맞는지 안맞는지를 나누는 프로그램 같다 디버거로 열어보자 비주얼 베이직으로 만들어진 프로그램들은 이 엔진을 사용한다 그래서 이 안으로 들어가야 한다. 우선 여기서 문자열들을 보니 이렇게 되어있다. 비교하는것이 어떻게 되어있는지 몰라 찾아보니 vbaVarTstEq함수가 문자열 비교 함수인 것 같다. 여기에 BP를 걸고 들어가봐야 겠다. 함수 콜되기 전에 인자 넣는곳에다 BP를 걸고 했는데 스택 근처에 문자열이 보인다, 그리고 아래에 다른 문자열도 보인다. 혹시 Phantom의 시리얼 값이 "B4CCC5D2"는 아닐까 해서 한번 값을 넣어봤다. 맞는 것 같다.
CrackMe 1번을 실행하면 다음과 같이 뜬다. CD-Rom처럼 인식하게 만들라고 한다. 우선 디버거로 열어봐야 할 것 같다. 이 문제에서 핵심은 GetDriveTypeA같다. 실행 해보니 리턴값으로 3을 준다. 이 값이 무엇을 의미하는지 알아보자. 지금 리턴값의 3은 HDD로 인식했다 우리가 인식하게 해야할 값은 5번이다. 애석하게도 내 PC에는 cdrom이 없다. 그래서 리턴하고 난 다음에 값을 5로 조정할 것이다. 에…..5로 바꿔도 되지가 않네 마지막에 왜 401003과 3을 비교하는건지 이해가..ㄷ 결국 401003으로 바꾸고 실행했다. Clear!!