- Today
- Total
목록Pwnable/Crackme 처음 풀 때 (18)
Phantom
계속 시리얼 문제인가 보다 PEID로 뭐로 짜여졌는지 확인 해야 겠다. 어셈이라 코드가 깔끔할 것 같다. 음….전의 문제와 비슷할줄 알았는데 전혀 모르겠다 WriteUp을 보고 풀긴 했는데 왜 보수를 취해야 하는지 뭐…어셈 명령어에 모두 N이 들어가기 때문 이란건 알겠는데..음… EDI+x가 되면서 하는게 한 문자 검사하고 다음 문자 검사하고 그런 것인가 보다 아무튼 보고 풀면 모두 and연산을 하며 JNZ로 점프를 하는데 모두 통과해야한다. 이 모두를 변환해야 하는데 우선 0AD가 뭘 뜻하는지는 모르겠지만 AD인거 같다. 16진수이니 이걸 2진수로 변환하고 보수를 취한다 보수는 아마…처음 AD부터 아스키에 걸리는게 없으니 바꿔보면 52 : Ascii – R이 된다. AD : 1010 1101 -> 01..
비베다..이번엔 이름과 시리얼을 매치시키는 것 같은데 아무렇게나 입력 후에 Check를 하면 없어진다. 그래서 우선 비교함수를 찾아 그 근처의 변수와 함수에 BP를 걸었다. 그리고 디버깅을 한다. 아이다보다 이뮤니티가 더 찾기 좋더라…이유를 모르겠다 허허… 바로 시리얼이 나왔다. 물론 아이다에서도 찾을 수 있다. 찾는 과정이 조금 힘들뿐…방법을 알면 이뮤니티에서 먼저 찾는게 더 빠르더라 방법을 잘 모르겠으나 어떻게 찾긴 찾았다 그리고 입력하니 성공했다.
이번에도 시리얼을 얻는 문제인가보다 PEID로 보니 C++이다 그래서 IDA로 보니 어마어마 하다… 헥스레이로 돌려 보니 저 아래에 2140661100을 봤어야 하는데 위에 것 만보고 생고생을 했다. 부주의맹시..보고 싶은 것만 봤다. 분석을 따로 할 필요 없이 바로 저 값을 보고 값을 집어 넣으니 . 바로 답이 나왔다 참…좋은 도구이다 IDA..생고생했는데.. 그리고 Crackme가 20까지 있는 줄 알았는데 이게 simples.kr crackme 1번이더라 허허…
이번에도 시리얼을 찾는 문제인 것 같다. 어셈으로 만들어졌다. 그래픽 뷰로 보니 이것이 전부이다…우선… 각각의 함수를 알아봐야겠다. GetModuleHandle 함수는 lpModuleName에 해당하는 모듈이 프로세스 주소공간에 매핑되어 있다면 해당 모듈의 핸들을 반환한다. 그리고 DialogBoxParam 함수는 대화상자를 만드는 함수인데 IParam매개변수를 추가한것이라 한다. 이 함수 안에 들어가보니 lstrcmpia 함수가 문자열을 비교한다. 이 함수에 BP를 걸고 A를 입력하니 비교 문자인 시리얼이 나오더라 그래서 따로 프로그램을 실행시켜 저 값을 넣었더니 값이 맞았다. 처음으로 빠르게 WriteUp을 안보고 푼 문제가 되었다
Crackme 4는 또 비베인가보다 아 비베 싫다 그런데 이번 문제는 은근히 쉽더라 아이다에서는 잘 되지 않았는데 이뮤니티에서 아주 쉽게 가능했다 아이다에서도 값은 맞았으나 Register버튼이 떠오르지 않고 비교함수만 무한반복했다. 자 우선 프로그램을 실행 해보자 시리얼을 알면 Registered 버튼이 활성화 되는 것 같다. 우선 비베엔진 시작에 BP를 걸고 F7로 들어가 보겠다. 그리고 CrackMe 2에서처럼 OEP??음..모르겠다 암튼 정식적으로 프롤로그가 되기 전에 View-String을 보면 실행되는 함수를 찾을 수 있다. 스트링 비교함수인 vbaStrCmp에 BP를 걸고 들어가 보겠다. 그리고 a를 입력 했다. 바로 vbaStrCmp함수실행 직전으로 오더라 그리고 eax와 ecx를 넣고 비..
프로그램을 실행하니 클릭하여 키 파일을 체크하란다. 음….키 파일을 찾을 수 없단다. 그러면서 프로그램 종료….. ?!!! 고로 우리는 키 파일을 찾아야 한다는 것인데 역시 안을 들여다 봐야겠다. 이게 프로그램의 전체 모습이다. 처음 메시지박스함수 다음 CreateFileA함수의 인자 값들이 궁금하다. 그래서 msdn에 검색을 했는데… CreateFileA("abex.l2c", 0x80000000, 0, 0, 3, 0x80, 0); 이것인데 뜻이 뭐냐하면 HANDLE WINAPI CreateFile( _In_ LPCTSTR lpFileName, _In_ DWORD dwDesiredAccess, _In_ DWORD dwShareMode, _In_opt_ LPSECURITY_ATTRIBUTES lpSecur..
이름과 시리얼을 입력하고 체크를 누르면 성공 또는 실패가 되는 문제이다. 은근히 간단하더라. 이제 익숙해져서그런가..하하 우선 아이다에 올려서 보려 했으나 그래픽뷰가 먹히질 않는다 그리고 오히려 이뮤니티가 더 편한기분이랄까 그래서 이뮤니티로 풀어보려 한다.. 먼저 VB머신 들어가기 전에 분기문을 찾으려 문자열을 검색했더니 있다. 아무거나 들어가서 그 위에 비교함수나 명령어가 있는지 알아봐야 겠다. 비교함수가 딱 한가지 있더라. 이 함수와 위의 인자 두 개에 BP를 걸고 F9를 누른다. 두 개의 인자를 받고 vbaVarTstEq함수를 실행한다. 그리고 JE명령어를 통해 성공 또는 실패 분기문으로 들어간다. JE를 수정해서 원하는 곳으로 가도 되고 ZF플래그를 조작해도 되지만 원하는 건 시리얼 값이다. 그래..
리버싱의 처음을 대표한다고 해도 모자라지 않을 abex crackme 1 이다 이것을 나도 처음 리버싱을 배울 때 풀어 본 적이 있다. 그리고 아주 잠깐 어떤 스터디를 들었는데 거의 리버싱 스터디였다. 난 견디지 못하고 나왔다. 그 때 당시 이제 레지스터를 익히는 중 이고 함수 프롤로그 에필로그 등등 메모리의 기초를 익힐 때라 정말 힘들었다. 그러다 어쩌다 줏어 들었던 EAX값이 5여야 원하는 방향으로 분기가 된다는 것을 들은 것이 전부이다. JMP 방식도 알긴 하는데 다 적어볼까 한다 우선 프로그램을 실행 해보자 음…하드를 CD-Rom으로 인식하게 하라고 하며 CD-Rom이 아니라며 시무룩해한다. 디버깅 툴로 자세히 살펴보려 한다 ida를 사용 했다. 여태 gdb만 사용하다가 이것을 사용하니 처음엔 조..