sub_20c 를 본격적으로 분석하기 시작했다.
0x23A 까지 실행하였을 때, 0xAD3(AD4가 아니였음)으로 입력한 패스워드 문자열 8개를 복사했다.
그 아래에 있는 베이직블록에서 진행한것은 r19,r18,r03,r21,r20 에 AD3에 복사한 1,2,3,4,7 번째 문자 이다.
Y+5,Y+4,Y+3 에 5,6,8 번째 문자를 복사 했다.
loc_24C 에 진입하기 직전 r24 = 0xFF , r30 = 0x76 , r31 = 1 이었는데
loc_251 로 진입하면서 모두 0으로 되었다.
한줄 한줄 분석하고 있는데, 넘나 피곤하다. Hex ray의 위대함을 실감하고 있다.
대략 알 수 있는 것은
(1) 0x23B ~ 0x302 까지의 코드가 8번 반복이 될 것이라는 점과
(2) and를 하고 있는 친구는 0xAE4 부터 하나씩 가져오는 문자인데, 매 루프 마다 증가할 예정이다. 0xAE4 ~ ... 의 값이 매번 고정이었던거같은데 확실하지는 않음.
(3)sub_1DC에 의해서 가져오는 값은 0x00, 0x02, 0x03 세 종류이다. 따라서 XOR 하게되는 r24 친구는 0x100, 0x102, 0x103 셋 중 하나로 결정된다.
(4)일련의 반복과정으로 0xAD2 ~ 0xADB 번지에 차곡차곡 갱신된다.
이런식으로 끝까지 블럭을 분석하였다.
얼핏보면 길지만 결국에는 입력한 여덟문자를 토대로 어떤문자열과 연산하여 열개의 문자열을 생성해내는 것이었다.
나머지 아랫부분의 긴 블럭 또한 위쪽처럼 열문자에 대해 어떤 변화를 줄 것이다.
그래프뷰의 아랫쪽에 긴 블럭 이후에도 AD2~ ADB가 영향을 받는지 확인하고 싶었다. 정확히는 0x3D4 까지 코드가 실행 된 이후에도 영향을 받는지 확인하고싶었다. 영향을 안 받는다면 그 이후 것은 해석할 필요가 없기 때문
(1) 0x3D4 까지 실행된 직 후
(2)0x3F7 까지 실행된 직 후
AD2~ ADB 전체는 아니지만 일부는 영향을 받는다.
'reversing.kr' 카테고리의 다른 글
AVR reverse engineering (6) CustomShell (0) | 2018.08.06 |
---|---|
reversing.kr CRC1 (0) | 2018.02.07 |
AVR reverse engineering (4) CustomShell (0) | 2018.02.05 |
AVR reverse engineering (3) CustomShell (0) | 2018.02.05 |
AVR reverse engineering (2) AVR ATmega128 (0) | 2018.01.30 |