Layer7 동아리 과제

포너블 마지막 과제

msh1307 2022. 10. 31. 00:19

나는_gosu_다

apk 디컴파일 쳐보니까 jadx로 깔 수 있다고 하길래 jadx로 까봤다.

딱봐도 MainActivity라고 적혀있으니 중요한거 같아서 보면

뭔지는 몰라도, 대충 check_val이 100이면 플래그 출력해주는거라고 충분히 추측할 수 있다.

Toast가 뭔지는 몰라도 검색해보면, makeText의 첫번째 이자로 getApplicationContext()를 받고, 그 다음으로 스트링 받고, 마지막으로 길이를 받는다는 것을 알 수 있었다.

 

그런데 R.string.form1을 보고 들어가봤더니 이상한 주소가 있었다.

잘 찾아보니까 어떻게든 찾을 수 있었다.

 

그런데, String.valueOf(stringFromJNI())가 있길래, 검색해보니까, C++ native 함수라고 한다.

그래서 구현된 소스 코드를 찾기 힘들다고 한다.

 

근데 여기 lib에서 찾을 수 있다고 하길래 이걸 save 해서 아이다로 열어봤다.

함수 이름부터 심상치 않다.

딱봐도 이건 플래그 연산하는 거다.

lib.so는 arm용으로 쓰는게 일반적인데, x86_64도 구현된건 비슷해보이길래 그걸로 가져왔다.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
unsigned int __strlen_chk(const char *s, size_t s_len)
{
    size_t ret = strlen(s);
    if (__builtin_expect(ret >= s_len, 0)) {
        printf("error!");
        abort();
    }
    return ret;
}



unsigned long sub_B10(char *a1, char *a2){
    char v3;
    v3 = *(char *)a1;
    *a1 = *(char *)a2;
    *a2 = *(char *)&v3;
    return 0;
}

int main(){
    int k;
    int v3;
    int v4;
    int i;
    int j;
    int v7;
    char v8[7];
    long v9[3];
    char v12;
    char v13[520];
    unsigned long v14;


    v3 = 0;
    strcpy(v8,"Sunrin");
    v9[0] = 0xB495D00A8BDB2991LL;
    v9[1] = 0x35C686D2A2E5E9ABLL;
    v9[2] = 0x451A92195B9F;
    v12 = 0;
    for ( i = 0; i < 256; ++i )
    {
    v13[i + 256] = i;
    v13[i] = v8[i % (unsigned long)__strlen_chk(v8, 7LL)];
    }
    for ( j = 0; j < 256; ++j )
    {
    v3 = ((unsigned char)v13[j] + (unsigned char)v13[j + 256] + v3) % 256;
    sub_B10(&v13[j + 256], &v13[v3 + 256]);
    }
    v4 = 0;
    v7 = 0;
    for ( k = 0; k < (unsigned long)__strlen_chk(v9, 23LL); ++k )
    {
        v7 = (v7 + 1) % 256;
        v4 = ((unsigned char)v13[v7 + 256] + v4) % 256;
        sub_B10(&v13[v7 + 256], &v13[v4 + 256]);
        *((unsigned char *)v9 + k) ^= v13[(unsigned char)v13[((unsigned char)v13[v4 + 256] + (unsigned char)v13[v7 + 256])% 256+ 256]+ 256];
    }
    printf("%s",(char *)&v9);
}

그냥 아이다 그대로 복사붙여넣기 했다.

__strlen_chk는 인터넷에 구현있길래 그거 가져다 썼다.

android 관련된 부분은 삭제했다.

컴파일하니까 잘 나온다.

 

Sunrin{Randroid?CraCK_raNDoM!}

'Layer7 동아리 과제' 카테고리의 다른 글

포너블 5차시 과제  (1) 2022.10.18
포너블 4차시 과제  (0) 2022.10.05
포너블 3차시 과제  (0) 2022.09.25
포너블 2차시 과제  (0) 2022.09.21
포너블 1차시 과제  (0) 2022.09.18