실행을 시켜보니 username과 authCode를 입력받는다



디컴파일을 해보니 sub_4014A0함수에서 username과 authCode를 검사하는듯 하다.




주석으로 처리해 놓았는데 첫번째 do-while문에서는 username이 RingZer0인지 검증을 한다.


두번째 do-while문에서는 authCode의 길이가 15자 인지를 검증한다.


마지막 while문에서는 authCode의 값들이 '0'~'9'중에 있는지를 검증한 후 


sub_401334와 sub401450함수를 차례로 호출한 후 최종적으로 v10[4]==v19[17]가 참이어야지 인증에 성공하는 프로그램이다.


sub_401334함수는 a1(username)이 정해져 있기 때문에 분석할 필요가 없고 sub_401450함수만 분석하면 될듯하다.



 분석해 보면 15자리의 authCode를 3자리씩 잘라서 3개의 값들을 연산을 통해 총 5회 반복하여 크기 5의 문자열을 만들어낸다.


그리고 반환된 문자열을 앞서 반환된 문자열의 v9[1],v9[5],v9[8],v9[14],v9[17] 인덱스와 비교를 한다.


 디버깅을 통해 각각의 값은 0x98 0x97 0x78 0x0f 0x15 이다.


한번에 authCode의 3자리씩 알아낼 수 있으므로 간단한 코딩을 하면 문제가 풀린다.










'문제 > RingZeroTeam' 카테고리의 다른 글

RingZer0Team XSS Challenge 2  (0) 2016.10.20
RingZer0Team Windows API for the win!  (0) 2016.09.06


다운 받으면 exe파일 하나를 준다



디컴파일을 해보면 입력값이 &unk_403065와 같으면 ShowFlag함수가 실행된다.


인자값으로 입력값이 들어가는 것을 보아 if문을 우회해서 함수를 실행시키는게 아니라 


원하는 입력값을 입력해야만 옳은 Flag가 나올것으로 보인다.


 &unk_403065의 값이다.

입력값과 v11을 xor연산 하는것을 보니 v11의 값을 알아야 하는데 v11은 GetK 함수들을 통해 생성되는 것으로 보인다.


디버깅을 통해 v11에 들어가는 값을 보니


GetK1 = 8

GetK2 = -56

GetK3 = 24

GetK4 = 40

GetK5 = -72

GetK6 = -24


이런식으로 나왔다.


입력값을 알아내기위해 v11과 &unk_403065를 한바이트씩 xor연산을 통해 출력을 하면 값이 나온다.



참고로 디버깅을 하다가 getk6함수에서 GlobalHandle함수만 호출하면 프로그램이 죽었다.



GlobalHandle함수에 대해 검색을 해보니 확실한 원인은 찾지 못했지만 


옛날에 window7이 나온지 얼마 안됬을 때 피카츄배구가 window7에서 안돌아가서 win7호환용으로 따로 피카츄 배구가 있었다고 한다.


xp용과 7호환용의 차이점을 보니 win7호환용에서는 이 함수를 쓰지 않았다고 한다.


정확히는 모르지만 그냥 이 함수는 쓰면 안될거 같아서 함수 호출하는 부분을 NOP 처리하고 풀었다.


근데 실행하면 되는데 디버깅하면 왜 안되는지 모르겠다.


Windows API can be painful some time. 라고 문제에 써있어서 GlobalHandle함수가 문제인것은 확실한것 같다.



'문제 > RingZeroTeam' 카테고리의 다른 글

RingZer0Team XSS Challenge 2  (0) 2016.10.20
RingZer0Team RingZer0 Authenticator  (0) 2016.09.06


먼저 실행을 하니 몬스터들이 있고 몬스터들을 만나면 HP가 0이되어 죽는다.



IDA를 통해 문자열들을 보니 Game Clear라는 문자열을 발견했고 그 문자열이 사용되는 함수를 찾아보았다.




이 함수로 들어가면 조건이 맞을 때 MessageBox함수를 호출하는데 디버깅을 통해 강제로 메시지 창을 띄우니 이렇게 나왔다.




이상한 값은 IDA를 통해 봤을 때 &byte_407028에 있는 문자열인데 강제로 메시지 박스를 띄웠기 때문에 이런식으로 나온다 생각했다.


옳은 방법을 통해 일정 점수를 넘겼을 때 &byte_407028의 문자열이 연산을 통해 바뀔거라 생각했고 &byte_407028의 문자열이 사용된 부분들을 찾아봤다.



메인함수에서 이 함수를 호출 하는데 조건에 만족할때마다 XOR연산을 통해 문자하나씩 바꿔준다.


디버깅을 통해 이 함수에 브레이크 포인트를 걸고 함수를 실행해보니 



이 문자들과 0에서 부터 시작해 4씩 증가되면서 XOR연산을 하는것을 발견했다.








'문제 > Reversing.kr' 카테고리의 다른 글

Reversing.kr Ransomware  (0) 2017.01.21
Reversing.kr x64 Lotto  (0) 2016.10.06
Reversing.kr HateIntel  (0) 2016.10.05
Reversing.kr Music Player  (0) 2016.10.04
Reversing.kr Position  (0) 2016.09.30

먼저 앱을 다운후 실행 시키려 했지만 설치가 안됨.


계속 해매다가 이상한점 발견.


일반적인 apk


문제 apk


맥에서 옳게 인식을 하면 맥 실행파일 아이콘이 나와야 하는데 문제의 apk는 인식을 못함 .


자세히 보니 파일명들이 이상한 것을 볼 수 있음.


class.dex -> classes.dex


resource.arsc -> resources.arsc


AndroidManIfests.xml -> AndroidManifest.xml


변경하면 정상적으로 설치가 됨.


실행하면 키값이 뜸.






'문제 > CodeEngn_Smart_App' 카테고리의 다른 글

CodeEngn SmartApp 02  (0) 2016.08.25
CodeEngn SmartApp 03  (0) 2016.08.24


MainActivity를 살펴보면 앱이 켜질때 2013년 11월 2일 12시 35분 3초 이면서 Volume 함수의 리턴값이 53이어야 키값이 뜬다.


makeDate함수와 Volume함수를 조건에 맞도록 수정하는 방법도 있지만 


그냥 조건문 다음에 this.aView.setText(keyString)) 함수를 한번더 호출 하도록 Smali 코드를 패치했다.







'문제 > CodeEngn_Smart_App' 카테고리의 다른 글

CodeEngn SmartApp 01  (0) 2016.08.25
CodeEngn SmartApp 03  (0) 2016.08.24


디컴파일 해보니 랜덤으로 생성된 stairs와 내가 올라가야할 stairs가 있다.


랜덤으로 생성된 번호까지 내가 클릭을 하면 키값이 나온다.


TextView 2개가 있는데 첫번째는 랜덤으로 생성된 수 두번째는 내가 클릭할 때마다 증가되는 수.


조건에서 랜덤값과 내값이 다르다면 증가만하고 return 된다.


즉 조건문만 바꿔주면 키값이 뜬다.


호환이 안되서인지 랜덤으로 생성된 수가 보이지 않는다.


Smali코드에서 두번째 TextView에 eq이 아니라 ne일때 cond_0으로 점프하게 하면 키값이 뜰것이다.


Smali코드 패치후 컴파일 한후 버튼을 누르면 바로 키값이 뜬다.




'문제 > CodeEngn_Smart_App' 카테고리의 다른 글

CodeEngn SmartApp 01  (0) 2016.08.25
CodeEngn SmartApp 02  (0) 2016.08.25

+ Recent posts