Study/App 32

[App]Uncrackable3

해당 앱을 실행하면 경고와 함께 OK를 누르면 앱이 종료된다. 기존 uncrackable1과 2와 동일하게 exit() 후킹을 시도했으나 다음과 같은 결과가 나온다. 분석 MainActivity를 확인해보자. 해당 부분을 보면 106번째 줄에서 init()함수에 xorkey 값으로 "pizzapizzapizzapizz"를 인자로 가지고 간다. 그리고 104번째 줄에서는 verifyLibs()함수가 실행된다. verifyLibs()라는 함수가 있고 해당 함수에서 libfoo.so 파일을 불러오는 것을 확인할 수 있다. 해당 함수는 무결성 검증 로직이다. libfoo.so 파일의 crc를 저장하고, apk가 실행되는 실제 환경에서 llibfoo.so 파일을 찾아 crc 값을 비교한다. 여기서 값이 다르다면 ..

Study/App 2022.10.30

[App]Uncrackable2

해당 앱을 실행하면 루팅이 탐지되었다는 경고와 함께 OK를 누르면 앱이 종료된다. 해당 부분의 경우 uncrackable1과 동일한 방법으로 해결해주면 된다. 자세한 내용은 아래 게시글을 참고하도록 하자. [App]Uncrackable1 루팅 탐지 - 반환 값, exit() Uncrackable1을 실행하면 다음과 같은 화면이 뜨며 앱이 종료된다. 반환 값 수정 jadx를 사용하여 MainActivity를 확인해보자. if문을 사용하는 것을 확인할 수 있다. c.a() 혹은 c.b() 혹은 c.c()의 값이 True.. seomj74.tistory.com 그 후 String 값을 입력해야 한다. verify 함수를 확인 79번째 줄을 보면 if문을 사용하여 조건을 만족하면 "Success!"를 출력한다...

Study/App 2022.10.22

[App]Fridalab 7

문제 challenge_07에서 check07Pin 메소드에서 받은 인자를 chall07 변수 값과 비교한 값을 return한다. chall07의 값은 랜덤 bruteforce를 사용할 것 (burteforce를 사용하지 않을 경우에는 chall07에 저장된 값을 가져와 Mainactivity에서 chall07()의 인자로 값을 넘겨주면 됨) js코드 function pad(n, width, z) { z = z || '0'; n = n +''; return n.length >= width ? n : new Array (width - n.length + 1).join(z) + n; } setTimeout(function() { Java.perform(function() { var main; Java.cho..

Study/App 2022.10.20

[App]Fridalab 1

문제 MainActivity파일에서 challenge_01 클래스의 getChall01Int() 메소드를 호출하고 있으며 해당 변수 값이 1이 되어야 한다. js코드 setImmediate(function() { Java.perform(function() { var targetClass=decodeURIComponent( 'uk.rossmarks.fridalab.challenge%5f01' ); var methodName='getChall01Int'; var gclass=Java.use(targetClass); gclass[methodName].overload().implementation=function() { console.log('\nGDA[Hook getChall01Int ()'+''); var ..

Study/App 2022.10.20

[App]레지스터 스택프레임

다시 리마인드겸 추가 포스팅ㅎㅎ [Reversing]스택프레임/프롤로그&에필로그 함수호출 1.함수가 사용할 파라미터를 스택에 넣고 함수 시작지점으로 점프(함수 호출)한다. 2.함수 내에서 사용할 스택프레임을 설정한다. (프롤로그) 3.함수의 내용을 수행한다. 4.수행을 마치 seomj74.tistory.com 스택 프레임 스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸 함수가 호출되면 스택에는 함수의 매개변수, 호출이 끝난 뒤 돌아갈 반환 주소값, 함수에서 선언된 지역 변수 등이 저장 함수호출 1. 함수가 사용할 파라미터를 스택에 넣고 함수 시작지점으로 점프(함수 호출)한다. 2. 함수 내에서 사용할 스택프레임을 설정한다. (프롤로그) 3. 함수의 내용을 수행한다. 4. 수행을 마..

Study/App 2022.10.07

[App]레지스터 함수, 배열

함수 PRINT 함수 이처럼 PRINT 함수를 선언하고 실행시키면 해당 함수 내부로 들어가 msg 문자열을 출력시키게 된다. ADD 함수 eax와 ebx의 더하기 연산을 해주는 함수를 실행시켰고 1과 3을 더해 4가 출력되었다. MIN 함수 cmp를 통해 eax와 ebx의 값을 비교한 뒤 jl을 통해 eax가 더 작으면 LABEL_1으로 이동하게 된다. jl: jump if A less than B 해당 코드에서는 eax가 1, ebx가 3으로 해당 함수들을 거쳐 1이 출력된다. 배열 ecx를 14번째 줄에서 cmp로 5와 비교를 하여 15번째 줄에서 jne를 사용해 반복 실행 혹은 종료가 된다. 즉, 5번의 반복문을 실행한다고 생각하면 된다. [a]는 시작주소이고 ecx가 처음에 0, 1, 2, 3, ..

Study/App 2022.10.04