<button id="nckgc"><object id="nckgc"></object></button><button id="nckgc"><acronym id="nckgc"></acronym></button>

    1. 首頁
      社區
      課程
      招聘
      Frida如何在內部類中獲得外部類對象(如MainActivity.this)

      比如有一個Android常見的語法

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      class MainActivity extends AppCompatActivity{
          private void test(){
              Log.e("Test","Frida OuterClass");
          }
          @Override
          protected void onCreate(Bundle savedInstanceState){
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              this.findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
                   @Override
                   public void onClick(View view) {
                        MainActivity.this.test();
                   }
              });
          }

      現在想要通過Frida,hook匿名內部類(實質上是內部類)的onClick的方法,我嘗試了如下的錯誤方式并不能成功,所以請教一下,如何獲取上面代碼中的MainActivity.this對象,并調用test方法呢?(請寫出JS方法)

      1
      2
      3
      4
      Java.use('com.example.app.MainActivity$a').onClick.implementation = function(){
          //如下方法是我在測試的時候嘗試的錯誤方法
          Java.use('com.example.app.MainActivity').this.test();
      }

      附:我還做過一些嘗試,通過Java.choose搜索堆中存在的MainActivity對象,然后再調用test方法,但是不知道為什么使用Java.choose方法一調用,APP就會閃退(這種情況只會出現在比較大的APP中),希望有大佬能順便指點一下,萬分感謝!

      收藏
      3條回答
      wx_Sambty 2021-10-5

      我想通了家人們.
      剛剛我去翻了一下反編譯后的smali代碼,發現了內部類MainActivity$a中存在一個屬性c2(具體名稱得翻smali代碼,可能每個都不一樣),結合Java虛擬機的知識,這應該就是內部類中指向外部類的指針.
      于是Frida腳本出來了

      1
      2
      3
      4
      5
      6
      Java.use('com.example.app.MainActivity$a').onClick.implementation = function(){
          //如下方法是我在測試的時候嘗試的錯誤方法
          Java.use('com.example.app.MainActivity').this.test();
          //如下方法是有效的
          this.c2.value.test();
      }
      回復
      wx_YwY 2021-10-27 2021-10-27編輯
      1
      2
      3
      4
      5
      6
      7
      8
      Java.perform(function () {
          my_main_activity = Java.use("com.example.app.MainActivity$a");
          my_main_activity. onClick.overload().implementation = function () {
              Java.use('com.example.app.MainActivity').test()
      res = this.onClick();
      return res
          }
      });
      回復
      kkandy 2023-9-12

      內部類只要不是靜態,肯定有外部類的指針(對象)參數的

      回復
      国产极品粉嫩福利姬萌白酱_欧美日韩在99线_粉条茄子做法视频_被按摩师玩弄到潮喷在线播放