기존에 Uncrackable3에 대해 분석하다가 이제서야 풀이를 올리네요

 

기존에 분석했던 내용은 아래에 있습니다.

https://taesun1114.tistory.com/entry/Uncrackable31?category=729990

 

Uncrackable3-1

저번에 Uncrackable3를 도전했었는데 당시에 다운받았던 앱이 오류가 있었던 건지 실행하면 바로 종료가 되어 분석을 하지 못했는데 며칠전 다시 다운받아 설치해보니 이번엔 잘돌아가네요 :) (당시에 앱 자체의..

taesun1114.tistory.com

앞서 프리다 및 xposed를 탐지하고 있고 루팅체크하는 것을 확인하였고, 돌아와서 소스코드를 확인해보면 this.check.check_code()를 통해서 문자열이 맞는지 확인하고 있습니다.

 

확인해보니 네이티브 함수를 호출하네요

 

libfoo.so파일 내 CodeCheck_bar함수를 기드라를 통해 분석해 보겠습니다.

첫번째 빨간 박스에서 무언가 하고 두번째 빨간 박스의 if문을 통해 문자열의 길이가 0x18이라는걸 알 수 있습니다.

 

첫번째 네모박스의 함수를 통해 문자열 혹은 키값을 생성한후 local_38이라는 변수에 저장해둔 후 3번째 네모박스의 함수에서 최종 문자열을 만들거나 비교를 하는 것으로 보이네요.

 

첫번째 네모박스 함수에 들어와서 분석해 보겠습니다. 뭔가 코드가 되게 긴걸 보실 수 있는데.... 

 

uVar1, uVar2, *puVar3을 통해 하는 행위는 분석을 어렵게 하기 위한 더미코드로 보여요(의미없는 행위들을 몇번이고 반복합다.)

 

더미코드라고 생각한 이유는 인자로받은 puParm1은 두고 로컬변수만 가지고 행위를 한 후 어디에 값을 넣는다던가 하는 행위가 없어서 더미코드라고 생각했습니다.

 

더미코드를 지나 쭉 내려오다보면 이제서야 puParm1에 무언가를 넣는코드를 보실 수 있습니다.

함수를 따라가 볼게요

 

함수를 통해 전달받은 uVar1과 0xb4와 xor연산을 한 후, 리턴해 주네요. 다시 함수를 따라가 봅니다.

 

xor하는 값만 다르고 계속 함수를 호출하는데요. 몇번이고 동일한 코드를 지나서 계속 함수를 따라 들어가다 보면.

 

최초에 0xe7을 리턴하는 것을 알 수 있습니다. 그러면 여기서부터 차례로 올라가볼게요 실력은 없고 시간은 많으니 이렇게라도 찾아볼게요

 

0xe7을 시작으로 xor해주면 다음과 같이 나옵니다.

 

이게 하나의 값이고 앞에서 보셨듯이 길이가 0x18(24)니까.. 24번 반복해주면 키값을 얻을 수 있어요 ....

 

소스코드에 보면 xorkey라는 값이 있는데 위에서 노가다로 획득한 키와 이값을 xor해줘야 됩니다.

 

다음과 같이 xor해주면 키값이 출력되는 것을 확인할 수 있습니다. 

 

프리다로 풀려고 했는데.. so파일 분석하다 보니 그냥 키값을 추출하게 되었네요....

+ Recent posts