일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- DebugBlocker
- .net
- Dynamic안티디버깅
- IL코드
- 리버싱
- PEImageSwitching
- ImageSwitching
- 서비스디버깅
- UTF-32
- 안티디버깅
- Advanced안티디버깅
- CP949
- Static안티디버깅
- Self-Creation
- dotPeek
- CodeEngn
- OllyDbg
- 리버싱핵심원리
- 디버깅
- PEImage
- x32dbg
- Python
- hxd
- RedLine Stealer
- UTF-16
- 서비스프로세스
- Exe2Aut
- Visual Studio
- 분석 보고서
- JIT
- Today
- Total
목록CodeEngn (34)
-榮-
● 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진수로 ..
● CodeEngn Basic RCE L11 문제 ◎ 파일 실행 화면 ◎ 패킹 및 난독화 여부 확인 [※참고] CodeEngn Basic RCE L11와 CodeEngn Basic RCE L09의 파일은 같은 파일입니다. 자세한 분석은 CodeEngn Basic RCE L09를 참고하기. ● CodeEngn Basic RCE L11 풀이 및 답 Hardware BP를 걸고 실행[F9]합니다. 실행[F9] 멈춘 코드에서 옮겨진 코드와 JMP 0040100C를 확인할 수 있습니다. 0040100C로 이동하면 위의 NOP 12Byte와 0040100E CALL 0040109F 확인할 수 있습니다. Stack에서 MessageBoxA의 부족한 파라미터를 확인 할 수 있습니다. 스택의 MessageBoxA 파라미..
● CodeEngn Basic RCE L10 문제 ◎ 파일 실행 화면 ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Basic RCE L10 풀이 및 답 PUSHAD가 보이므로 POPAD를 검색해 봅니다. PUSHAD 바로 아래의 POPAD로 이동합니다. POPAD 아래에 OEP로 가는 JMP 명령어가 없는 것으로 보아 PUSHAD와 POPAD로 둘러싸여 있는 특징을 가지고 있는 패커는 아닌 것 같습니다. 방법을 바꿔 PUSHAD 명령어를 실행하고 Hardware BP를 설치하여 OEP를 찾습니다. 실행[F9]을 하고 멈춘 곳을 보면 OEP(00445834)로 가는 코드가 JMP 명령어가 아닌 PUSH 명령어와 RETN을 사용하는 것을 볼 수 있습니다. OEP로 이동하면 OPCODE를 제대로 인식하지..
● CodeEngn Basic RCE L09 문제 StolenByte란 훔친 바이트란 의미로 프로그램의 한 부분의 Code가 다른 부분으로 옮겨진 것을 말한다. 주로 패킹된 프로그램에서 볼 수 있다. 주로 옮겨지는 Code는 EP 부분의 Code들이며, 옮겨진 Code는 OEP로 향하는 JMP 명령어의 앞에서 PUSH 된다. 옮겨진 Code는 할당된 메모리 공간에서 실행되며, 언패킹을 해도 정상 실행되지 않는다. StolenByte는 옮겨진 Code를 제자리로 옮기고 덤프, IAT 복구를 하면 정상 실행된다. ◎ 파일 실행 화면 ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Basic RCE L09 풀이 및 답 UPX 패킹이므로 POPAD로 이동하면, POPAD 명령어 부분에서 옮겨진 것으로 보이는 ..
● CodeEngn Basic RCE L08 문제 ◎ 파일 실행 화면 ◎ 패킹 및 난독화 여부 확인 답은 UPX의 OEP를 구하면 됩니다. ※[참고] UPX 패킹에서 OEP를 찾는 법은 CodeEngn Basic RCE L05의 "+α UPX 패킹 상태에서 OEP 찾는 법" 참고 ● CodeEngn Basic RCE L08 풀이 PUSHAD 명령어를 실행하면 스택에 레지스터 값들이 저장됩니다. 이때, dump 창에서 가장 최근에 저장된 스택 주소로 이동하여 Hardware BP를 겁니다. Hardware BP를 걸고 실행(F9)하면 POPAD가 호출되는 순간, Hardware BP를 설치한 지점이 access 되면서 멈춥니다. 바로 밑에 OEP로 가는 JMP 명령어가 있습니다. CodeEngn Basic..
● CodeEngn Basic RCE L07 문제 ◎ 파일 실행 화면 "The serial you entered is not correct!" 문자열을 찾고, 분기점을 찾아 Serial 값을 찾으면 될 것 같습니다. ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Basic RCE L07 분석 앞에서 추측한 "The serial you entered is not correct!" 문자열을 찾아봅시다. 실패 문자열 위치로 이동하면, 분기점으로 보이는 JE 명령어와 성공 MessageBox로 추측되는 Code가 있습니다. 분기점을 확인하면 분기 조건으로 보이는 IstrcmpiA 함수를 확인할 수 있습니다. IstrcatA 함수를 사용하여 문자열을 이어 붙인 Serial 값과 입력받은 값을 비교하는 것으로 ..
● CodeEngn Basic RCE L06 문제 ◎ 파일 실행 화면 Unpack을 한 후 "Wrong serial!!!" 문자열을 찾고, 분기점을 찾아 Serial 값을 찾으면 될 것 같습니다. ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Basic RCE L06 풀이 언패킹을 한 뒤 디버거에 올리면 OEP(00401360)가 띄워지는 것을 확인할 수 있습니다. 앞에서 추측한 "Wrong serial!!!" 문자열을 찾아봅시다. 실패 문자열 위치로 이동하면, 위에 성공 MessageBox로 추측되는 Code가 있습니다. 성공 MessageBox로 추측되는 Code로 이동하면, 더 위에 Serial로 추측되는 값과 분기점을 확인할 수 있습니다. 해당 지점까지 실행하여 입력받은 문자열과 "AD46DF..