'리버싱'에 해당되는 글 19건

  1. 2020.02.27 abex' crackme #2 책 풀이
  2. 2020.02.27 abex' crackme #2 암호해독
  3. 2020.02.27 abex' crackme #2
  4. 2020.02.26 스택 프레임
  5. 2020.02.25 abex' crackme #1 크랙
반응형

우선 크랙은 성공했다. 정확히 프로그램을 분석도 했지만 운이 좋게도 치환암호 였고 계속 디버깅을 하다보니 같은자리를 여러번 도는 루프문에  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
,
반응형

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

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
,
반응형

역시나 그역시나 시작부터 책과는 완전 달랐다.

프로그램이 비주얼 베이직 어디선가 들어본 그언어로 제작이 되었다.

윈도우 상에서 실행이 안되서 힘들었다.

어쨌든

이거는 꼭봐주고 그리고 창 뜨는거 다른 창에 뜨도록 해야겠다. 자꾸 작업창에 뜨다...

 

문자열을 검색할 생각을 하지못했다.

바로 메세지가 드는 분기점을 찾아서 접근을 시도했는데 잘못된 접근이었다.. 이유는

위에 분기가 성공을 했다 생각하면

다시 이런 구간이 나온다 두 구간 모두 분석을 했으나 찾기는 어려웠다.

책의 내용과도 정말 많은 내용이 달랐다.

그래도 책이 도움을 준부분은 문자열을 탐색하는 것이었다.

책에서는 아래의 우리가 본 문장을 찾아 가길 원한다.가 아니다. 내가 책을 잘못봤다.. ㅅㅂ

어쨋든 나는 안된다는걸 집감하고 참문장에서 분기문을 찾았다. (책에서도 이렇게 하라고 하는데 원래 실습한 후에 책을 보는 나쁜 버릇)

분기 2라고 적어놓고 실습을 진행했다.

앞서 말했듯이 나는 시도하고 책을 본다.

지속적으로 저 분기문을 바꿔도 봤지만 시리얼 코드를 얻는것이 우선이라 생각했다. 그래서 책을 봤는데 찾는 과정이 나와는 완전 달랐다. 그래서 계속 어떻하지 고민을 했다.

 

가장 이상한 부분은 스택메모리 부분이 매우 이상하다고 생각을 했다.

나는 스택 메모리에는 패스워드 아이디 순으로 들어가는게 맡다. 그런데 아이디는 들어가지만 패스워드가 암호화 되서 들어갔다... 그리고 패스워드는 한번도 들어오지 않았다...

그런데 이상한 점 2는 패스워드와 암호문이 너무 달랐다. 오히려 암호문이 아이디와 닮았다...

B5A9B6B8

이문장이 주석에 엄청 달렸다,

심지어 스택에도 자주 등장을 했다.

그래서 넣어보니 답이더라

 

그리고 책을 보니 암호였다고 말을 하고 이제부터 암호문을 풀어볼까?(웃음)

그래서 암호문 해독은 매우 중요해서 내일하기로 했다.

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

음.. 책을 먼저 읽고 완벽히 안후에 실습을 하는게 속도는 빠르다...

그런데 나는 책을 안읽고 하는게 더 재미있더라 그리고 성질상 일단 덤비는 스타일

반응형

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

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
레지스터와 스택  (0) 2020.02.25
Posted by 53C
,
반응형

함수가 호출되고 복귀조소로 가는과정을 스택프레임이라는 기법을 이용해서 안정화 시킨것이다.

esp 는 함수가 호출되면 함수의 주소를 저장하는 레지스터다

그리고이 값을 ebp에 저장한하.esp는 지속적으로 변화하기 때문에 저정하는 역활을 한다.

 

문제는...

이 엄청난 함수들은 ep코드다. 내컴퓨터는 시발 ep가 저엉말 너무 많다.

x32dp로 분석은 가능하나 심지어 이 메인 함수도 매우 복잡하게 숨어있다... 객체지향이어서 그런가..

ida로 ep값을 걸러내지 않으면 쉽게 메인 함수에 도달하기 힘들다. ep코드가 너무 많아서 동적 분석을 매우 힘들게 한다.  동적분석을 하는데 아무리 찾아도 메인 근처에는 다가가기 힘들다. ep값을 아무리 건너뛰어도 main이 나올려면 엄청 눌러야 됨다...

 

그리고 책과 내 프로그램과 매우 다르다... 프로그램에 대해서 찾아봐도 제대로 된 내용을 찾기는 어려웠다...

스택이 어떻게 저장이디고 연산되는지는 나도 분석을 해봤다...

오늘 나의 코드로 설명을 진행하고 싶으나... 너무 복잡해서

 

일단

프로그램을 기준으로

더해주는 함수와 변수를 저장하고 함수를 호출하는 구간이 존재한다.

그래서 처음 함수 구간에서 변수의 크기만큼 스택을 확보하여 함수를 제작하고 main 함수에 가게 된다.

main 함수에서는 또다시 스택에 값을 저장하고 더하기 함수를 호출한후 값을 옮기고 더하기 한다.

그리고 그 값을 리턴하고 프로그램을 종료시킨다. 끝

 

 

반응형

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

abex' crackme #2 암호해독  (0) 2020.02.27
abex' crackme #2  (0) 2020.02.27
abex' crackme #1 크랙  (0) 2020.02.25
레지스터와 스택  (0) 2020.02.25
빅 엔디언/ 리틀 엔디언  (0) 2020.02.24
Posted by 53C
,
반응형

위 파일은 소스폴더에 존재하지 않아서 비슷한 예제를 가져왔다.

 

 

 

 

abex' crackme #1.exe
0.01MB

내 백신 프로그램은 예제 파일 안에 계속 트로이 목마(바이러스)가 있다고 다운이 안되서 백신을 끄고 실습을 진행했다.

실행화면이다. 시작하기전 악성코드로 인식이 되어 가상환경에서 실습을 하려 했으나 가상환경이 느려서 그냥 진행

 

확인을 누르면 이런 문구가 뜬다.

이문제는 많이 풀어봤다... 하도 리버싱을 입문하다 실폐를 해서...

첫번째 메세지가 드는 부분에 BP를 걸어두었다.

첫번째 메세지가 떳다. 즉 main 함수 내부로 들어왔다고 나는 해석이 된다.

두 메모리 EDI와 ESI에 매모리 값을 저장

TEST 연산을 한다.

TEST연산은 첫번쨰 오퍼랜트와 두번째 오퍼랜트를 AND 연산을 하여 플래그세트를 반환한다.

다르기 때문에 0을 반환하는데  AF가 변화했다.

JNE는 거짓일경우 점프한다는 문장이다.

 

모르겠다.

ida por 소환

 

 

여기서 분기가 시작된다.

CMP 는 EAX AND ESI

 

일단 함수 안까지 실행

찾았다 개색기야

이렇게 가도록 만들면 됨

 

JE 분기가 참이 되어야하는데

참이되게 하기는 힘들것 같음

거짓일때 점프하도록 패치

 

응 풀렸어 ㅋㅋ

도구의 단축키나 실행시킬때 끝까지 실행시키는 법을 몰라서 F9를 연타한다. 도구 사용법좀 배우고 싶은데... 마땅한 정보가 없다...

일단 내방식으로 크랙

이번엔 책의 내용을 살펴보겠다.

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

 

나 같은 경우 EP 코드가 꽤 길다... 내컴퓨터가 이상한것 같다. main에 도착하면 코드가 매우 간결해진다.. 이유는 어셈블리언어로 제작해서 그렇다고 한다.

분기시 EAX와 ESI를 분기하는데 아무리 봐도 너무 차이가 난다.... 

이부분은 나중에 알게되면 포스팅을 하고 책에서는 더 자세히 들어간다.

 

 

함수를 넘기는 파라미터가 역순으로 넘어간다. 그택의 구조가 FILO 를 취하고 있기 때문이다.

 

마지막으로 덤프창에 메세지가 깨져서 나온다. 올리디버거와 같은 문제점인데 이부분은 이해하기 어려웠다.

반응형

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

abex' crackme #2  (0) 2020.02.27
스택 프레임  (0) 2020.02.26
레지스터와 스택  (0) 2020.02.25
빅 엔디언/ 리틀 엔디언  (0) 2020.02.24
2. 메인함수를 빨리 찾는 4가지 방법과 나의 접근방법  (0) 2020.02.21
Posted by 53C
,