일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- hxd
- 분석 보고서
- OllyDbg
- PEImageSwitching
- Self-Creation
- PEImage
- .net
- Visual Studio
- Exe2Aut
- UTF-32
- Python
- DebugBlocker
- 리버싱핵심원리
- 안티디버깅
- CodeEngn
- dotPeek
- CP949
- JIT
- Dynamic안티디버깅
- x32dbg
- 서비스디버깅
- ImageSwitching
- UTF-16
- IL코드
- RedLine Stealer
- 서비스프로세스
- 리버싱
- 디버깅
- Static안티디버깅
- Advanced안티디버깅
- Today
- Total
목록CodeEngn/Basic (20)
-榮-
● CodeEngn Basic RCE L02 문제 ◎ 파일 실행 화면 ● CodeEngn Basic RCE L02 확인 화면을 내리면서 Decoded text 부분을 보면, 실패 문자열과 성공 문자열로 추측되는 text가 보입니다. 그 뒤로 패스워드로 예상되는 text가 보입니다. CodeEngn Basic RCE L02 답 : JK3FJZh
● CodeEngn Basic RCE L20 문제 ◎ 파일 실행 화면 ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Basic RCE 20 분석 및 풀이 OllyDbg에 파일을 올리고, Step Over[F8]로 진행하다 보면 CreateFileA 함수가 호출됩니다. CreateFileA 함수는 파일 또는 입/출력 장치를 생성하거나 여는 함수입니다. (출처:MSDN) [그림 4]에서 CreateFileA 함수 실행 결과 "CRACKME3.KEY" 파일을 생성하지 못했으니 "CRACKME3.KEY" 파일을 만들어서 실행하도록 합니다. CreateFileA 함수 아래에는 FileRead 함수가 있습니다. FileRead 함수는 CreateFileA 함수에서 연 파일의 내용을 읽어오는 역할을 합니다. Fi..
● CodeEngn Basic RCE L19 문제 ◎ 파일 실행 화면 ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Basic RCE L19 풀이 [※참고] UPX 패킹에서 OEP를 찾는 법은 CodeEngn Basic RCE L05의 "+α UPX 패킹 상태에서 OEP 찾는 법" [Search for > All intermodular calls]에서 MessageBox 관련 함수를 찾아 BP를 걸고 실행[F9]하여 "CodeEngn.com by Lee Kang-Seok"를 띄우는 MessageBox 함수를 찾아봅시다. [※참고] Found intermodular calls에 BP 관련은 CodeEngn Basic RCE L03의 "+α 함수를 알고 있다면..." 실행을 돌리면 AutoIt scrip..
● CodeEngn Basic RCE L18 문제 ◎ 파일 실행 화면 [Search for > All referenced text strings]에서 "Bad"와 "You serial is Wrong, tru again"을 찾고, 분기점과 분기 조건을 찾아 serial을 찾으면 될 것 같습니다. ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Basic RCE L18 분석 및 풀이 문자열 검색으로 "Bad"와 "You serial is Wrong, tru again"을 찾아봅니다. "Bad" 문자열 주소로 이동하면 분기점(004011F6)이 보입니다. 분기 조건은 lstrcmpiA 함수를 사용하여 Name으로 생성된 Serial과 입력받은 Serial을 비교하는 것으로 보입니다. 이때, 004011EF..
● CodeEngn Basic RCE L17 문제 ◎ 파일 실행 화면 문제의 힌트에서 Name은 한 자리라 했지만 Name에 한 문자를 넣으면 "Please Enter More Chars..."이 나옵니다. 패치가 필요해 보입니다. ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Basic RCE L17 분석 및 풀이 문자열 검색으로 성공 문자열을 찾아봅니다. 성공 문자열 주소로 이동하면 분기점(0045BBA9)이 보입니다. 성공 문자열에서 더 내려가면(주소 기준) "Please Enter More Chars..."문자열과 함께 문자열 길이를 3과 비교하는 코드(0045BB24)가 보인다. 이 부분이 패치할 부분입니다. 문제의 힌트에서 Name은 한 자리라 했으니 CMP EAX, 3 --> CMP EA..
● CodeEngn Basic RCE L16 문제 ◎ 파일 실행 화면 ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Basic RCE L16 분석 및 풀이 [Search for> All referenced text strings]에서 성공 문자열과 실패 문자열을 찾을 수 있습니다. 성공 문자열 부분으로 이동하면, 분기 조건(0040159F)과 분기점(004015A2)으로 추정되는 부분을 볼 수 있습니다. [그림 5]의 분기점에서 답을 찾았지만 프로그램을 분석해봅시다. 분기점으로 추정되는 곳에서 더 내려가면(주소 기준) Password를 받는 부분을 찾을 수 있습니다. Password를 입력 받는 부분보다 더 내려가면 Name을 입력받는 부분이 있습니다. Name(CodeEngn)을 입력받고, "Ent..
● CodeEngn Basic RCE L15 문제 ◎ 파일 실행 화면 ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Basic RCE L15 분석 및 풀이 실패 문자열이 있는지 검색해봅니다. 실패 문자열의 위치로 이동하면 위에서 분기 조건(00458831)과 분기점(00458837)을 볼 수 있습니다. 분기 조건을 보면 CALL 00407774의 반환 값과 [45B844]의 값을 비교하고 있습니다. 즉, CALL 00407774에서 입력한 Serial 값을 암호화(?)하고 Name(CodeEngn)으로 만든 Serial 값([45B844])과 비교합니다. CALL 00407774 내부로 Step Into[F7]들어가봅시다. 함수 내부에서 핵심은 00407796의 CALL 00402974입니다. CAL..
● CodeEngn Basic RCE L14 문제 ◎ 파일 실행 화면 ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Basic RCE L14 풀이 OEP를 찾아서 이동합니다. [※참고] UPX 패킹에서 OEP를 찾는 법은 CodeEngn Basic RCE L05의 "+α UPX 패킹 상태에서 OEP 찾는 법" "You Have Enter A Wrong Serial, Please Try Agian" 메시지 박스를 봤을 때, MessageBoxA 또는 MessageBoxW 함수를 사용한 것이라 생각됩니다. [Search for > All intermodular calls]에서 MessageBox 관련 함수를 찾아 BP를 걸고 실행[F9] 했을 때, 실패하는 MessageBox 함수의 위에 분기점과 분기 ..
● CodeEngn Basic RCE L13 문제 ◎ 파일 실행 화면 ◎ 패킹 및 난독화 여부 확인 .NET 파일은 .NET 어셈블리를 C# 또는 IL 코드로 디컴파일하는 도구를 사용하여 분석합니다. 본 포스트에서는 dotPeek을 사용하였습니다. ● CodeEngn Basic RCE L13 풀이 dotPeek에 Basic RCE L13 실행파일을 올리고 [그림 2]의 문자열을 찾았습니다. 해당 코드를 보면 입력받은 문자열(Consile.ReadLine())과 str을 비교하여 틀리면 "Bad Luck! Try again!"을 출력하고, 맞으면 while문을 종료하고 "Well Done! You cracked it!" 문자열을 출력합니다. 즉, 정답은 str에 들어있는 문자열입니다. str을 출력하는 코..
● CodeEngn Basic RCE L12 문제 ◎ 파일 실행 화면 ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Basic RCE L12 풀이 성공 문자열이 있는지 검색해봅니다. 0040108B로 이동하면 성공을 알리는 MessageBoxA 함수와 함께 분기점과 GetDlgItemInt 함수가 보입니다. GetDlgItemInt 함수 정의(출처:MSDN) UINT GetDlgItemInt( HWND hDlg, int nIDDlgItem, BOOL *lpTranslated, BOOL bSigned ); GetDlgItemInt 함수는 입력받은 정수 값을 반환해주는 함수입니다. 실행[F9]을 하고, "1234"를 입력하면 GetDlgItemInt 함수가 4D2를 반환합니다. "1234"를 16진수로 ..