SRE (소프트웨어 역공학)
: SW를 decompile/deassemble을 통해 분석하는 과정
= reversing = reverse code engineering
SW를 검증하는 과정에 사용하거나/malware를 분석하는 데에 쓰일 수 있음 (for good)
반면에, 사용 제한을 제거(crack)하거나, SW의 취약점을 분석, 치팅 등 (for bad)
(SRE를 통해 SW의 취약점을 발견하고 공격을 수행)
from exe(binary) to analysis
: binary 파일을 assembly language 변환
but, 정확하지 않을 때도 있음
=> ★ 다시 assemble해서 exe 만드는 것은 현실적으로 불가
Why?
missing point가 존재
: 단계별 코드 이해하는 데 사용
능력있는 개발자는 디버거의 활용 능력이 뛰어남
★ Debugger는 왜 필요할까?
둘의 목적이 다름, 정적 분석을 통해 모든 소스 코드를 볼 수 없음 + 분기점을 모두 고려하며 분석할 수 없기 때문에 둘은 같이 수행 (둘 다 수행할 수 있어야함)
: 16진수 편집기, "binary file 자체를 수정"하여 다시 exe로 fetch 할 수 있음
=> 이러한 Tools를 사용해 SW cracking
그렇다면 SRE를 위해 어떤 스킬이 필요할까?
① 프로그램을 실행하자 "Serial Number"를 입력받는다
(공격자Trudy는 Serial Number를 모름, 이 input과정을 뚫고자 함)
② IDA Pro를 사용해 disassebmle
※ 참고 (어셈블리어를 꽤나 까먹어서 복기 차원)
mov eax, 10 ; eax에 10을 저장
mov ebx, 0 ; ebx에 0을 저장
test eax, eax ; eax와 eax를 AND 연산하여 플래그 레지스터 설정
jz zero_label ; ZF가 설정되어 있으면 zero_label로 분기
; ZF가 설정되어 있지 않은 경우에 실행되는 코드
mov ebx, 1 ; ebx에 1을 저장
zero_label:
; ZF가 설정되어 있는 경우에 실행되는 코드
① IDA Pro를 사용해 disassebmle
test eax, eax
=> eax가 0일때만 '0'을 반환
=> test의 결과가 0일때만 jz가 true가되어 loc_401045만큼 이동
그렇다면 test가 항상 참이 되어 분기하려면?
test eax, eax 대신
xor eax, eax로 변경하면 eax 값과 무관하게 '0'을 반환
② hex editor를 통해 변경
③ 어떤 "Serial Number"를 입력해도 참이 되도록 변경!
※ How to Prevent SRE Attack?
SRE - ② 에서 다루도록 한다.