반응형

앞서 소개한 원하는 코드를 빨리 찾는 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
,
반응형

format 내장 함수를 이용해야 한다.

16 진수로 변환 하는 과정에서 hex() 사용하면 원하는 값이 나오지 않는다. 이부분은 더 공부해야하고

a를 10진수로 변환하고 c5 값이 나올려면 100이 더필요해서 더해주었다.

반응형
Posted by 53C
,
반응형

나는 처음부터 일정한 숫자나 알파벡의 배열으르넣어서 규칙에 쉽게 접근이 가능했다.

abcdef  = C5C6C7C8

abcd     = C5C6C7C8

 

4바이트만 잘라내는 구간을 찾앗었는데 BP르 걸지않음.... 결과 어디있지...

어쨋든 암호화 하는 구간을 찾았지만 시저암호와 동일하여 그냥 키테이블을 한번 제작해봄

 

 

여기 까지는 가능

대충 생각해보면 패턴이 이렇다

대충...  0을 기준으로 보면 94 가 16진법이니까 HEX 코드에 94 만큼 더하믄 된다.

 

조금 쉬었다가 키젠을 만들고 책을 보면서 풀이를 하겠다.

반응형

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

함수 호출 규약(Calling convention)  (0) 2020.02.28
abex' crackme #2 책 풀이  (0) 2020.02.27
abex' crackme #2  (0) 2020.02.27
스택 프레임  (0) 2020.02.26
abex' crackme #1 크랙  (0) 2020.02.25
Posted by 53C
,