Total

    CodeEngn Basic15 풀이

    name이 CodeEngn 일때, 시리얼을 구하랍니다. 단순한 문제입니다 내부알고리즘을 분석하면되겠군요. 다행히 패킹되어있지는 않습니다. 시리얼을 임의로 123으로입력해줍니다. Ollydbg로 분석하겠습니다 . All referenced text strings로 보면 패킹이되어있지않아서 그대로다 드러납니다.성공메세지가 있는곳으로 가줍니다. 단순하게 제가 입력한 값이랑 CodeEngn이라는 글자로 만들어낸 시리얼값을 비교해서 같으면 성공메세지를 띄웁니다. EAX에 있는 7B값은 10진수로 제가 입력한 123입니다. CodeEngn에 해당하는 시리얼값은 6160으로 10진수로변환하면 24928입니다. 24928을 입력하니 맞다고 뜨네요 풀이완료!

    CodeEngn Basic14 풀이

    이름이 CodeEngn 일때 시리얼을 구하랍니다. 정답은 여러개가나올수있고 5개의 숫자로된 정답을 찾으라네요. 프로그램을 한번실행해 봅시다.입력받는 박스가 두개가 있네요. 체크버튼을 누르면 시리얼과 비교해서 결과화면을 띄웁니다.쉬운 UPX패킹 방식입니다. 손쉽게 OEP를 찾아줍시다. (문자길이를 구해서 그 길이만큼 반복)1.문자가 저장된곳에 접근 2.해당문자에서 1글자만 따옴3.해당문자 아스키코드값을 제곱한다.4.그값을 ESI에 더한다.5.해당문자 아스키코드값을 오른쪽으로 1칸시프트한다.6.시프트한값을 ESI에 더한다.7.ESI에 다시 해당문자아스키코드값을 더한다.8.EAX값을 증가시키고 ECX값을 감소시킨다. ECX값이 0이될때까지 반복한다. 최종적으로 ESI에 누적된 값을 스택에 푸시한다. 밑칸에 있..

    CodeEngn Basic13 풀이

    코드엔진 Basic 13번 문제입니다. 정답을 찾으라네요. 그냥 제작자의 의도대로 문제를 풀라는것같아요.일단 PEiD로 패킹이 혹시 되어있는가 확인해보겠습니다.C#으로 작성된 프로그램이라는데요 패킹은 없는것같습니다. 혹시 콘솔응용프로그램 일까요..? 실행시켜보겠습니다.예 콘솔응용프로그램이 맞습니다. 사용자로부터 문자열을 입력받고, 저장된 패스워드와 비교를 해서 성공메세지를 띄우는거 같네요. 올리디버거로 가보겠습니다.음.. 올리디버거로 열리긴하는데 그냥 공백화면만 뜨네요.. 왜그럴까요 좀더 고민해보곘습니다. PEView로 파일을 한번살펴보겠습니다.한참헤메다가 인터넷검색찬스... C# 디컴파일러를 이용하라네요 .......... 한시간동안 삽질했네요 디컴파일러를 이용하니 쉽게 디컴파일되어서 세세한 메소드 내..

    CodeEngn Basic12 풀이

    Basic12번입니다. 성공메세지대신에 정답 Key값을 띄우라는군요.key값도 구해야하고 그 키값이 있는 공간으로 접근해서 MessageBox 파라메터값도 수정해야겠군요. 일단 파일을 실행시켜봅시다. 키값을 입력하면 성공메세지를 출력하겠군요 올리디버거로 가봅시다.코드는 매우 간단합니다. 에디트박스 에서 입력받은값과 7A2896BF를 비교해서 같으면 성공메세지를 띄웁니다.10진수로 변환하면 2049480383 성공키가 됩니다. 이제 이 키 값을 성공메세지의 내용으로 띄우려면 메세지박스의 세번째파라메터인 0040353B 공간에있는 문자를 키값으로 변환해주면 됩니다. HexEdit로 열어봅시다.일단 PEView로 그 0040353B라는 공간이 파일에서는 어디에 있는지 찾아야겠죠? ImageBase 는 0040..

    CodeEngn Basic11 풀이

    Basic11번 문제입니다. OEP와 StolenByte를 찾으라는군요. 당연히 패킹이 되어있겠죠? PEiD로 확인해줍시다.UPX패킹이니 간단하게 PUSHAD 에서 하드웨어브레이크를 걸고 달려줍니다.POPAD가 있고 그밑에 OEP로 점프하는 코드가 있습니다. MessageBox의 파라메터 3개를 미리 스택에 넣는걸로봐서 저 12바이트의 OPcode가 StolenByte라고 추측할수 있겠군요. OEP로 가봅시다.역시 예상대로 12바이트가 NOP으로 채워져있습니다. 여기에 StolenByte를 끼워넣어줍시다. 그리고 덤프를떠주면 끝! 답은 나왔네요 OEP+StolenByte 가 정답입니다.풀이완료 !

    CodeEngn Basic10 풀이

    Basic 10번문제입니다. PEiD로 한번 보겠습니다.처음보는 패킹이군요. 실행을 한번 시켜보겠습니다.이름과 시리얼을 입력하는 부분이 보이네요. EditBox 부분에는 키보드 입력이 되지않습니다. 코드상에서 수정해야되나 봅니다. 올리디버거로 가보겠습니다.음.. UPX 패킹과 동일하게 처음부분에 PUSHAD 하는 부분이 있습니다. POPAD가 있고 그뒤에 점프문이 있을까요...?? POPAD가 있고 JMP 문대신 RETN문이 있습니다. 그쪽으로 이동하게되면...알수없는 코드들이 나오게됩니다. 아마도 패킹때문이겠죠..?? 덤프를 뜬후 다시 덤프뜬파일을 올리디버거에 올려보았습니다. 참조된 String 목록을보니.. well done이라는 문구도 보이고 제대로 찾아온것같네요 그럼 OEP 는 00445834 이..

    CodeEngn Basic09 풀이

    StolenByte를 구하라는 문제입니다. 훔쳐진바이트..?? 모르겠습니다.일단 어떤파일인지 PEiD로 보겠습니다. 일단 UPX로 패킹되어있는걸 알아냈습니다. 동적분석을위해 한번 실행해 보겠습니다. 키파일 체크를위해 ok를 누르랍니다. 눌렀더니 파일이없다고 하네요 ok를 누르게되면 어떤특정파일이 있는지없는지 비교를 하는것같습니다. 올리디버거로 가서 한번보겠습니다. UPX패킹이니 하드웨어브레이크를 걸고 달리겠습니다. OEP를 쉽게 찾아냈습니다.OEP로 가보니.. 코드가 매우 간단합니다. 어셈블리어로 작성된것같습니다. 파일을생성하고, 파일이 없으면 에러문구로 점프, 파일이 생성되있어도 파일사이즈를 구한뒤 18바이트이어야 성공메세지로 점프하는군요.왜 CreateFile함수가 실행되는데도 파일이 안만들어질까 해..

    CodeEngn Basic08 풀이

    Basic08 풀이입니다. OEP를 구하라는군요. 패킹이 되어있나봅니다... 아오파일을 받아보니 파일은 그냥 단순한계산기 입니다. 역시나.. UPX 패킹이 되어있습니다. 올리디버거로 가보겠습니다.OEP를 찾는문제이므로 간단하게 풀었습니다.. 하드웨어브레이크를 걸고 POPAD까지 이동..JMP 문까지 이동 풀이완료..!? OEP를 찾았습니다. 먼가 찝찝하네요 이동해보니 PE헤더 코드부분이 있었습니다 맞는것같네요.

    CodeEngn Basic07 풀이

    Basic07 번째 문제입니다. C드라이브의 이름으로 시리얼을 생성하는 프로그램인것같습니다. 실행시켜보겠습니다.시리얼을 입력받고 체크하는 단순한 프로그램입니다. 일단패킹 여부를 확인해보겠습니다. 음 패킹은 되어있지않은것같네요.올리디버거로 가보겠습니다.어셈블리어로 작성이 되었는지 코드가 매우 간결합니다. 4562-ABEX 에서 4567 한자리각각 1씩 더하는작업을 두번해준뒤 L2C-5781 뒤에 덧붙여준것이 시리얼이군요.시리얼은 쉽게 풀었고 코드엔진의 문제를 해결해 보겠습니다.GetVolumeInformation 함수안을 살펴볼까요 일단 인수는 8개나 받는 함수입니다. 성공하면 0이아닌값을 반환하고 실패하면 0을 반환합니다.드라이브 이름에 관한 질문이므로 GetVolumeInformation의 2번째 인수..

    CodeEngn Basic06 풀이

    후... 이제는 대놓고 언팩문제가 나오네요 도전해봅시다얼마전에 책을읽었는데 마음에드는 공식? 이 있어서 적어봅니다. 해커는 대부분의 사람들이 말하길 노력보다는 재능이다.. 노력으로 할수없는부분이 있다고 말을하는데 재능은 그다지 중요하지 않다고 합니다. 재능 x 노력 = 기술 기술 x 노력 = 성취아무리 재능이 있어도 노력하지 않으면 이루어 질 수 없고, 재능이 없어도 노력을하면 무엇이든 이룰수 있다고합니다.다시 문제로 돌아가보겠습니다. OEP와 시리얼넘버를 찾으라네요.동적 분석을 위해 프로그램을 실행시켜보겠습니다. 매우 단순한 프로그램입니다. 시리얼을 입력하고, 시리얼이 틀리면 Wrong serial 이라는 메세지박스를 띄우는 프로그램입니다.. 아마 내부에는 복잡하게 언팩되어있겠죠 PEID로 파일을 한번..

    CodeEngn Basic05 풀이

    오늘은 5단계를 풀어보도록 하겠습니다. 많이쉬었네요.. 분발해야겠습니다.일단 동적분석을위해 프로그램을 실행시켜보도록 하겠습니다. 일단 실행시키면 이런 창이 뜨게됩니다. 등록되지않았다고 적혀있고 밑에는 알수없는 시리얼넘버 12자리가 있습니다.그냥 Register now를 누르게되면 시리얼이 틀렸다고나옵니다.음 아마도 알맞는 시리얼넘버를 누르면 맞다는 창이 뜨겠네요. 올리디버거로 가봅시다.일단 실행시키게되면 이 프로그램은 압축,암호화, 그리고 숨겨진 데이터가 많아서 코드분석결과가 믿을수없다네요 음 일단 예를 눌러봅시다..실행을 하긴했는데 F8을 한 10분동안 누르고있었는데도 프로그램이 실행이 안되네요.. 이때까지 야매로 한방법은 안통하나봅니다..함수명도 스트링 참조도 아무것도 안나오네요 음 좀더 고민해봐야겠..

    CodeEngn Basic04 풀이

    흠.. 벌써4단계군요.. 문제를 봐서는 전혀 감이 안옵니다. 디버거를 키면 어떤함수가 감지를 한다는거군요. 프로그램을 한번 실행시켜 보겠습니다. 프로그램을 그냥 실행해보면 정상이라고 뜨네요 1초간격으로요. 음 그럼이제 올리디버거를 이용하여 프로그램을 열어보겠습니다.올리디버거로 열고 Run을 하니 디버깅툴을 감지하네요. 자 이제 찬찬히 알아보도록 하겠습니다. 생각으로는 시나 시쁠쁠로 작성된 코드같고 어떤 함수를 이용해 디버깅툴이 감지되면 문자열 출력함수를 이용하여 화면에 문자를 띄우는것같네요. 문자열을 출력하는 함수를 한번 찾아보겠습니다.일단 메인함수 같은곳에 들어왔습니다. 비쥬얼스튜디오로 컴파일한 파일에서 흔히볼수있는 CCCCCCCCC로 초기화 하는 코드가 보입니다. 잘찾아 왔군요. 디버거를 찾는함수는 ..

    CodeEngn Basic03 풀이

    코드엔진 3번문제 풀이를 해보겠습니다. 비주얼베이직에서 스트링 비교함수의 이름을 묻습니다. 비주얼베이직은 접해본적이없어서 당황스럽네요.. 음 아마 cmpStr 이런류의 함수이름이 아닐까하고 추측해봅니다. 실행을 한번해봅시다.영어가 아니라서 무슨뜻인지는 모르겠지만 아마도 이 메세지박스를 없애라는 뜻이겠죠?? 일단 확인을 누릅니다. 뭔가 코드를 입력하는창이 나옵니다. Registeration 인거같은 버튼을 누르면 무언가 아니라고 뜹니다. 올리디버거로 가봅시다.Search for에 가서 모든 참조하는 String을 보겠습니다. 동적분석하면서 보았던 문자열들이 보이는군요 더블클릭 해줍시다.해당 문자열에서 BP를 걸어주고 다시 실행시켜보았습니다. 스택에 문자열을 넣고 함수를 호출하는군요. 402C92 번지에 있..

    CodeEngn Basic02 풀이

    코드엔진 Basic02를 풀어보도록 하겠습니다. 우선 실행을 시켜봅시다.실행파일이 손상되어 실행이 정말안되는군요.. 올리디버거로도 열리지가 않습니다. HxD로 한번열어보았습니다.Crackme#1.JK3FJZh 라는 문구가 보입니다. 패스워드인것같군요. 문제풀이 끝!

    CodeEngn Basic01 풀이

    1일 1문제로 매일매일 한문제씩 풀어보기로 하였습니다. 뭔가 목표를 정하지 않으니 목적없이 시간만 흘러가는것 같네요...1일차 문제 Basic01일단 파일을 받아 실행을 시켜보았습니다.내 하드를 시디롬으로 인식하게 만들라는군요.확인을 눌렀더니 시디롬이 아니라고 뜹니다. 올리디버거로 확인해봅시다.코드가 정말 짧습니다. Stub코드가 안보이는것은 어셈블리어로 작성되었다는 소리죠. 살펴보니 GetDriveTypeA라는 함수를 사용해 드라이브타입을 리턴받아 CMP EAX,ESI 어셈블리어를 이용해 비교후 같으면 점프합니다. 비교하기전 EAX와 ESI 레지스터 값입니다. 다르기때문에 점프하지 않습니다. 단순하게 성공메세지를 띄우기 위함이므로 JE 를 JMP로 바꿔줍시다.성공입니다 !