기본 콘텐츠로 건너뛰기

2025년 9월 카카오 사태 프로필 미공개

2025년 9월 23일 카카오 사태가 벌어졌다.   나는 다행히 앱스토어 설정에 들어가서 자동업데이트를 비활성해서 이번 사태를 잠깐 피해갈 수 있었다.   하지만 유튜브를 보다보니까   이번에 업데이트를 이미 한 사람들에게 나의 프로필이 까발려 진다는 것을 알게되었다.   내 친구한테 알려지는 건 좋은데   카카오톡은 내가 전혀 모르는 사람이나 싫은 사람, 업무적인 사람들 연락처에 있는 모든 사람이나 전화 번호가 변경되서 모르는 사람들도 친구 목록에 표시가 된다.   그런 모든 사람들에게 내 사생활을 강제로 공개되도록 해버렸다는 거에 공포를 느꼈다.   프로필 탭으로 이동해서   내 프로필에서 오른쪽 상단에 설정 버튼이 있고 그걸 클릭하면   프로필 설정들이 있고 거기서 옵션들을 비활성 해주자   “프로필 인증배지 표시”, “내 프로필 검색”, “내 홈 표시” 모두 비활성 해줬다.   솔직히 앞으로 이번 사태 이전으로 롤백을 시키지 않는한 앞으로 프로필에 사진을 올릴거 같지 않다.   이미 앱은 배포가 되었고   이 사태가 벌어진 버전의 앱을 업데이트 하지 않고 사용하는 사람들이 많을것이다.   (보통은 앱을 배포 하고 강제로 업데이트 유도하지 않는 이상 앱을 업데이트 하지 않는 사람들이 많다.) 만약에 더 프로필 공개에 공포를 느낀다면 프로필에 올린 이미지들을 당장 지우자.   *추가* 숏폼과 오픈채팅을 합쳐놓은 것도 참 거지같은 짓을 한거라고 생각한다.   오픈채팅에 개발이나 다이어트나 여러가지 같은 관심을 가진 사람들이 단체 톡방에 들어가서 커뮤니티를 하고 계실거다.   나도 개발 단체톡방에 들어가서 대화를 하는데   왜 그걸 합쳐놔서   오픈채팅을 들어가기 위해서 무조건 숏폼을 강제로 봐야 한다는 건 참 별로다.   *추가 2* 벌서 온갖 야시시 하고 폭력적인 숏폼에 노출되고 있...

Android NDK(JNI) AES 복호화 코드

NDK C 소스에서 java 함수를 불러와서 복호화 하는 코드
C 기반으로 만들어서 C++의 경우 수정 필요



jbyteArray aesdecrypt128bit(JNIEnv* env, int appversion, int bitnumber, jbyteArray data){
    // 자바에서 암호화 함수를 불러와서 복호화를 진행
    LOGD("NDK : %d / %d", appversion, bitnumber);

    // SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");    jclass cls_SecretKeySpe = (*env)->FindClass( env, "javax/crypto/spec/SecretKeySpec" );
    jmethodID constructor_SecretKeySpe = (*env)->GetMethodID(env, cls_SecretKeySpe, "<init>", "([BLjava/lang/String;)V");
    jobject myKey = NULL;

    if(bitnumber == 128){
        myKey = (*env)->NewObject(env, cls_SecretKeySpe, constructor_SecretKeySpe, getKey(env, appversion), (*env)->NewStringUTF( env, "AES" ));
    }
    else if(bitnumber == 256){
        myKey = (*env)->NewObject(env, cls_SecretKeySpe, constructor_SecretKeySpe, getKey256(env, appversion), (*env)->NewStringUTF( env, "AES" ));
    }

    //IvParameterSpec ivspec = new IvParameterSpec(key.substring(0,16).getBytes("UTF-8"))    jclass cls_IvParameterSpec = (*env)->FindClass(env, "javax/crypto/spec/IvParameterSpec");
    jmethodID constructor_IvParameterSpec = (*env)->GetMethodID(env, cls_IvParameterSpec, "<init>", "([B)V");
    jobject ivspec = NULL;

    if(bitnumber == 128){
        ivspec = (*env)->NewObject(env, cls_IvParameterSpec, constructor_IvParameterSpec, getIvKey(env, appversion));
    }
    else if(bitnumber == 256){
        ivspec = (*env)->NewObject(env, cls_IvParameterSpec, constructor_IvParameterSpec, getIvKey256(env, appversion));
    }

    // Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");    jclass cls_Cipher = (*env)->FindClass( env, "javax/crypto/Cipher" );
    jfieldID fid = (*env)->GetStaticFieldID(env, cls_Cipher, "DECRYPT_MODE", "I");
    jint cipher_mode = (*env)->GetStaticIntField( env, cls_Cipher, fid );
    jmethodID mid_getInstance = (*env)->GetStaticMethodID( env, cls_Cipher, "getInstance", "(Ljava/lang/String;)Ljavax/crypto/Cipher;" );
    jobject obj_Cipher = (*env)->CallStaticObjectMethod( env, cls_Cipher, mid_getInstance, (*env)->NewStringUTF(env, "AES/CBC/PKCS5Padding" ) );

    // cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivspec);    jclass cls_Cipher_init = (*env)->GetObjectClass( env, obj_Cipher );
    jmethodID mid_init = (*env)->GetMethodID( env, cls_Cipher_init, "init", "(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V" );
    (*env)->CallVoidMethod( env, obj_Cipher, mid_init, cipher_mode, myKey, ivspec );

    // encrypted = cipher.doFinal(bytes);    jmethodID mid_doFinal = (*env)->GetMethodID( env, cls_Cipher_init, "doFinal", "([B)[B" );
    jbyteArray decrypted_data = (jbyteArray)(*env)->CallObjectMethod( env, obj_Cipher, mid_doFinal, data );

    (*env)->DeleteLocalRef( env, cls_Cipher ); // Release Cipher    (*env)->DeleteLocalRef( env, myKey );
    (*env)->DeleteLocalRef( env, cls_SecretKeySpe ); // Release SecretKeySpec    (*env)->DeleteLocalRef( env, ivspec );
    (*env)->DeleteLocalRef( env, cls_IvParameterSpec ); // Release IvParameterSpec    (*env)->DeleteLocalRef( env, obj_Cipher );
    (*env)->DeleteLocalRef( env, cls_Cipher_init );

    return decrypted_data;
}