Guest User

Untitled

a guest
Nov 27th, 2021
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.12 KB | None | 0 0
  1. package com.juju.droidSpy;
  2.  
  3.  
  4. import android.app.*;
  5. import android.os.*;
  6. import android.view.*;
  7. import android.widget.*;
  8.  
  9. import java.util.*;
  10. import java.io.*;
  11.  
  12. import android.content.*;
  13. import android.content.res.Resources;
  14. import android.net.Uri;
  15. public class MainActivity extends ListActivity
  16. {
  17.     private MONOAdapter monoAdapter;
  18.     private static final String ROOT_PATH = "/sdcard/";
  19.     private String Current_Path;
  20.     //存储文件名称
  21.     private ArrayList<String> names = null;
  22.     //存储文件路径
  23.     private ArrayList<String> paths = null;
  24.     private View view;
  25.     private EditText editText;
  26.     File assets;
  27.     private ProgressDialog pdialog;
  28.     /** Called when the activity is first created. */
  29.     @Override
  30.     public void onCreate(Bundle savedInstanceState) {
  31.         monoAdapter=new MONOAdapter();
  32.         super.onCreate(savedInstanceState);
  33.         setContentView(R.layout.main);
  34.         //显示文件列表
  35.         showFileDir(ROOT_PATH);
  36.     }
  37.  
  38.     @Override
  39.     public boolean onCreateOptionsMenu(Menu menu)
  40.     {
  41.         MenuInflater menuinflater=getMenuInflater();
  42.         menuinflater.inflate(R.menu.main_menu,menu);
  43.         // TODO: Implement this method
  44.         return true;
  45.     }
  46.  
  47.     @Override
  48.     public boolean onOptionsItemSelected(MenuItem item)
  49.     {
  50.         assets= getDir("libmono",MODE_PRIVATE);
  51.         switch(item.getItemId())
  52.         {
  53.             case R.id.main_menuitem1://初始化运行环境
  54.                 pdialog=new ProgressDialog(this);
  55.                 pdialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
  56.                 pdialog.setTitle("初始化运行环境...");
  57.                 pdialog.setMessage("正在解压文件(约需要2分钟)...");
  58.                 pdialog.setCancelable(false);
  59.                 pdialog.show();
  60.                 new Thread(new Runnable(){
  61.                     @Override
  62.                     public void run(){
  63.                         try{
  64.                             FileAdapter.copyFilesFassets(getApplicationContext(),"libmono",assets.getAbsolutePath());
  65.                             MONOAdapter.runCmd("chmod 777 "+assets.getAbsolutePath()+File.separator+"init_env.sh");
  66.                             String s2=MONOAdapter.runCmd("sh "+assets.getAbsolutePath()+File.separator+"init_env.sh");
  67.                             Message msg=new Message();
  68.                             msg.obj=s2;
  69.                             //msg.what=123;
  70.                             myhandler.sendMessage(msg);
  71.                         }
  72.                         catch(Exception e){
  73.                             e.printStackTrace();
  74.                         }
  75.                     }
  76.                 }).start();
  77.                 break;
  78.             case R.id.main_menuitem2:
  79.                 finish();break;
  80.             case R.id.main_menuitem3:  
  81.                 showFileDir(Current_Path);break;
  82.         }
  83.         // TODO: Implement this method
  84.         return super.onOptionsItemSelected(item);
  85.     }
  86.  
  87.     boolean isExit;
  88.     @Override
  89.     public boolean onKeyDown(int keyCode, KeyEvent event)
  90.     {
  91.         // TODO: Implement this method
  92.         if(keyCode==KeyEvent.KEYCODE_BACK)//是否是返回键
  93.         {
  94.             if(!Current_Path.equals("/"))//不是最高目录,返回上级文件夹
  95.             {
  96.                 showFileDir(new File(Current_Path).getParent());
  97.             }
  98.             else{
  99.                 if(!isExit)//第一次按下返回键,提示退出
  100.                 {
  101.                     isExit=true;
  102.                     displayToast("再按一次返回键退出");
  103.                     mhander.sendEmptyMessageDelayed(0,2000);
  104.                 }
  105.                 else//第二次按下返回键
  106.                 {
  107.                     finish();
  108.                 }
  109.             }
  110.             return false;
  111.         }
  112.         else
  113.             return super.onKeyDown(keyCode, event);
  114.     }
  115.    
  116.     Handler mhander=new Handler(){
  117.  
  118.         @Override
  119.         public void handleMessage(Message msg)
  120.         {
  121.             // TODO: Implement this method
  122.             super.handleMessage(msg);
  123.             isExit=false;
  124.         }
  125.     };
  126.    
  127.     Handler myhandler=new Handler(){
  128.  
  129.         @Override
  130.         public void handleMessage(Message msg)
  131.         {
  132.             // TODO: Implement this method
  133.             super.handleMessage(msg);
  134.             pdialog.dismiss();
  135.             new AlertDialog.Builder(MainActivity.this).setTitle("运行结果")
  136.                 .setMessage((String)msg.obj)
  137.                 .setPositiveButton("确定",new DialogInterface.OnClickListener(){
  138.                     public void onClick(DialogInterface p1,int p2){}
  139.                 }).show();
  140.         }
  141.     };
  142.    
  143.     public static void orderByName(File[] f)
  144.     {
  145.         List<File> files=Arrays.asList(f);
  146.         Collections.sort(files,new Comparator<File>(){
  147.                 @Override
  148.                 public int compare(File o1,File o2){
  149.                     if(o1.isDirectory()&&o2.isFile()){
  150.                         return -1;
  151.                     }
  152.                     if(o1.isFile()&&o2.isDirectory())return 1;
  153.                     return o1.getName().toLowerCase().compareTo(o2.getName().toLowerCase());
  154.                 }
  155.             });
  156.     }
  157.    
  158.     private void showFileDir(String path){
  159.         Current_Path=path;
  160.         names = new ArrayList<String>();
  161.         paths = new ArrayList<String>();
  162.         File file = new File(path);
  163.         File[] files = file.listFiles();
  164.         orderByName(files);
  165.         //如果当前目录不是根目录
  166.         if (!ROOT_PATH.equals(path)){
  167.             names.add("@1");
  168.             paths.add(ROOT_PATH);
  169.             names.add("@2");
  170.             paths.add(file.getParent());
  171.         }
  172.         //添加所有文件
  173.         for (File f : files){
  174.             names.add(f.getName());
  175.             paths.add(f.getPath());
  176.         }
  177.         this.setListAdapter(new MyAdapter(this,names,paths));
  178.     }
  179.     @Override
  180.     protected void onListItemClick(ListView l, View v, int position, long id) {
  181.         String path = paths.get(position);
  182.         File file = new File(path);
  183.         // 文件存在并可读
  184.         if (file.exists() && file.canRead()){
  185.             if (file.isDirectory()){
  186.                 //显示子目录及文件
  187.                 showFileDir(path);
  188.             }
  189.             else{
  190.                 //处理文件
  191.                 fileHandle(file);
  192.             }
  193.         }
  194.         //没有权限
  195.         else{
  196.             Resources res = getResources();
  197.             new AlertDialog.Builder(this).setTitle("Message")
  198.                 .setMessage(res.getString(R.string.no_permission))
  199.                 .setPositiveButton("OK",new AlertDialog.OnClickListener() {
  200.                     @Override
  201.                     public void onClick(DialogInterface dialog, int which) {
  202.                     }
  203.                 }).show();
  204.         }
  205.         super.onListItemClick(l, v, position, id);
  206.     }
  207.     //对文件进行增删改
  208.     private void fileHandle(final File file){
  209.         DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
  210.             @Override
  211.             public void onClick(DialogInterface dialog, int which) {
  212.                 // 打开文件
  213.                 if (which == 0){
  214.                     openFile(file);
  215.                 }
  216.                 //修改文件名
  217.                 else if(which == 1){
  218.                     LayoutInflater factory = LayoutInflater.from(MainActivity.this);
  219.                     view = factory.inflate(R.layout.rename_dialog, null);
  220.                     editText = (EditText)view.findViewById(R.id.editText);
  221.                     editText.setText(file.getName());
  222.                     DialogInterface.OnClickListener listener2 = new DialogInterface.OnClickListener() {
  223.                         @Override
  224.                         public void onClick(DialogInterface dialog, int which) {
  225.                             // TODO Auto-generated method stub
  226.                             String modifyName = editText.getText().toString();
  227.                             final String fpath = file.getParentFile().getPath();
  228.                             final File newFile = new File(fpath + "/" + modifyName);
  229.                             if (newFile.exists()){
  230.                                 //排除没有修改情况
  231.                                 if (!modifyName.equals(file.getName())){
  232.                                     new AlertDialog.Builder(MainActivity.this)
  233.                                         .setTitle("注意!")
  234.                                         .setMessage("文件名已存在,是否覆盖?")
  235.                                         .setPositiveButton("确定", new DialogInterface.OnClickListener() {
  236.                                             @Override
  237.                                             public void onClick(DialogInterface dialog, int which) {
  238.                                                 if (file.renameTo(newFile)){
  239.                                                     showFileDir(fpath);
  240.                                                     displayToast("重命名成功!");
  241.                                                 }
  242.                                                 else{
  243.                                                     displayToast("重命名失败!");
  244.                                                 }
  245.                                             }
  246.                                         })
  247.                                         .setNegativeButton("取消", new DialogInterface.OnClickListener() {
  248.                                             @Override
  249.                                             public void onClick(DialogInterface dialog, int which) {
  250.                                             }
  251.                                         })
  252.                                         .show();
  253.                                 }
  254.                             }
  255.                             else{
  256.                                 if (file.renameTo(newFile)){
  257.                                     showFileDir(fpath);
  258.                                     displayToast("重命名成功!");
  259.                                 }
  260.                                 else{
  261.                                     displayToast("重命名失败!");
  262.                                 }
  263.                             }
  264.                         }
  265.                     };
  266.                     AlertDialog renameDialog = new AlertDialog.Builder(MainActivity.this).create();
  267.                     renameDialog.setView(view);
  268.                     renameDialog.setButton("确定", listener2);
  269.                     renameDialog.setButton2("取消", new DialogInterface.OnClickListener() {
  270.                             @Override
  271.                             public void onClick(DialogInterface dialog, int which) {
  272.                                 // TODO Auto-generated method stub
  273.                             }
  274.                         });
  275.                     renameDialog.show();
  276.                 }
  277.                 //删除文件
  278.                 else if(which==2){
  279.                     new AlertDialog.Builder(MainActivity.this)
  280.                         .setTitle("注意!")
  281.                         .setMessage("确定要删除此文件吗?")
  282.                         .setPositiveButton("确定", new DialogInterface.OnClickListener() {
  283.                             @Override
  284.                             public void onClick(DialogInterface dialog, int which) {
  285.                                 if(file.delete()){
  286.                                     //更新文件列表
  287.                                     showFileDir(file.getParent());
  288.                                     displayToast("删除成功!");
  289.                                 }
  290.                                 else{
  291.                                     displayToast("删除失败!");
  292.                                 }
  293.                             }
  294.                         })
  295.                         .setNegativeButton("取消", new DialogInterface.OnClickListener() {
  296.                             @Override
  297.                             public void onClick(DialogInterface dialog, int which) {
  298.                             }
  299.                         }).show();
  300.                 }
  301.                 //反编译Assembly
  302.                 else
  303.                 {
  304.                     if(file.getName().endsWith(".exe")||file.getName().endsWith(".dll"))
  305.                     {
  306.                         pdialog=new ProgressDialog(MainActivity.this);
  307.                         pdialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
  308.                         pdialog.setTitle("正在反编译...");
  309.                         pdialog.setMessage("请耐心等待...");
  310.                         pdialog.setCancelable(false);
  311.                         pdialog.show();
  312.                         new Thread(new Runnable(){
  313.                             @Override
  314.                             public void run(){
  315.                                 try{
  316.                                     String s= monoAdapter.Decompiler(file,MainActivity.this);
  317.                                     Message msg=new Message();
  318.                                     msg.obj=s;
  319.                                     //msg.what=123;
  320.                                     myhandler.sendMessage(msg);
  321.                                 }
  322.                                 catch(Exception e){
  323.                                     e.printStackTrace();
  324.                                 }
  325.                             }
  326.                         }).start();
  327.  
  328.  
  329.                     }
  330.                     else
  331.                     {
  332.                         Toast.makeText(getApplicationContext(),"Wrong Format!",Toast.LENGTH_LONG).show();
  333.                     }
  334.                 }
  335.             }
  336.         };
  337.         //选择文件时,弹出增删该操作选项对话框
  338.         String[] menu = {"打开文件","重命名","删除文件",".NET反编译该Assembly"};
  339.         new AlertDialog.Builder(MainActivity.this)
  340.             .setTitle("请选择要进行的操作!")
  341.             .setItems(menu, listener)
  342.             .setPositiveButton("取消", new DialogInterface.OnClickListener() {
  343.                 @Override
  344.                 public void onClick(DialogInterface dialog, int which) {
  345.                 }
  346.             }).show();
  347.     }
  348.     //打开文件
  349.     private void openFile(File file){
  350.         Intent intent = new Intent();
  351.         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  352.         intent.setAction(android.content.Intent.ACTION_VIEW);
  353.         String type = getMIMEType(file);
  354.         intent.setDataAndType(Uri.fromFile(file), type);
  355.         startActivity(intent);
  356.     }
  357.     //获取文件mimetype
  358.     private String getMIMEType(File file){
  359.         String type = "";
  360.         String name = file.getName();
  361.         //文件扩展名
  362.         String end = name.substring(name.lastIndexOf(".") + 1, name.length()).toLowerCase();
  363.         if (end.equals("m4a") || end.equals("mp3") || end.equals("wav")){
  364.             type = "audio";
  365.         }
  366.         else if(end.equals("mp4") || end.equals("3gp")) {
  367.             type = "video";
  368.         }
  369.         else if (end.equals("jpg") || end.equals("png") || end.equals("jpeg") || end.equals("bmp") || end.equals("gif")){
  370.             type = "image";
  371.         }
  372.         else {
  373.             //如果无法直接打开,跳出列表由用户选择
  374.             type = "*";
  375.         }
  376.         type += "/*";
  377.         return type;
  378.     }
  379.     private void displayToast(String message){
  380.         Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
  381.     }
  382. }
  383.  
Advertisement
Add Comment
Please, Sign In to add comment