이 프로그램은 Key파일을 필요로 하는 프로그램이다.'Cracked by: CodeEngn!' 문구가 출력 되도록 하려면 crackme3.key 파일안의 데이터는 무엇이 되어야 하는가 프로그램 실행모습 crackme3.key를 별도로 만들어주고 실행했다. 아무것도없다.IDA에 올리자마자 훤히 보였다. eax 값이 1이면 메세지박스를 볼 수 있겠다. al 이 왜 eax 냐면EAX는 32비트 [ 0 ~ 31 ] - Extended AXAX는 16비트 [ 0 ~ 15 ]AH는 AX의 상위8비트 [ 8 ~ 15 ]AL은 AX의 하위8비트이다. [ 0 ~ 7 ]물론 64비트의 RAX도 있다. CreateFileA 함수를 통해 "CRACKME3.KEY" 파일을 여는듯하다. 시각적자료글 작성을 다하고 만든 표인데 ..
이 프로그램은 몇 밀리세컨드 후에 종료 되는가 타이머관련 함수나 Sleep 함수를 사용하려나 유추가 된다. 프로그램 실행화면잘 움직이는걸 봐선 Sleep 함수는 쓰지 않는다. x32Dbg - 수동언패킹이녀석 패킹이 되어있구나 ! 그냥 진행해보자popad 가 보이고 밑에 jmp가 보이는 걸로 봐서 이 프로그램은UPX 패킹이 된걸 알 수 있다.417770 이 OEP 겠구나.OEP 로 도착했다. 이제 분석해보자 안티디버깅 우회?? AutoIt 이라는 녀석으로 만들어 진 프로그램인거 같고 메세지를 뿜으며 종료된다.step over로 진행해보니 call 40ea50 부분에서 메세지박스를 띄우는 걸 알 수 있다. step into 로 40ea50 을 타고 들어가보자타고 들어와 step over로 진행 해보자c..
Name이 CodeEngn일때 Serial은 무엇인가 라고 물어온다. 프로그램 실행화면 PEIDEXE Shield 로 뭔가 되어있는데, 별다른 정보를 얻지 못했다. 패킹은 아닌듯 싶다 IDA함수들도 잘 보여진다. 패킹은 아닌듯. sub_401279() 를 타고 들어가자DialogFunc를 타고 들어가면 된다. 이전 포스팅에서 다뤘기에 설명은 생략 여기서 유의깊게 봐야하는 부분이 보인다.String1 과 String2를 비교해서 분기가 나뉜다. str, str2 를 넣어주고 strcmp를 call해주는듯 하다. 그리고 분기한다. x32Dbg call 부분에 브레이크 포인트를 걸고 어떤 값이 들어가는지 지켜보자String 1에 생성된 Serial 이 String2에 입력한 값이 들어가는게 보여진다. 0..
Key 값이 BEDA-2F56-BC4F4368-8A71-870B 일때 Name은 무엇인가힌트 : Name은 한자리인데.. 알파벳일수도 있고 숫자일수도 있고..정답인증은 Name의 MD5 해쉬값(대문자) 라고한다. 프로그램 실행화면 힌트로 Name은 한자리 라는걸 알게됐다. 우선 IDA로 보자한자리를 넣으면 비교해서 3보다 작으면 Please Enter More Chars... 를 띄운다. cmp eax, 3 을 cmp eax, 1로 바꿔주면 더이상 이쪽으로 분기되지 않는다. x32Dbg로 보자cmp eax, 1로 패치해주었다.브레이크포인트를 걸고 진행해보자 call 45b850을 지나고나면 Key가 스택에 들어가는 모습을 볼 수 있다. 그렇기에 call 45b850 에서 안으로 따라 들어가보자 타고들어..
Name이 CodeEngn 일때 Serial을 구하시오 이전포스팅인 https://imoracle.tistory.com/entry/Reversing-CodeEngn-Basic-RCE-L14 [Reversing] CodeEngn - Basic RCE L14Name이 CodeEngn 일때 Serial을 구하시오(이 문제는 정답이 여러개 나올 수 있는 문제이며 5개의 숫자로 되어있는 정답을 찾아야함, bruteforce 필요) 라고한다. 브루트포스가 무엇이냐면 무차별 대입imoracle.tistory.comhttps://imoracle.tistory.com/entry/Reversing-CodeEngn-Basic-RCE-L15 [Reversing] CodeEngn - Basic RCE L15Name이 Cod..
Name이 CodeEngn 일때 Serial을 구하시오라고 한다. 프로그램 실행모습옛날 델파이7을 만지작거릴때의 글꼴이 떠오른다. 그룹박스도 특유의 델파이 느낌이 있다. PEID 로 본결과 패킹은 되어있지 않았고 델파이로 만들어진게 맞다. 이전 포스팅과 분석방법은 같다. 단지 개발언어의 차이일 뿐https://imoracle.tistory.com/entry/Reversing-CodeEngn-Basic-RCE-L14 [Reversing] CodeEngn - Basic RCE L14Name이 CodeEngn 일때 Serial을 구하시오(이 문제는 정답이 여러개 나올 수 있는 문제이며 5개의 숫자로 되어있는 정답을 찾아야함, bruteforce 필요) 라고한다. 브루트포스가 무엇이냐면 무차별 대입imora..
Name이 CodeEngn 일때 Serial을 구하시오(이 문제는 정답이 여러개 나올 수 있는 문제이며 5개의 숫자로 되어있는 정답을 찾아야함, bruteforce 필요) 라고한다. 브루트포스가 무엇이냐면 무차별 대입공격으로, 예를 들어 2010년대만 해도 회원가입을 할 때인증절차없이 이름 주민번호만 넣으면 가입이 되곤 했었는데 이를 이용해 이름과 생년월일만 알고 있다면 주민번호 뒤7자리에 무차별 적으로 값을 계속 넣어 결국 올바른 주민번호를 뽑아냈던 그런 방법이다. 어쨌든 이제부터 살펴보자 프로그램 실행화면당연히 틀렸다고 나온다. PEID를 살펴보자 upx 패킹이 되어 있어서 언패킹을 해주었다. IDA로 살펴보자 대충 타고 따라가다보면 분기점이 나온다. 분기점 우의 cmp eax, esi로 값을 ..
정답은 무엇인가 를 묻고있다. 프로그램 실행화면대충 이런 프로그램이다. PEID로 보니 C#으로 만들어진 프로그램이다. 패킹은 되어있지 않다.C#에서의 출력은 cw 이니... 그리고 이녀석 64비트 프로그램이다. x64Dbg로 열 수 있다. IDA, x64Dbg에 붙여보니 뭔가 이상하다 그래서 조금 찾아보니...C# 으로 만들어진 녀석들은 동적 분석도구로는 분석이 어렵다고 한다.그래서 전용 디컴파일 도구를 검색해보니 여러가지가 나오는데 그 중에서 "dotPeek"을 다운받았다. dotPeekSimple 클래스에서는 암호화와 복호화를 하는 로직이 들어있다. SimpleTest 클래스를보니 훤히 다 보인다. MD5 알고리즘을 이용하는듯. Console.ReadLine() == str 에 브레이크 포인트..
Key를 구한 후 입력하게 되면 성공메시지를 볼 수 있다. 이때 성공메시지 대신 Key 값이 MessageBox에 출력 되도록 하려면 파일을 HexEdit로 오픈 한 다음 0x???? ~ 0x???? 영역에 Key 값을 overwrite 하면 된다.문제 : Key값과 + 주소영역을 찾으시오 라고한다. 프로그램 실행화면 IDA로 보자익숙한 녀석이 보인다. DialogFunc 를 타고 들어가자 MessageBox를 띄워주는 곳이 보인다. 그렇다면 Key값은 2049480383 인가? cmp eax, 7A2896BF 후 분기한다. 7A2896BF를 Decimal로 변환하면 2049480383이 나온다. Key값을 찾았다 이제 메세지 박스의 Text를 Key값으로 바꿔주면된다. x32Dbg로 보자40353..
OEP를 찾으시오. / Stolenbyte 를 찾으시오.정답인증은 OEP + Stolenbyte 라고 한다. 실행시켜보자 프로그램 실행화면 어디서 많이 봤다. 그래도 혹시 모르니 언패킹 후 빠르게 찾아주자. 그냥 똑같다. https://imoracle.tistory.com/entry/Reversing-CodeEngn-Basic-RCE-L09 [Reversing] CodeEngn - Basic RCE L09StolenByte를 구하시오 라고 한다. StolenByte가 뭐냐고? 본인이 간단한 안티치트툴을 만들어보며 작성했던 pdf 파일에서 발췌해 왔다. 조금 더 덧붙이자면 안티 디버깅 기법중 하나이며, 단어의imoracle.tistory.com여기서 풀이한 프로그램과 똑같으며, OEP와 StolenByt..
OEP를 구한 후 "등록성공" 으로 가는 분기점의 OPCODE를 구하시오.정답인증은 OEP + OPCODE 라고한다. 프로그램 실행모습이번 회차에선 프로그램 실행모습은 크게 의미가 없다 패킹을 확인하자 ASPack 으로 패킹되어 있다.ASPack : UPX와 유사하지만 선호도가 낮다언패킹 : PUSHAD -> 압축해제 코드 -> POPAD -> RETN 으로 동작한다. UPX는 POPAD 이후 나오는 JMP 인스트럭션을 통해 OEP로 분기한것과 살짝 다르다 F9로 실행하니 PUSHAD 로 도착했다.밑으로 내리다보면 POPAD를 만나게 된다.POPAD 를 찾았고, 밑에 PUSH 0 과 RET에 브레이크포인트를 걸고 살펴보자PUSH 0 이었던 부분이 PUSH 445834 로 바뀌었다. 445834가 OE..
StolenByte를 구하시오 라고 한다. StolenByte가 뭐냐고? 본인이 간단한 안티치트툴을 만들어보며 작성했던 pdf 파일에서 발췌해 왔다. 조금 더 덧붙이자면 안티 디버깅 기법중 하나이며, 단어의 의미처럼 코드를 훔쳐 다른 곳으로 옮긴 것이다. OEP 주소의 코드를 분리해 점프 직전 Push로 넘겨준다. 프로그램 실행모습 언패킹 해주자 다시 실행하자메세지박스가 깨져서 나온다.UPX는 제일 위 사진의 설명처럼 upx0, upx1로 나뉘어 있다. Peview를 통해 보게되면SECTION UPX0 : 섹션 및 기타 초기화 코드 -> 압축코드가 해제될 곳SECTION UPX1 : 복호화 알고리즘 -> 압축코드가 저장된 곳 IDA로 보자12바이트만큼 NOP처리가 되어있다. 저 곳에 StolenBy..