일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- UTF-32
- ImageSwitching
- 리버싱
- CP949
- RedLine Stealer
- Advanced안티디버깅
- IL코드
- 안티디버깅
- JIT
- UTF-16
- x32dbg
- dotPeek
- Dynamic안티디버깅
- hxd
- Python
- CodeEngn
- 디버깅
- Static안티디버깅
- 리버싱핵심원리
- PEImage
- PEImageSwitching
- Self-Creation
- Exe2Aut
- Visual Studio
- 서비스프로세스
- 서비스디버깅
- DebugBlocker
- 분석 보고서
- OllyDbg
- .net
- Today
- Total
목록OllyDbg (30)
-榮-
● 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..
● CodeEngn Basic RCE L05 문제 ◎ 파일 실행 화면 "Wrong Serial,try again!" 문자열을 찾고 분기점을 찾으면 될 것 같습니다. 분기를 판별하는 코드가 등록키와 입력된 키를 비교하는 것으로 추정됩니다. ◎ 패킹 및 난독화 여부 확인 ※ PE Packer란 실행 파일 압축기입니다. 정확한 명칭은 Run-Time 패커로, PE 파일 전문 압축기입니다. (출처:리버싱 핵심원리) ※ 사용 목적 PE 파일의 크기를 줄이고자 하는 목적 PE 파일의 내부 코드와 리소스를 감추기 위한 목적 ● CodeEngn Basic RCE L05 분석 및 풀이 ※ -d : decompress / -k, --backup : keep backup files 언패킹을 한 뒤 디버거에 올리면 OEP(O..
● CodeEngn Basic RCE L04 문제 디버거를 탐지하는 함수의 이름은 구글링을 통해 쉽게 찾을 수 있지만 주어진 파일을 분석하여 파일에서 사용된 디버거 탐지 함수를 찾아봅시다. ◎ 파일 실행 화면 ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Basic RCE L04 분석 및 풀이 디버거를 탐지하는 함수를 찾기 위해 [Animate Step Over(Ctrl + F8)] 명령을 진행하다 보면 중간에 멈추고, CMD화면에 '디버깅 당함'을 출력합니다. CALL 0040100F에 [Step Into(F7)]하여 진행하다보면 IsDebuggerPresent 함수를 발견하게 됩니다. (함수 이름으로 IsDebuggerPresent 함수가 디버거를 탐지하는 함수라는 것을 알 수 있습니다.) [St..
● CodeEngn Basic RCE L03 문제 C언어에서의 strcpy 같은 문자열 비교 함수가 비주얼 베이식에서는 어떤 이름인지 찾는 문제입니다. 주어진 파일을 분석하여 비주얼베이직에서의 스트링 비교 함수를 찾아봅시다. ◎ 파일 실행 화면 우측 사진의 [Regcode]에 입력된 문자열과 파일 내부의 문자열을 비교하여 일치할 경우, 성공 MessageBox를 띄우는 것으로 추정됩니다. "PASSWORT FALSCH !"를 기준으로 분기점을 찾으면 될것 같습니다. ● CodeEngn Basic RCE L03 풀이 앞에서 추측한 "PASSWORT FALSCH !" 문자열을 찾아봅시다. 해당 문자열 위치로 이동하면 해당 화면이 나옵니다. 실패로 떨어지는 분기점을 찾기 위해 화면을 올려보면 성공 문자열과 비..
● CodeEngn Basic RCE L01 문제 문제를 보면 GetDriveTypeA 함수가 HDD의 타입을 얻어오는 함수로 추정됩니다. 따라서 GetDriveTypeA 함수 호출 부분을 위주로 분석해보면 될 것입니다. - GetDriveTypeA 함수란? : 디스크 드라이브가 이동식, 고정, CD-ROM, RAM 디스크 또는 네트워크 드라이브인지 알아내는 함수이다. 함수의 리턴 값을 보면(출처:MSDN) CD-ROM으로 인식시키기 위해서는 '5'가 되어야 된다는 것을 알 수 있습니다. +α (CD-ROM으로 인식한 MessageBox를 띄워보자.) ● CodeEngn Basic RCE L01 +α ◎ 파일 실행 화면 CD-Rom으로 인식이 되지 않으면 "Nah... This is not a CD-RO..