Total

    CodeEngn Malware03 풀이

    3번도 마찬가지로 어떤 악성코드 소스를 분석하는 문제입니다. 이번 문제는 매우 간단합니다. 어떤 함수인데 데이터랑 그 데이터를 길이를 받고 있습니다. 해당 데이터를 접근하여 해당 값들을 하나씩 value 변수에 중첩시키고 있습니다. 그리고 함수를 리턴할 때 그 중첩된 값 들을 비트반전시켜 리턴해주고 있습니다. 아마도 체크썸함수를 계산해주는 함수로 통신시에 체크섬값을 만들어서 데이터의 무결성을 판단하는 체크썸을 만들어서 공격자가 의도한 악성코드를 전송하는데 사용할 것 같습니다.

    CodeEngn Malware02 풀이

    2번문제입니다. 역시나 악성코드 소스분석입니다. 일단 또 한줄씩 살펴보겠습니다.첫부분을 보면 body라는 배열안에 xml헤더 같은 문자열을 정의하는 부분이 보입니다. 일반적인 xml 정의 코드와는 다르게 DAV라는 문자가 있네요. 그래서 검색을 해보았습니다. 해당 xml코드는 WebDAV라는 프로토콜을 사용하기 위한 정의 방법이였습니다. 여기서 WebDAV 프로토콜은 웹을 읽고 쓰기가 가능한 매개체로 만들고, 사용자가 서버(일반적으로 웹 서버나 웹 공유) 의 문서를 만들고 변경하고 이동할 수 있는 프레임워크를 제공한다고 합니다.일반적인 WebDAV 정의방법입니다. 해당코드와 매우 유사합니다. WebDAV를 사용하는걸 확실히 알 수 있습니다. 여기선 sql문이 보이는것으로 보아서 어떤 쿼리문을 실행시키는 ..

    CodeEngn Malware01 풀이

    악성코드소스를 분석하여 현재 이 악성코드의 공격방법을 알아 내는 것이 목표입니다. 소스코드를 열고 한줄한줄 분석해 보았습니다.현 악성코드의 앞쪽 부분입니다. 단순히 TCP/IP의 헤더를 참조하여 헤더의 값을 세팅하고 있습니다. TCP/IP 에 대하여 좀더 알아보면.. IP는 OSI 7계층 중에서 3계층에 속하는 프로토콜로 Network 계층을 의미합니다. 이 계층은 여러개의 노드를 거칠때마다 경로를 찾아줍니다. 그리고 다양한 길이의 데이터를 네트워크들을 통해 전달하고, 그과정에서 전송계층(Transport Layer)이 요구하는 서비스 품질을 제공하기 위한 기능적, 절차적 수단을 제공합니다. IP 헤더의 모습입니다. 코드에서도 해당 구조체 멤버들에게 직접 값을 넣어주는 것을 볼 수 있습니다. 다음은 TC..

    CodeEngn Advance07 풀이

    시리얼을 찾아내는 문제같네요. 프로그램을 확인해보니 C#프로그램이였습니다. 처음에 ExeInfo로 파일부터 확인하는 습관을 들여야겠네요..처음에 아무생각없이 바로 디버거로 열었다가 뻘짓만했네요..C#프로그램에대해 간단하게 설명하면 CLI 인프라스트럭쳐 안에 CIL 이라는 중간언어를 CLR이라는 가상환경에서 돌리고 CLR이 CIL(공통중간언어)를 실행시킵니다.(바이트형태) 이 특징때문에 dotPeek 같은프로그램을 사용하면 코드가 그대로 드러납니다.(패킹,난독화 안되있을시) dotPeek으로 열어보았습니다.이프문을 통과해야지 밑의 성공메세지를 띄웁니다. 프로그램분석을 힘들게하기위해 변수명같은걸 아무 의미없는 문자로 해놓은거같네요.dotPeek에서 프로젝트를 export한뒤 비쥬얼스튜디오로 열어주고, Bru..

    CodeEngn Advance06 풀이

    띠용... 문제가 남은 군생활 구하는 문제입니다.. 무슨 프로그램인지 궁금하네요 ㅋㅋㅋ실행하면 이런 메세지가뜨고 확인을누르면 숫자가 1씩 계속증가합니다.아마도 어떤특정한 값이되면 프로그램이 종료될거같네요. 메세지박스를 출력하는부분입니다. 프로그램종료를위해 값을비교하는부분이 밑에있겠다라고 예상해볼수있습니다.트레이싱하다보니 메세지박스의 내용안에 값을세팅하는 부분이있었습니다.이값은 eax값을 받아와서 출력을위해 숫자값을 아스키코드값으로 변경 시켜주고 있었는데요. 아마 프로그램종료를 위해 eax값이랑 어떤부분을 비교하겠죠? 그럼 eax값이 어디서 세팅되는지 알아보아야된다는 생각에 치트엔진을 써보았습니다.치트엔진이 생각외로좋더라구요 특정주소에 쓰거나 접근하는 주소를 찾는데는 참 편리합니다. 메세지박스의 내용부분의..

    CodeEngn Advance05 풀이

    시리얼을 구하는 문제입니다.음 혹시나 문자열 비교함수가 있는가해서 가보니 딱하나있네요.. 너무나 쉽게 발견해버림..제가 임의로 입력한값인 123 하고 실제 시리얼값을 비교하고있습니다. 시리얼값은 677345 입니다. 풀이완료!

    CodeEngn Advance04 풀이

    이문제도 역시 이름이 CodeEngn 일때 시리얼을 구하는 문제입니다. xor로 코드가 패킹되어있습니다. 시작부분에서 풀어줍니다. xor 연산후에 string이 보이는군요 실패메세지 쪽으로 가줍니다. 값을 받아오는 부분에 bp를 걸고 임의의값인 123을 넣어줍니다.값을 비교하는 부분입니다. 시리얼은 403104주소에있는 LOD-59919-A0024900 입니다.풀이완료!

    CodeEngn Advance03 풀이

    이름이 CodeEngn 일때 시리얼을 구하는 문제입니다. 실패시 이런 메세지가 뜨게되네요음 일단 실패메세지가 뜨니까 실패메세지 뜨는곳에 bp를 걸어줍니다. 두곳이 있으니 두곳다 보내줍니다.실패메세지가 있는쪽에 시리얼이랑 비교하는 부분이 있을거라 예상됩니다.음?? 너무 쉽게 시리얼이 나오네요 아마 출제자는 키젠을 만들라는 의도같네요.. 일단 CodeEngn에 대한 시리얼은 3265754874 풀이완료 !

    CodeEngn Advance02 풀이

    어드벤스드 2번문제입니다. 아무 설명없이 정답을 구하라고 하네요음 ;; 파일이 깨져있네요 EXCEPTION_ACCESS_VIOLATION 예외가 발생합니다.. 혹시 원본파일 가지고 계신분 .... 주시면 감사하겠습니다 ㅠㅠ

    CodeEngn Advance01 풀이

    드디어 베이직이 끝나고 어드벤스드로 들어왔네요 ㅎㅎㅎ... 엄청오래걸렸지만 ㅠㅠ 이문제는 베이직에서 본거랑비슷하네요 time 관련함수를 찾아볼까요 일단 안티디버깅이 되어있으니 피해주시구요timeGetTime 함수로 시스템시간을 받아오고 있네요. 함수를 두번 실행시킵니다.두개의 함수의 차를 구합니다. 그리고 ebx+4에 있는 어떤값이랑 비교해서 그값보다 크면 점프합니다.ebx+4 에 있는 값은 337B로 10진수로는 13179입니다. 13179ms 후에 프로그램은정지됩니다.정답은 MD5 해시로 변환하라고 했으니까 변환하면.. DB59260CCE0B871C7B2BB780EEE305DB 입니다.풀이완료 !

    CodeEngn Basic20 풀이

    crackme3.key 안의 파일의 데이터가 무엇인지 구하는 문제입니다. 코드는 매우 간단하고 직관적으로 되어있습니다. crackme3.key 파일을열고 그안의 12바이트데이터를 불러옵니다.파일은 굳이 만들지않고 없을시에 다른곳으로 점프하는걸 막아서 파일이 있는척했습니다. ReadFile함수이후의 분기점에서도 그냥 넘어가게 해두었구요 알고리즘은 직접 한줄씩 트레이싱 해보면 간단하게 알수있습니다.중요하게봐야할 부분은 주소 401079 부분 부터인데요 여기서 4020F9주소에 12345678과 xor 한값을 넣습니다. 이값은 나중에 eax와 비교해서 크랙성공메세지를 띄우게할 값입니다. 그밑의 40108B부분으로 들어가보겠습니다. 여기서 4020F9주소의 값과 비교할 eax값을 세팅해주는 중요한 부분입니다. ..

    CodeEngn Basic19 풀이

    이 프로그램이 몇밀리세컨드 이후에 종료되는지에대한 문제입니다. 이런창이 뜨면서 일정시간 이후에 자동으로 종료하게 됩니다. 디버거로 열게되면 이런 메세지를 띄우게됩니다. 안티디버깅 기법이 적용되어있나보네요 . 시간에 관련된거라 생각하면서 트레이싱 하다보니 뭔가 있었는데 메세지박스가 실행이 되지않는걸로보아 여기는 아니네요.디버깅을 감지하는 함수를 발견했습니다. 여기에 bp를 걸어주시고 안티디버깅을 우회하기위해서 ZF를 1로 변경해 주었습니다. 점프를 하지못하게요. 프로그램을 실행하면 보이는 Msgbox의 text string은 참조된 문자열목록으로 봤을때 뜨질않아서 하드코딩한게 아닌 내부적으로 문자열을 만들어 낸다고 생각해서 트레이싱해보니 역시나 맞았습니다. MsgBox 내부에는 또 MessageBoxExW..

    CodeEngn Basic18 풀이

    Name이 CodeEngn일때 Serial을 찾는 문제입니다. 테스트를 위해 임의로 값을 입력해줍시다.All referenced text strings으로 성공메세지를 띄우는곳으로 가주시구요코드가 아주 보기좋게 되어있습니다. CodeEngn을 통해 어떤키값을 생성후에 내가입력한 시리얼값과 비교하고있습니다. 동일하면 성공메세지를 띄웁니다. 시리얼값이 다 드러나있네요. 정답은 06162370056b6ac0 입니다. 풀이완료!

    CodeEngn Basic17 풀이

    이건좀 특이하네요 앞전문제와 반대입니다. 키값을 알려주고 그에따른 Name값을 알아내라고하네요.여기서 Check it 값을 누르면 key값에 있는 값이 비워지고 문자를 더입력하라고 나옵니다. 올리디버거로 확인해보겠습니다. All referenced text strings로 확인해본결과 패킹되어있지않아서 다 드러납니다. 성공메세지 출력하는곳으로 가줍니다.45BB22 의 주소에서 사용자가 Name에 입력한 문자열의 길이를 받아온후에 45BB24의 주소에서 상수 3이랑 비교합니다.원래 45BB27의 주소에는 JGN 0045BB3E 였으나 제가 JMP로 어셈블하였습니다. Name이 3글자 미만이면 Serial안의 내용을 Please Enter More Chars...로 바꿔버립니다. 문제에서는 Name이 한글자..

    CodeEngn Basic16 풀이

    이전문제랑 마찬가지로 이름을 입력받고 그에해당하는 시리얼을 입력하는 방식입니다. 콘솔응용프로그램으로 제작된 프로그램이군요. 패킹은 되어있지않은것같습니다. Ollydbg로 분석해보겠습니다.역시 전문제와 마찬가지로 All referenced text strings 로 검색해보니 성공메세지를 띄우는곳이 다드러납니다. 그쪽으로 가줍시다. 패스워드를 입력받는 부분입니다. 그후에 입력받은 Name으로 구한 어떤 값이랑 비교해서 같으면 점프하지않고, 성공메세지를 띄웁니다.시리얼값은 E4C60D97으로 10진수로 변환하면 3838184855 입니다. 정답이네요풀이완료 !