일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Dynamic안티디버깅
- 분석 보고서
- PEImageSwitching
- Advanced안티디버깅
- DebugBlocker
- 서비스디버깅
- Exe2Aut
- Self-Creation
- dotPeek
- 서비스프로세스
- CodeEngn
- .net
- 리버싱핵심원리
- CP949
- IL코드
- 디버깅
- OllyDbg
- PEImage
- Python
- UTF-16
- hxd
- RedLine Stealer
- Static안티디버깅
- ImageSwitching
- 안티디버깅
- x32dbg
- Visual Studio
- 리버싱
- JIT
- UTF-32
- Today
- Total
목록CodeEngn/Advance (14)
-榮-
● CodeEngn Advance RCE L15 문제 ◎ 파일 실행 화면 Username and Serial Validation으로 넘어가려면 리버싱으로 Unlock Code를 찾아야 되는 것으로 확인됩니다. ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Advance RCE L15 풀이 현재 모듈에서 호출되는 함수를 찾아보면 없다고 뜹니다. [그림 2]에서 패킹이 없다는 것을 확인했으니 파일이 암호화되어있을 겁니다. [그림 3]에서 진행하면, [그림 5]를 걸치면서 코드가 복호화됩니다. 복호화가 된 최종 결과는 [그림 6]이며, 이 곳이 OEP입니다. [그림 6]에서 [Plugins > Scylla]에서 DUMP 파일을 생성합니다. 현재 모듈에서 호출되는 함수를 찾아보면 GetDlgItemTextA..
● CodeEngn Advance RCE L14 문제 ◎ 파일 실행 화면 ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Advance RCE L14 분석 및 풀이 문자열 검색에서 [그림 1] 실패 화면의 "Invalid Registration Code"문자열을 찾으면 성공 문자열과 함께 바로 보입니다. 실패 문자열 주소로 이동하면 성공 문자열과 함께 분기점(0047F448)을 확인할 수 있습니다. 분기 조건의 파라미터를 확인하면 입력된 Serial의 숫자 부분과 Name으로 생성된 Serial 숫자를 비교하는 것을 확인할 수 있습니다. 분기 조건 앞의 CALL 00404B2C와 CALL 0047F0B8은 각각 입력된 Serial과 입력된 Name을 파라미터로 가집니다. 즉, 앞의 CALL 0047F0..
● CodeEngn Advance RCE L11 문제 ◎ 파일 실행 화면 ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Advance RCE L11 분석 [그림 1]에서의 실패 문자열을 찾기 위해 [Search for > All referenced text strings]를 확인하면 성공 문자열과 실패 문자열을 확인할 수 있습니다. 실패 문자열의 주소로 이동하면 분기 조건과 분기점을 확인할 수 있습니다. 스크롤을 올려 [그림 5]에 보이는 함수의 프롤로그에서 호출하는 주소를 알아내 이동하면, GetDlgItemTextA 함수 2개를 볼 수 있습니다. 각각 Name과 Serial을 가져오는 것으로 보입니다. GetDlgItemTextA 함수까지 실행해보면 CALL 004010EF까지 Name과 Seri..
● CodeEngn Advance RCE L10 문제 ◎ 파일 실행 화면 ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Advance RCE L10 분석 및 풀이 [그림 1]에서 화면의 문자열을 [Search for > All referenced text strings]에서 찾습니다. "Enter Your Name : "으로 이동하여 Name과 Serial을 입력받는 함수를 알아내고, 입력 이후부터 분기 조건 사이에 Name과 Serial의 관계를 찾아보겠습니다. "Enter Your Name : "의 코드입니다. CALL 043EDD8이 문자열을 출력하는 함수로 추측됩니다. 스크롤을 내려 Serial을 입력받고 어떤 행위가 조건 분기로 이어지는지 확인해 보겠습니다. [그림 6]은 Serial을 입력..
● CodeEngn Advance RCE L09 문제 ◎ 파일 실행 화면 ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Advance RCE L09 풀이 [그림 2]를 보면 실패 시 "Sorry, but the username and/or password is incorrect!" 문자열이 출력되는 것을 볼 수 있습니다. [Search for > All referenced text strings]를 보면 성공 문자열과 실패 문자열을 확인할 수 있습니다. 성공 문자열이 더 낮은 주소에 있으므로 성공과 실패를 나누는 분기점은 성공 문자열 주변 주소에 있을 것으로 생각됩니다. 성공 문자열 주소로 이동하겠습니다. 성공 문자열 주소로 이동하면 005E12AD가 분기점이라는 것을 알 수 있습니다. 분기 조건으로..
● CodeEngn Advance RCE L08 문제 ◎ 파일 실행 화면 ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Advance RCE L08 풀이 우선, [그림 2]에서 찾은 패치 해야 되는 부분으로 이동합니다. [Search for > All referenced text string]에서 해당 문자열을 찾습니다. 0045BB29의 Please Enter More Chars... 문자열은 CMP EAX, 3의 결과로 출력됩니다. 이 부분을 패치하여 Name이 두 문자일 때, 해당 구문이 안나오도록 만듭니다. Name은 문제의 힌트에서 두 문자라 하였으니 3이 아닌 2와 비교하도록 패치하였습니다. [※참고] 패치파일 만드는 법은 CodeEngn Basic RCE L01의 "+α 패치파일 만드는 ..
● CodeEngn Advance RCE L07 문제 ◎ 파일 실행 화면 ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Advance RCE L07 풀이 dotPeek에 Advance RCE L07 실행파일을 올리고 [그림 4]의 문자열을 찾았습니다. If문의 조건 3가지(this.vxzzz(this.yreee, this.ewrrr, 2415736773U, fsfsdf) / (int) this.yreee[2] == (int) hashCode / (int) this.yreee[3] == (int) num1)가 참이 되는 값이 Advance RCE L07의 답입니다. 세 번째 단락 Serial을 00000000부터 ffffffff까지 넣어 If문의 조건 3가지를 만족하는 값을 일 경우 출력하는 코드를 추..
● CodeEngn Advance RCE L06 문제 ◎ 파일 실행 화면 ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Advance RCE L06 풀이 디버거에서 실행 시 [그림 5]의 창이 뜹니다. 이를 통해 디버거를 탐지하는 함수가 있다는 것을 알 수 있습니다. 디버거를 탐지하는 함수 부분을 패치하기 위해 우선 언패킹을 해줍니다. 언패킹 한 파일을 디버거에 올리고 디버거 탐지 함수를 찾습니다. [Search for > All intermodular calls]에서 디버거를 탐지하는 함수에 BP[F2]를 걸고 실행[F9]합니다. 0040E961의 IsDebuggerPresent 함수에서 멈춥니다. 이 함수의 반환 값의 TEST 명령어를 기준으로 디버거에서 실행되었는지를 판단하는 겁니다. 이 부분을..
● CodeEngn Advance RCE L05 문제 ◎ 파일 실행 화면 ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Advance RCE L05 풀이 [그림 1]의 실패 화면에서 MessageBox가 있는 것으로 보고 [Search for > All intermodular calls]에서 메시지 MessageBox 관련 함수를 찾아 BP를 걸었습니다. [※참고] 같은 함수에 BP 거는 것은 CodeEngn Basic RCE L03의 "+α 함수를 알고 있다면..." 실행[F9]을 하고 멈추는 곳은 00402777입니다. 분기점이 안보이고, 주변 주소에는 LEA, PUSH, MOV, CALL만 있어서 화면을 내려(낮은 주소)보았습니다. 화면을 내리다 보면 BP를 설치한 rtxMsgBox 함수를 모두..
[※참고] 이 글은 CodeEngn Advance RCE L04의 Serial 생성 부분을 분석한 글로 CodeEngn Advance RCE L04 풀이의 일부분입니다. CodeEngn Advance RCE L04은 CodeEngn Advance RCE L04을 참고해 주세요. ● CodeEngn Advance RCE L04 풀이 中 Serial 생성 [Search for > All intermodular calls]에서 Serial 생성을 하기 위한 Name을 읽어오는 GetDlgItemTextA 함수에 BP를 걸고 실행[F9]합니다. 각각의 GetDlgItemTextA 함수에서 읽어오는 값을 확인합니다. 각각의 GetDlgItemTextA 함수 Buffer 주소 내용 확인 00401114는 CodeE..