본문 바로가기

reversing

(15)
abex CrackME2 흠햐.... cff CrackMe4번과 비슷한 문제다. 4번을 푸셧다면 이것도 쉽게 풀수 있다. 사실 푸는덴 3분정도 걸렸지만 name 에 따른 시리얼이 어떻게 바뀌는지가 궁금해서 몇시간을 했다. 딱히 패킹도 걸려있찌 않은데 VB의 구조를 파악하기엔 좋은가 보다;(아직거기까진 모르겠따) -힌트 1. 메시지가 뜨는 곳을 찾는다 - Search for -> All referenced text strings 로 찾는다. 2. 뜨기전의 어셈블러에 브포(브레이크포인트)를 건다. - 점프와 call 부분을 유심히 보면 된다. 3. 스택과 레지스터를 잘 본다. -답 쫌이상하다고 생각했는데 4글자 이하의 이유는 답이 4글자를 표현한 값이기 떄문이다. 실제로 모든 답은 8글자일것이다. 앞 4글자만 변환해서 시리얼키로 사..
CFF CrackMe 3 4 번 -0- 쉽네. 왜케 쉽지; 3번은 1분, 4번은 5분정도 걸렸네;; 패킹되어있으며 UPX도 동봉했다. 3번은 시리얼찾는 문제이고(정말 쉽다.) 4번은 name에 따른 시리얼이 달라지는 문제이다.(답은 간단하며 공식은 조금만 생각하면된다.)
CFF CrackMe2 시리얼 문제 해봅시다~ 하나는 원본. 하나는 전 포스팅에서 언패킹한 exe파일입니다. 일단 실행한다음 (F9) 아무거나 에디트박스에 넣고 버튼을 눌러줍니다. 그러면 You are a bed cracker!라는 문구가 뜹니다. 우리는 이 메시지 박스가 어디에 위치하는가를 알아야 하는겁니다. exe파일에서 text는 한곳에 올라오기 때문에 메시지 박스에 들어가는 텍스트와 시리얼키가 같이 있다는거죠. 잘 모르시겠으면 PE구조를 공부하세요. 위의 상태에서 F12를 해서 Paused 상태에서 alt+F9를 눌러준다. 그다음 위의 메시지 박스의 확인을 눌러준다. 그러면 지금 상태의 메모리를 보여준다. 위로 살짝 올려주면 메시지 박스의 원형을 보여준다. 위에 빨간글씨로 MessageBoxA로 써져잇는 함수가 보인다. 그리고 매개변수인 st..
패커, 패킹, 언패킹 패커(Packer)에 대해 다시 한번 간단히 정리 패킹(packing)은 실행파일 포장이라는 개념으로 쉽게 이해하시면 될 것 같습니다. 아래 그림은 파일이 패킹되어 메모리에 올라가는 일괄의 과정을 표현한 것으로서 패킹된 파일은 메모리 할당시 재배치(Relocation) 과정을 하지 않기 위해 target 프로그램과 동일한 위치에 .txt 섹션을 배치 합니다. Uninitialized data section은 언패킹 후 메모리에 올릴 장소입니다. 언패킹을 하기 위해서는 먼저 Packer Detection(탐지)을 통해 패커를 확인하는 작업이 선행되어야 합니다. 패커를 확인하는 가장 손쉬운 방법은 잘 알려진 패커 탐지 tool을 이용하는 것이며 탐지 tool로는 PEID, DIE, RDG, exeinfo P..
나의 첫번째 디버깅 Hello world! 사실 리버싱은 할 맘이 없었는데..;; 왜하고 있는거지?-0-? OllyDbg 사용법 보다가 리버싱 하는거 보길래 잼있길래 해봤는데... 코딩하는게 쉽다는걸 느끼는 하루다;; Hello world 바꾸는데 5시간이 걸렸따.;;ㅋㅋㅋㅋㅋ 일반적인 hello world! 를 프롬포트 창에서 찍어내는 프로그램. 정말 오늘로써 C언어가 정말 쉽고 잘만들었단는걸 알게 해주는구나;; 리버싱하면서 난감한점은 그동안 우리가 익숙하게 썼던 printf가 어디에 속하느냐 이다. 물론 stdio.h에 있다고 하겠지만 결국 헤더파일도 지침서일뿐이다. 이것이 프롬포트창에 단순히 문자를 찍는데 필요한 파일들이다. 지금은 각 dll 파일들의 PE구조일 뿐이고. 여기서 MSCVR90.dll이 printf 함수가 속에있는 파일이다. ..
NAND 게이트로 AND, OR, NOT 게이트 만들기 -0-어이구야...내가 이걸 3일동안 열씨미 그렸는데..정말 뻘짓을했다. 해킹, 파괴의 광학을 보면은 1장에 NAND 게이트로 AND, OR, NOT 게이트 만들기 라고 있어서 심심해서 해봣는데....결과는...-0- 역시 사람이 머리가 무식하면 몸이 고생이라는데..-0-ㅋㅋ 대박!! 먼저 NAND게이트라 하면은 요로코롬 생긴놈으로 A B F 0 0 1 1 0 1 0 1 1 1 1 0 A, B가 모두 1일때만 0인 값을 가지는 놈이다. 자...-_-이놈을 가지고 AND와 OR, NOT을 그려보시요......-0-; 사실 AND, OR는 그리긴 했는데(그림보면..참..ㅋㅋ NAND를 7개 사용했어;;-0-;;) NOT은 죽어도 모르겠떠라. 결국 네이년에게 물어보니...-0- 뭐이런;; 처음엔 단순히 출력값..
asm 시작하면서.. -_-근데 왜 내가 어셈블러를 하는거지?ㅋㅋㅋㅋ -0- 커널 공부할려고 시작했는데 왠지 발을 잘못 담근듯...쿠쿡..ㅋㅋ 시작이라 간단하게 inline 으로 두줄만 넣어봤다. #include "stdafx.h" int sum(int a, int b) { __asm { mov eax, [ebp+8] add eax, [ebp+12] } } int _tmain(int argc, _TCHAR* argv[]) { int sumValue; sumValue = sum(1,2); printf("%d\n", sumValue); return 0; } __asm 은 어셈블러를 시작하는 예약어. mov 는 첫번째 인자에 두번째 인자를 넣는다.(포인터 이동이라 하는게 맞나?) add 는 첫번쨰 인자와 두번쨰 인자를 더한다. e..