controlpro
White box cipher 분석 챌린지 (2) 본문
728x90
0. Review
현 포스팅은 https://www.youtube.com/watch?v=84Pp9CBjgd8 기반으로 제작된 것입니다.
1. 함수 확인하기
저번에 AES라는 것을 확인했으니까, white box AES가 동작하는 부분을 확인해보자
내가 분석하려는 함수는 다음과 같고, 이 함수는 굉장히 길다.
처음 부터 살펴보자
.text:000000000046373E sub_46373E proc near ; DATA XREF: .rodata:0000000000463E90o
.text:000000000046373E mov rax, [rbp-18h]
.text:0000000000463742 lea rcx, ds:0[rax*4]
.text:000000000046374A mov rax, [rbp-18h]
.text:000000000046374E lea rdx, ds:0[rax*4]
.text:0000000000463756 mov rax, [rbp-50h]
.text:000000000046375A add rax, rdx
.text:000000000046375D movzx eax, byte ptr [rax]
.text:0000000000463760 movzx eax, al
.text:0000000000463763 cdqe
.text:0000000000463765 mov rdx, [rbp-20h]
.text:0000000000463769 shl rdx, 4
.text:000000000046376D add rdx, rcx
.text:0000000000463770 shl rdx, 8
.text:0000000000463774 add rax, rdx
.text:0000000000463777 mov eax, ds:dword_6661C0[rax*4]
.text:000000000046377E mov [rbp-38h], eax
.text:0000000000463781 mov rax, [rbp-18h]
.text:0000000000463785 shl rax, 2
.text:0000000000463789 lea rcx, [rax+1]
.text:000000000046378D mov rax, [rbp-18h]
.text:0000000000463791 shl rax, 2
.text:0000000000463795 lea rdx, [rax+1]
.text:0000000000463799 mov rax, [rbp-50h]
.text:000000000046379D add rax, rdx
.text:00000000004637A0 movzx eax, byte ptr [rax]
첫번째 부터 특정 메모리의 값을 register의 값으로 불러온다. rbp - 0x50 은 우리가 입력한 값이다.
우리가 입력한 부분의 값(shiftrow 된 값)이 결국 어떤 dword_6661c0 [rax * 4]를 통해서 가져오게 되는데 rax*4가 인덱스 처럼 활용된 것으로 미루어 봤을 때, 이부분이 Whitebox AES의 lookup table인 것을 확인할 수 있다. 그래서 해당 위치를 gdb를 통해서 확인해보면
다음과 같이 lookup table이 존재하는 지를 확인할 수 있다. Wow! 하지만 encoding이 있기 때문에 바로되는 것은 아니다.
728x90
반응형