반응형

1. 목표

저의 목표는 저를 괴롭힌 랜섬웨어를 완전히 패치시켜버리기 위해서 이 길을 선택하게 되었습니다.

저도 항상 흔들릴때가 많습니다.. 하지만 그럴대 마다 조금씩 쉬어주고 램섬웨어에 걸렸을때를 생각하며 칼을 갈아나가고 있습니다.

 

2. 긍정적인 마인드

저도 이번에 해킹동아리에 관심을 가지고 대학에 지원을 하게 되었고 해킹동아리를 같이 할 친구들을 모으면서

많은 친구들이 해킹에 대해서 많은 잘못된 편경을 가지고 있습니다. 저도 처음에는 이런 편견이 강했습니다.

이런 편견을 바구게 해준게 정보보안영재원이 이었습니다. 저보다 웹해킹이 뛰어나지만 그렇다고 많은 언어를 알필요도 없었습니다. 그곳의 많은 친구들도 많은 지식이나 많은 코드를 아는게 아닙니다. 하나하나 문제를 해결해 나가면서 배워나갔습니다. 저의 경우 대학과정에 자바가 있고 3대 언어 c python java 에대한 약간의 편경 때문에 자바를 완파 했습니다. 사실 자바는 리버싱을 하는데 큰도움이 되지 않는데도 말이죠 ㅋㅋㅋ

저또한 파이썬이나 c 자바를 완벽하게 아는게 아닙니다. 그저 필요할때 검색해서 알아가고 문제를 해결해 갑니다.

 

3. 재미를 느껴야 한다.

음.. 저는 crack me 중 암호화 된 패스워드를 알아내는 문제를 풀었을떄 그리고 매번 문제를 나의 방법으로 해결해 갈때 많은 성취감을 느낌니다. 이런 성취감이 저를 신나게 하는것 같습니다.

 

4. 검색의 생활화

저는 요즘 노력을 하고 있는 부분 입니다. 문제를 풀어가면서 모르는 어셈블리어를 자주 검색하고 정리를 합니다. 특히 자주 나오는 몇몇게는 조금씩 기억해 나간다는게 재미있습니다.

 

5. 제일중요한것은 실천이다.

저도 이부분에서 많은 공감을 했습니다.

가장 중요한것은 실천입니다. 

 

6. 느긋한 마음을 가지세요

이부분은 저에게는 조금 어렵습니다. 저는 조금함 때문에 풀이를 보기도 전에 문제에 정답을 찾기 위해 하루정도 혼자 싸울떄도 많았습니다. 조급함은 양날의 칼과 같습니다. 잘 이용한다면 더 힘이 된다고 생각합니다.

 

드디어 기초 리버싱 단원을 끝냈습니다. 저는 항상 마지막 스퍼트가 가장 힘듭니다. 이시기에는 내가 돠염 지금까지의 내용을 완벽하게 이해 했을까? 하는 불안감 때문에 완벽히 끝내지 못하는 경향이 있는데요. 책에서는 이렇게 말합니다.

'가슴 한편에 간직해두고 알아가자' 처음 이책을 읽고 완벽하게 이해하는 사람도 있겠지만 저는 아닙니다. 실천과 반복이 저를 강하게 만들기 때문에 물론 이해를 못한 부분도 있겠지만 마음 한편에 간직하고 이책을 마무리한후 다시한번 볼때 메모해 두었던 부분의 모르는 부분을 찾고 넘어가도록 해보겠습니다.

 

앞으로 힘내자! 

반응형
Posted by 53C
,
반응형

첫 번재 해결점은 NAG(잔소리)를 없애는 것이다. 이것의 의미를 파악할 수가 없었는데

간단히 문자열이 드지 않게 하는 것이었다. 방법은 매우 많지만 에를 들어 함수가 호출되는 부분을 찾아서 호출이 되지 않돍 점프시키는 등 방법은 잇지만 책을 따라가기로 했다.

NAG를 클릭하면 처음 보이는 함수이다.

함수안으로 들어가서 찾아보면 진짜 메세지를 호풀하는 부분을 찾을 수 있다. 책에 나온 정석적인 방법으로 풀이를 해보 겠다.

함수 호출을 저지 시킨다.

 

이렇게 되는데 14=E  16진수로 생각을해보면

 

CLL 함수는 5바이트의 크기를 가진다. ADD 명령어는 3바이트를 가져서 남은 곳을 NOP로 채워주었다..

이렇게 하면 문제가 생기는데 함수내에서의 변수를 제대로 처리를 하지 못한다. 그래서 내가 처음 찾은 NAG에서 함수를 들어간후 처음보는 코드를 그냥 RET 4 해버려서 함수에서 바로 바져나오도록 처리를 해버렸다

이렇게 처리를 해주면 1가지 문제가 긑나고 어제 하루종일 찾아본 분기문에 가보면

문자열을 분기하는 API 위에 함수에 들어가는 인자를 찾을 수 있다.

어제는 왜 못찾았지....

그러면 성공이다.

 

결론....

일단 뭐 많은 웨게임 문제들의 의도를 파악하는것은 제일 함든데 뭐.. 이번 문제는 비교적으로 쉬웟다...

반응형
Posted by 53C
,
반응형

앞서 소개한 원하는 코드를 빨리 찾는 4가지를 나는 지금까지 적극적으로 활용해서 지난 문제들을 비교적 매우 쉽게 풀었다.

특히 프로그램을 실핼시키면서 BP를 잡아서 동적 분석의 장점을 잘 활용해 왔지만 윈도우 베이직 코드는 너무 장벽이 높았다. 내가 풀어본 문제들은 스택 또는 덤프에 어떤 형식으로든 내가 입력한 값이 들어오는 것을 확인하고 변수가 호출되는 부분을 중심적으로 찾아냈다. 핸들이 있는 프로그램의 경우 이러한 방식으로 BP잡는 것에서 많은 고난이 있었다. 하지만 비교적 빠르게 주요 함수르르 찾아내는 데는 성공한것 같은데... 앞서 말했듯이 내가 입력한 값을 어떠한 형태로든 저장하는 과정을 찾을 수가 없었다... 아마 핸들러가 작동을 하면서 변수를 읽는것 같은데 문제는 제대로 프로그램 구동이 되지 않아서 올바른 지점에 BP를 걸지를 못한다..... exex는 ida로도 분석이 어렵다... 많은 EP코드들은 어느정도 걸러 냈지만 시리얼 키가 어떤 것인지 알아내지는 못했다.. 문제를 오늘 하루 동안 풀어보면서 뭔가 어느 한부분에서 부족함을 느꼈다... 이건 시리얼 키를 찾는 프로그래램이 맞는 것일까? 하는 의문이 들었고... 일단 오늘은 풀지 못했다..

이번주말 일정이 어떻게 될지는 모르겠지만 조만간 책을 보고 내가 부족했던 점을 찾아봐야 겠다.

반응형
Posted by 53C
,
반응형

함수호출 규약이란 함수를 호출할때 파라미터를 전달하는 방식을 뜻한다.

 

cdecl stdcall fastcall
가변길이 파라미터의 관리가 가능하다. ADD ESP,XXX 등 함수의 파라미터를관리하는 코드가 없어서 코드가 짧아진다. 파라미터를 레지스터에 관리한다. 더 빠른 함수의 호출이 가능하지만 관리가 어렵다.

몇몇 부분이해가 가지 않았던 부분은 파라미터의 변수 값을 알아내는 법과 ESP의 레지스터 값을 정리하는 과정이 조금 이해가 힘들었다. 2숫자이면 4바이트 씩일것이고 더하는 연산을 하더라도 4바이트여야 하는데 왜 8바이트 인지 조금 이해가 어려웠다.

 

특히 cdecl 은 c언어에서 많이 사용되는 방식이고 stdcall 방식은 winAPI 같은 코드에서 호환성을 좋게 하기 위해서 많이 사용된다. EP코드를 구별할때 많이 사용될것 같다. 크랙미를 풀면서 이와 같이 스택을 정리하는 부분을 많이 봤기 때문이다.

반응형
Posted by 53C
,
반응형

우선 크랙은 성공했다. 정확히 프로그램을 분석도 했지만 운이 좋게도 치환암호 였고 계속 디버깅을 하다보니 같은자리를 여러번 도는 루프문에  BP를 걸었던것도 이를 통해서 암호화 되는 길이를 알아낸것 그리고 마지막에 16진수 변환에서 FORMATE 함수를 찾은것이 운이 좋았다.

책의 내용도 크게 다른것은 없었다.

오히려 마지막에 Q&A 가 나에게 큰의미를 줬다.

 

1. 리버싱에는 정석은 없다.

책에서는 숫자에 64를 더하고 문자로 치환을 하는데 나 같은 경우는 아스키에 100을 더하고 헥스로 치환을 했다.

결과적으로 맞고 이과정에서 16진수와 10진수 변환을 여러차례 시도해보았기 때문에 틀린답은 아니다.

책에는 정답이 적혀 있지 않다. 이런 해결책이 적혀 있고 나의 해결책을 찾아서 글로 나타내는 것이 더 의미가 있다고 생각을 했다....(고등학교 수학은 풀이도 외워야한다... 특히 서술형...)ㅅㅂ

2. TEST AX,AX

그냥 AX가 0이 맞는지 구분하는 문장이다.

3. 자신도 이 책을 스는 과정에서 여러번 리트라이를 했다.

나는 이문제를 풀면서 정말 많이 리트라이도 많이 했고 특히 어셈블리 코드의 경우 정말 너무 길다. 하나하나 읽기도 벅찰정도이며 변화하는 레지스터들의 값도 어려웠지만 한 100번 보니까 이해가 조금씩 되더라

4. 끈기 앞에는 장사없다.

이말이 가장 의미가 깊었다. 문제를 푸는 중간에도 키젠을 만드는 중간에도 중간 중간 포기를 했지만 끈기 있게 노력해서 성취해서 기쁘다.

 

=======================

수강신청하기 싫다... 왜 이런 제도를 만든거지?

반응형

'리버싱 > 리버싱 핵심원리' 카테고리의 다른 글

11_Lenas_Reversing_for_Newbies 분석 실폐  (0) 2020.02.28
함수 호출 규약(Calling convention)  (0) 2020.02.28
abex' crackme #2 암호해독  (0) 2020.02.27
abex' crackme #2  (0) 2020.02.27
스택 프레임  (0) 2020.02.26
Posted by 53C
,