입력받은 pin을 MD5로 해시화하고 AndroidManifest.xml 파일에서도 외부노출이 되는 속성이 존재한다.

추가적으로 입력 받은 pin 번호를 shared_prefs에 pinDetails라고 저장한다. 전에 말한대로 해싱되어 있기 때문에 단순 조회만 되고 pin 값을 알아내기 어렵다.


입력한 pin이 맞으면 AccessControl1ViewActivity를 호출하지만 pin을 알수 없기 때문에 전에 menifest에서 확인한 속성을 활용하여 외부 호출을 해준다.


짜잔
Content Provider : Android 앱의 데이터를 다른 컴포넌트나 다른 앱이 정해진 방식으로 읽고 수정할 수 있게 해주는 데이터 창구
예를 들어, 연락처 앱은 연락처 데이터를 ContentProvider로 제공한다. 다른 앱은 연락처 DB 파일을 직접 여는 대신 Android의 ContentResolver를 통해 데이터를 요청한다.
ContentProvider는 보통 content:// 스키마를 사용한다.
content://owasp.sat.agoat.provider.userpinsprovider/user_pins/2
│ │ │ │
scheme authority 경로 ID
이 주소는 user_pins 테이블에 접근할 수 있는 API 주소로 Android의 ContentResolver 명령으로 사용된다.

해당 provider는 외부호출이 가능하지만 따로 권한 설정이 안되어있다. (ex. android:permission, readPermission, writePermission)
static {
Uri uri = Uri.parse("content://owasp.sat.agoat.provider.userpinsprovider/user_pins");
Intrinsics.checkNotNullExpressionValue(uri, "parse(\"content://$AUTHORITY/$TABLE\")");
CONTENT_URI = uri;
UriMatcher $this$urimatcher_u24lambda_u240 = new UriMatcher(-1);
$this$urimatcher_u24lambda_u240.addURI(AUTHORITY, TABLE, 1);
$this$urimatcher_u24lambda_u240.addURI(AUTHORITY, "user_pins/#", 2);
urimatcher = $this$urimatcher_u24lambda_u240;
}
그리고 provider가 사용하는 URI가 content://owasp.sat.agoat.provider.userpinsprovider/user_pins 이므로 다음 형식을 지켜서 접근한다.
adb shell content query --uri content://owasp.sat.agoat.provider.userpinsprovider/user_pins
