How to disable android anti-capture
With Hook Script다양한 앱을 사용하다보면 사진을 캡쳐하고 싶을 때가 있다. 안드로이드 기종에서는 이 기능을 간편하게 지원해주는데 일부 앱에서는 이 캡쳐 기능을 보안과 도용 방지를 위해 기술적으로 차단하려고 한다. 오늘은 해당 방법을 알아보고 우회하는 걸 재연해보려고 한다.
1
2
3
4
5
6
7
8
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(FLAG_SECURE); // secure-display
setContentView(binding.getRoot());
}
}
코드는 위와 같다.
1
getWindow().addFlags(FLAG_SECURE);
위 플래그는 아래와 같은 설명으로 8192
값을 가지고 있다.
1
2
3
4
5
6
7
8
9
10
Java.perform(function () {
var FLAG_SECURE = 0x2000;
var Window = Java.use("android.view.Window");
var setFlags = Window.setFlags; //.overload("int", "int")
setFlags.implementation = function (flags, mask) {
console.log("Disabling FLAG_SECURE...");
flags &= ~FLAG_SECURE;
setFlags.call(this, flags, mask);
};
});
위와 같이 javascript 를 작성해준다.
위는 적용하지 않았을 때 일반적인 앱 작동 모습이다.
실행중인 다른 앱을 보려고 백그라운드로 진입하면 앱 화면이 사라진다.
Hook 을 걸어 특정 메소드에 값을 변조시켰더니 이전과 다르게 백그라운드로 진입해도 화면이 사라지지 않는 걸 볼 수 있다.
stateDiagram-v2
State1: onCreate
State2: FLAG_SECURE
State3: any UI
note right of State2
Hook and replace value.
end note
State1 --> State2
State2 --> State3
onCreate
가 호출될 때 FLAG_SECURE
가 작동되는데 이때 해당 플래그를 인자 받는 메소드를 변조하여 블랙스크린 및 캡쳐 방지 기능을 무효화시킬 수 있다.
This post is licensed under CC BY 4.0 by the author.
If you find any errors, please let me know by comment or email. Thank you.
If you find any errors, please let me know by comment or email. Thank you.