'낙서장' 카테고리의 다른 글
gitignore 기본 세팅 (0) | 2022.04.22 |
---|---|
openssl 로컬 키 만들기 (0) | 2021.08.17 |
인텔리제이 output 한글깨짐 (0) | 2021.01.12 |
스프링부트 jar 배포하면 404에러 (0) | 2021.01.12 |
인텔리제이 자동 빌드 (0) | 2021.01.01 |
gitignore 기본 세팅 (0) | 2022.04.22 |
---|---|
openssl 로컬 키 만들기 (0) | 2021.08.17 |
인텔리제이 output 한글깨짐 (0) | 2021.01.12 |
스프링부트 jar 배포하면 404에러 (0) | 2021.01.12 |
인텔리제이 자동 빌드 (0) | 2021.01.01 |
세팅
www.yuts.me/posts/settingEslintOnIdea
저장시 자동 포맷팅
www.jetbrains.com/help/idea/prettier.html#ws_prettier_reformat_code
react 적용시
(위의 코드와 아래의 코드를 참고하여 같이 사용하면 쉽게 만들 수 있음)
next 적용시 아래 블로그에서 시행착오를 겪은 마지막 코드를 이용하고 툴바는 위의 코드를 이용하면 됨
m.blog.naver.com/choirj91/222044740530
타입 스크립트 버전으로 설치
npx create-next-app 앱이름 --ts
# or
yarn create next-app 앱이름 --typescript
해당 앱폴더로 이동하여
npm dev
#or
yarn dev
tsconfig.json 파일에 아래를 추가
{
[기타내용],
"compilerOptions": {
[기타내용],
"baseUrl": ".",
"paths": {
"@/*": [
"./*"
]
}
},
[기타내용],
}
yarn add mobx
또는
npm install --save mobx
.next / node_modules / package-lock.json 을 지우고
yarn install
또는
npm install
한 뒤 실행해본다
velog.io/@soncl_97/Next.js-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0
sumini.dev/guide/003-react-typescript-absolute-import/
intellij 인텔리제이 eslint typescript prettier (0) | 2021.02.19 |
---|---|
react js / next js quill 적용 (0) | 2021.02.17 |
react // 리덕스 실습 (0) | 2020.08.14 |
리액트 // redux 리덕스 (0) | 2020.08.12 |
리액트 // useEffect 연습 (0) | 2020.08.05 |
안드로이드 android // 오류 해결 Installed Build Tools revision 31.0.0 is corrupted. Remove and install again using the SDK Manager. (0) | 2022.01.16 |
---|---|
fcm push 올 경우 뱃지 변경 (0) | 2021.04.05 |
안드로이드 ndk cmark를 이용한 값 난독화 (0) | 2021.01.20 |
안드로이드 난독화 (0) | 2021.01.19 |
안드로이드 버튼 효과 그림자 음영 제거 (0) | 2020.11.20 |
메서드를 선택하고
ctrl shift T 를 누르면 테스트 패키지에 자동으로 생성됨.
코틀린 스프링부트 참고 사이트들 (0) | 2022.08.16 |
---|---|
SpringDataJPA QueryDSL 5.0.0 gradle setting / 그래들 세팅방법 (0) | 2022.04.22 |
자바 리스트 필터 // JPA LAZY 없는 데이터 처리 @NotFound(action = NotFoundAction.IGNORE) (0) | 2020.12.30 |
Spring boot // QueryDsl 컴파일 오류 해결 / 인텔리제이 (0) | 2020.12.16 |
스프링부트 // 두글자 변수 첫글자가 대문자일 경우 소문자로 바뀌는 것 막는 방법 jackson (0) | 2020.11.30 |
여러 사이트를 참고하여 ndk를 이용한 키 난독화 작업을 테스트 해보았음.
다만 구글링으로 구성하려고 하면 쉽지 않다.
오히려 안드로이드스튜디오의 템플레이트로 연습해보는 것이 좋다.
Native C++ 프로젝트를 열어보면
아래와 같이 cpp 폴더와 함께 CMake 관련 파일들이 생성된다.
native-lib.cpp 파일을 보면
Hello from C++을 리턴하게 되어있다.
MainActivity를 열어보면 스태틱으로 네이티브 라이브러리와 함수를 로드하게 되어있고
빌드후 실행해보면 Hello from C++가 나오는 간단한 프로젝트이다.
apk파일로 만들고 툴을 이용하여 디컴파일 해보면
아래와 같은 파일들이 만들어진다. (jniLibs)
위의 예제와 같은 이름의 프로젝트를 만들고
Project구조로 변경한뒤
main 폴더 안에 jniLibs라는 폴더를 만들고 그안에 위 파일들을 넣어준다.
그러고난 뒤 메인액티비티의 xml과 클래스파일을 예제 프로젝트와 똑같이 만든 후
빌드 실행 해보면 함수가 호출되어 같은 값이 출력된다.
(큰 의미 없다는 것)
jniLibs에 들어간 것은 so 파일인데
c파일은 so파일로 만들어져도 아래 사이트에 업로드해보면 대충 값을 확인할 수 있다.
onlinedisassembler.com/odaweb/
cpp파일은 so파일로 만들어지면 위 사이트로 열어봐도 보기 어렵다.
즉 내부코드를 확인하기는 쉽지 않다는 뜻이다. (코드 보안에는 좋을듯 함)
하지만 apk를 디컴파일하여 해당라이브러리를 사용하는 코드를 확인하여 작동해보면 값은 가져올 수 있다.
추가로 proguard 로 앱자체를 난독화하여 찾기 어렵게 만들어도 디컴파일 툴을 이용하면
아래와 같이 큰 힘을 들이지 않아도 찾아 낼 수 있다.
아이디어라면 라이브러리 이름과 매서드를 한글자(a 등)로 하여 분석하기 매우 힘들게는 가능 할 것 같다.
끝
안드로이드 스튜디오
sublimetext
apktool
dex2jar
jd-gui
(다시 말씀드리지만 ndk cmark 연습은 샘플프로젝트를 이용하는 것이 가장 빠름)
developer.android.com/studio/projects/install-ndk?hl=ko
developer.android.com/studio/projects/add-native-code?hl=ko
developer.android.com/ndk/samples/sample_hellojni
medium.com/@abhi007tyagi/storing-api-keys-using-android-ndk-6abb0adcadad
blog.mindorks.com/securing-api-keys-using-android-ndk
fcm push 올 경우 뱃지 변경 (0) | 2021.04.05 |
---|---|
안드로이드 // 앱 출시 할 때 API 안될 때 (0) | 2021.01.25 |
안드로이드 난독화 (0) | 2021.01.19 |
안드로이드 버튼 효과 그림자 음영 제거 (0) | 2020.11.20 |
안드로이드 // 개발중 앱이 2개 설치될때 (0) | 2020.08.25 |
외부 라이브러리 등의 난독화 설정을 해줘야한다.
라이브러리 docs에 proguard 관련 내용이 있으니 참고하면 된다.
또한 retrofit2와 rxjava 등을 사용한다면 통신에 필요한 모델들도 난독화에서 제외해야한다.
인텔리제이에서 아래와 같이 빨간줄이 뜨지만 정상작동한다.
(오히려 빨간줄을 없애려고 * 하나 줄이는 등의 작업을 하면 빌드 후 문제가 발생하는 듯 하다.)
아래는 proguard-rules.pro파일을 수정할 때 필요한 코드 등을 정리한 것이다.
아래 내용에 없는 라이브러리는 해당 라이브러리 사이트나 docs에서 proguard 설정 코드를 찾아본다.
그래도 안된다면 구글링을 하여 선배님들이 만들어 놓은 코드를 사용하자.
# If you keep the line number information, uncomment this to
# hide the original source file name.
# 소스 파일 변수 명 바꾸는 옵션
-renamesourcefileattribute SourceFile
# Uncomment this to preserve the line number information for
# debugging stack traces.
# 소스 파일의 라인을 섞지 않는 옵션 (이거 안해주면 나중에 stacktrace보고 어느 line에서 오류가 난 것인지 확인 불가)
-keepattributes SourceFile,LineNumberTable
# Retrofit2
# Retrofit does reflection on generic parameters. InnerClasses is required to use Signature and
# EnclosingMethod is required to use InnerClasses.
-keepattributes Signature, InnerClasses, EnclosingMethod
# Retrofit does reflection on method and parameter annotations.
-keepattributes RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations
# Retain service method parameters when optimizing.
-keepclassmembers,allowshrinking,allowobfuscation interface * {
@retrofit2.http.* <methods>;
}
# Ignore annotation used for build tooling.
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
# Ignore JSR 305 annotations for embedding nullability information.
-dontwarn javax.annotation.**
# Guarded by a NoClassDefFoundError try/catch and only used when on the classpath.
-dontwarn kotlin.Unit
# Top-level functions that can only be used by Kotlin.
-dontwarn retrofit2.KotlinExtensions
-dontwarn retrofit2.KotlinExtensions$*
# With R8 full mode, it sees no subtypes of Retrofit interfaces since they are created with a Proxy
# and replaces all potential values with null. Explicitly keeping the interfaces prevents this.
-if interface * { @retrofit2.http.* <methods>; }
-keep,allowobfuscation interface <1>
# Retrofit2
# 카카오 지도 앱 (빨간줄 뜨지만 정상)
-keep class net.daum.** {*;}
-keep class android.opengl.** {*;}
-keep class com.kakao.util.maps.helper.** {*;}
-keepattributes Signature
-keepclassmembers class * {
public static <fields>;
public *;
}
# 카카오 지도 앱 (빨간줄 뜨지만 정상)
# 카카오 로그인
-keep class com.kakao.sdk.**.model.* { <fields>; }
-keep class * extends com.google.gson.TypeAdapter
# 카카오 로그인
# 네이버 로그인
-keep public class com.nhn.android.naverlogin.** {
public protected *;
}
# 네이버 로그인
# firebase 구글 로그인
-keepattributes Signature
-keepattributes *Annotation*
# firebase 구글 로그인
# sqlite
-keep class org.sqlite.** { *; }
-keep class org.sqlite.database.** { *; }
-keep class net.sqlcipher.** { *; }
-dontwarn net.sqlcipher.**
# sqlite
# roomdb (androidx)
-keep class * extends androidx.room.RoomDatabase
-dontwarn androidx.room.paging.**
# roomdb
#glide
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
#glide
# okhttp3
-dontwarn okhttp3.**
-dontwarn okio.**
-dontnote okhttp3.**
# okhttp3
# support v4 ,v7
-dontwarn android.support.**
# support v4 ,v7
## gson (gson 컨버터와 다른 것)
###---------------Begin: proguard configuration for Gson ----------
## Gson uses generic type information stored in a class file when working with fields. Proguard
## removes such information by default, so configure it to keep all of it.
#-keepattributes Signature
#
## For using GSON @Expose annotation
#-keepattributes *Annotation*
#
## Gson specific classes
#-dontwarn sun.misc.**
##-keep class com.google.gson.stream.** { *; }
#
## Application classes that will be serialized/deserialized over Gson
#-keep class com.google.gson.examples.android.model.** { *; }
#
## Prevent proguard from stripping interface information from TypeAdapterFactory,
## JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
#-keep class * implements com.google.gson.TypeAdapterFactory
#-keep class * implements com.google.gson.JsonSerializer
#-keep class * implements com.google.gson.JsonDeserializer
#
###---------------End: proguard configuration for Gson ----------
## gson (gson 컨버터와 다른 것)
bigmatch.i-um.net/2016/08/05/retrofit2-rxjava-proguard-settings/
gogorchg.tistory.com/entry/Android-Project%EC%97%90-Proguard-%EC%A0%81%EC%9A%A9-%ED%95%98%EA%B8%B0
안드로이드 // 앱 출시 할 때 API 안될 때 (0) | 2021.01.25 |
---|---|
안드로이드 ndk cmark를 이용한 값 난독화 (0) | 2021.01.20 |
안드로이드 버튼 효과 그림자 음영 제거 (0) | 2020.11.20 |
안드로이드 // 개발중 앱이 2개 설치될때 (0) | 2020.08.25 |
안드로이드 // 서비스 연습2 카운터 앱 (0) | 2020.08.18 |