[1. 클래스 호출을 통한 우회]
대상코드
package tuto.knowryu.tutorial;
import android.content.DialogInterface;
import android.os.Process;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
boolean rst = false;
setContentView(R.layout.activity_main);
/*
try{
Runtime.getRuntime().exec("su");
rst = true;
}catch(Exception e){
rst = false;
}
*/
}
public void RootClick(View v){
boolean rst = false;
TextView rootresult = (TextView) findViewById(R.id.rootresult);
try{
Runtime.getRuntime().exec("su");
rst = true;
}catch(Exception e){
Log.d("Rooting device",e.toString());
rst = false;
}
if(rst){
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(MainActivity.this);
alertDialogBuilder.setTitle("경고");
alertDialogBuilder.setMessage("루팅된 단말에서는 사용하실수없습니다.");
alertDialogBuilder.setPositiveButton("종료", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(),"종료됩니다.",Toast.LENGTH_LONG).show();
int pid = Process.myPid();
Process.killProcess(pid);
}
});
//메시지 박스 추가 필요
alertDialogBuilder.show();
}
rootresult.setText(String.valueOf(rst));
}
}
RootClick 이라는 버튼을 선택하면 Runtime.getRuntime().exec 를 사용하여 su 명령어를 호출하게 된다.
실행화면은 다음과 같다.
버튼을 누른 후 이미지는 다음과 같다.
사용할 프리다 코드의 기본 템플릿은 다음과 같다.
'Mobile > Android' 카테고리의 다른 글
[연습3]JNI 디버깅 (0) | 2018.12.05 |
---|---|
[연습1] 루팅 탐지(exec 방식) (0) | 2018.11.12 |