목차
1. Easy ELF 실습
- 실습을 위한 사전 단계(Linux 파일 실행)
2. 분기문 분석
3. byte 및 배열 정리
4. 소스코드 작성(어셈블리어 기반)
[Review] (4주차) 이론 - 총정리
2022.07.19 - [Security & Analysis/IDA Pro] - [IDA Pro] 악성코드 정적분석 툴 사용법&이론 - week.04(전 과정 Review)
1. Easy ELF 실습
ELF 파일은 리눅스의 실행파일이므로, 실행시킨 후 랜덤 문자를 입력
파일 확장자를 모든 파일(All Files (*))로 변경
2. 분기문 분석
실행 후 View > Open subviews > Strings (or Shift + F12)
문자열 검색
리눅스 실행 시 조회된 문자열(Reversing.Kr Easy ELF, Wrong) 및 정답 출력 예상(Correct) 조회
Wrong 해당 그래프 모드 확인
cmp를 통해 분기문 이동
jump if not zero(not equal) → eax가 1이라면(빨간색 화살표), Correct 연결
레지스터나 메모리 값을 변경하지 않고, 플래그 레지스터에만 영향을 줌
* flag register: 상태 레지스터
분기문 지나기 전 call 링크 두개
sub_8048434
sub_8048451
eax가 1이 되기 위해서는, 모든 분기문에서 조건 점프(초록색 화살표 이동)하여, 우측 하단으로 차례 이동
3. byte 및 배열 정리
첫 번째 조건문
byte_804A021의 값과 31h 비교
두 번째 조건문
byte_804A020을 eax에 저장하여,
첫 번째 문자(eax 내)와 0x34 XOR 연산
세 번째 문자(byte_804A022)와 0x32 XOR 연산
네 번째 문자(byte_804A023)와 0x0FFFFFF88 XOR 연산
다섯 번째 문자(byte_804A024)와 0x58 값이 같은지 비교
네 번째 조건문
테스트
네 번째 조건문
세번째 문자(byte_804A022)와 0x7C 비교
다섯 번째 조건문
첫번째 문자(byte_804A020)와 0x78 비교
여섯 번째 조건문
네번째 문자(byte_804A023)와 0x0DD 비교
No. | CODE XREF | 어셈블리어 | 10진수 to 문자(ASCII) | 순서 |
1 | sub_804851B+2A↓p | cmp al, 31h | 0x31 = 49, chr(49) = 1 | byte_804A021 |
2 | sub_8048451+C↑j loc_8048469 |
xor eax, 34h xor eax, 32h xor eax, 0FFFFFF88h cmp al, 58h |
0x34 = 52, chr(52) = 4 0x32 = 50, chr(50) = 2 0x88 = 136, chr(136) = (enter) 0x58 = 88, chr(88) = X |
byte_804A020 byte_804A022 byte_804A023 byte_804A024 |
3 | sub_8048451+4E↑j loc_80484A8 |
test al, al | ||
4 | sub_8048451+60↑j loc_80484BA |
cmp al, 7Ch | 0x7C = 124, chr(124) = | | byte_804A022 |
5 | sub_8048451+72↑j loc_80484CC |
cmp al, 78h | 0x78 = 120, chr(120) = x | byte_804A020 |
6 | sub_8048451+84↑j loc_80484DE |
cmp al, 0DDh | 0xDD = 221, chr(221) = Ý | byte_804A023 |
정리해보면, input 문자열은 다음과 같이 구성 (^: XOR)
input[0] ^ 34h = 78h
input[1] = 31h
input[2] ^ 32h = 7Ch
input[3] ^ 88h = DDh (byte이므로 88 앞의 FFFFFF는 무시)
input[4] = 58h
input[5]는 test(세 번째 조건문)
4. 소스코드 작성(어셈블리어 기반)
// string
ans = ""
ans += chr(0x34 ^ 0x78)
ans += chr(0x31)
ans += chr(0x32 ^ 0x7C)
ans += chr(0x88 ^ 0xDD)
ans += chr(0x58)
print(ans)
출력: L1NUX
'Security & Analysis > IDA Pro' 카테고리의 다른 글
[IDA Pro] chap.07 악성코드 정적분석 툴 사용법(AutoHotkey1, reversing.kr) (0) | 2022.10.06 |
---|---|
[IDA Pro] chap.06 악성코드 정적분석 툴 사용법(Ransomware, reversing.kr) (0) | 2022.08.24 |
[IDA Pro] 악성코드 정적분석 툴 사용법&이론 - week.04(전 과정 Review) (0) | 2022.07.19 |
[IDA Pro] 악성코드 정적분석 툴 사용법&실습 - week.03(Easy_KeygenMe) (0) | 2022.07.04 |
[IDA Pro] 악성코드 정적분석 툴 사용법&실습 - week.03(Easy_CrackMe) (2) (0) | 2022.07.04 |