<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Frida-Labs

      0x1

      截圖

      截圖

      獲取了100以內的隨機數

      截圖

      只需要確保輸入的數為隨機數的2倍+4即可

      截圖

      hook該方法,返回值隨意,只要自己輸入符合對該值的要求即可

      Java.perform(function () {
          let MainActivity = Java.use("com.ad2001.frida0x1.MainActivity");
          MainActivity["get_random"].implementation = function () {
              this["get_random"]();
              console.log('get_random() return 0');
              return 0;
          };
      })
      

      返回0,輸入4即可

      截圖

      0x2

      截圖

      很顯然,需要主動調用get_flag方法,將顯示的textview修改掉

      截圖

      Java.perform(function () {
          Java.choose('com.ad2001.frida0x2.MainActivity',{
              onMatch: function(instance){
                  instance.get_flag(4919)
              },
              onComplete: function(){
      
              }
          })
      })
      

      采用attach方式進行hook,避免找到實例時,值修改后又被該回去

      或者spawn的話用下面的腳本(因為get_flag是靜態方法)

      Java.perform(function () {
          let MainActivity = Java.use("com.ad2001.frida0x2.MainActivity");
          MainActivity["onCreate"].implementation = function (savedInstanceState) {
              this["onCreate"](savedInstanceState);
              MainActivity.get_flag(4919)
          }
      

      截圖

      0x3

      截圖

      需要修改Checker的code屬性的值為512

      截圖

      截圖

      Java.perform(function () {
          let MainActivity = Java.use("com.ad2001.frida0x3.MainActivity$1");
          MainActivity["onClick"].implementation = function (view) {
              let Checker = Java.use("com.ad2001.frida0x3.Checker")
              Checker.code.value = 512
              this["onClick"](view);
          };
      })
      

      在onclick下面hookCheck類,可以最大程度上避免其他類或方法對其產生干擾

      截圖


      0x4

      截圖

      這里應該是考察主動調用,新建一個Check類的實例,調用get_flag,并把值送給textview

      截圖

      截圖

      Java.perform(function () {
          let MainActivity = Java.use("com.ad2001.frida0x4.MainActivity");
          MainActivity["onCreate"].implementation = function (savedInstanceState) {
              this["onCreate"](savedInstanceState);
              let Check = Java.use("com.ad2001.frida0x4.Check").$new()
              let c = Check.get_flag(1337)
              console.log(c)
          };
      })
      

      直接打印結果即可(我想試著修改textview,結果出現了不知名錯誤=-=)

      截圖

      0x5

      截圖

      與0x2不同的是,這里的方法不再是靜態方法

      截圖

      Java.perform(function () {
          Java.choose('com.ad2001.frida0x5.MainActivity',{
              onMatch: function(instance){
                  instance.flag(1337)
              },
              onComplete: function(){
      
              }
          })
      })
      

      還是attach

      截圖

      0x6

      截圖

      在0x5的基礎上,構造Checker即可

      截圖

      截圖

      Java.perform(function () {
          Java.choose('com.ad2001.frida0x6.MainActivity',{
              onMatch: function(instance){
                  let Checker = Java.use('com.ad2001.frida0x6.Checker').$new()
                  Checker.num1.value = 1234
                  Checker.num2.value = 4321
                  instance.get_flag(Checker)
              },
              onComplete: function(){
      
              }
          })
      })
      

      依舊是attach

      截圖

      0x7

      截圖

      hookChecker的構造方法即可

      截圖

      Java.perform(function () {
          let Checker = Java.use("com.ad2001.frida0x7.Checker");
          Checker["$init"].implementation = function (a, b) {
              console.log('hook $init()')
              this["$init"](520,520);
          };
      })
      

      截圖

      0x8

      截圖

      這里就要去看so了,直接hook返回值肯定拿不到正確的flag

      截圖

      每位的ascii碼減一就是flag了,但是這里用到了strcmp進行比較

      截圖

      直接hook strcmp

      截圖

      同時看到有打印日志,因此也可以hook日志

      截圖

      0x9

      截圖

      修改native的返回值即可

      截圖

      Java.perform(function () {
          let MainActivity = Java.use("com.ad2001.a0x9.MainActivity");
          MainActivity["check_flag"].implementation = function () {
              this["check_flag"]();
              console.log(`hook check_flag() return 1337`);
              return 1337;
          };
      })
      

      截圖

      0xA

      截圖

      這里就是正常的調用

      截圖

      但是在so里,存在一個導出函數get_flag

      截圖

      可以一眼看出如何解密,但是還是采用hook的方式來做

      截圖

      主動調用一下get_flag,同時還要注意其真正的導出名,不然找不到地址,解密后通過日志輸出了

      Java.perform(function () {
          var addr = Module.findExportByName("libfrida0xa.so", "_Z8get_flagii");
          console.log(addr)
          let get_flag_pointer = new NativePointer(addr)
          let get_flag = new NativeFunction(get_flag_pointer,'int',['int','int'])
          get_flag(1,2)
      })
      

      截圖

      0xB

      截圖

      截圖

      在so中,由于永假的判斷,導致代碼不執行,所以可以把jnz給nop掉,一共6個字節

      截圖

      Java.perform(function () {
          var funAddr = Module.findExportByName("libfrida0xb.so", "Java_com_ad2001_frida0xb_MainActivity_getFlag");
          var opAddr = funAddr.add(0x1E)
          console.log(opAddr)
          var writer = new X86Writer(opAddr)
          Memory.protect(opAddr,0x1000,'rwx')
          try{
              writer.putNop()
              writer.putNop()
              writer.putNop()
              writer.putNop()
              writer.putNop()
              writer.putNop()
              writer.flush()
          }finally{
              writer.dispose()
          }
      })
      

      或者是將jnz改成jz,我這里64位的模擬器,jnz的字節碼是0f85d2000000,85改成84就是jz

      Java.perform(function () {
          var funAddr = Module.findExportByName("libfrida0xb.so", "Java_com_ad2001_frida0xb_MainActivity_getFlag");
          var opAddr = funAddr.add(0x1E)
          console.log(opAddr)
          var writer = new X86Writer(opAddr)
          Memory.protect(opAddr,0x1000,'rwx')
          try{
              writer.putU8(0x0f)
              writer.putU8(0x84)
              writer.putU8(0xd2)
              writer.putU8(0x0)
              writer.putU8(0x0)
              writer.putU8(0x0)
              writer.flush()
          }finally{
              writer.dispose()
          }
      })
      

      截圖

      這里附上在ida中將jnz改為jz后的偽代碼

      截圖

      posted @ 2024-06-04 19:01  WXjzc  閱讀(561)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产精品一区在线蜜臀| AV最新高清无码专区| 成人亚洲狠狠一二三四区| 一亚洲一区二区中文字幕| 欧美国产日韩久久mv| 色一情一乱一伦麻豆| 老司机亚洲精品一区二区| 国产永久免费高清在线| 阿瓦提县| 人与禽交av在线播放| 女高中生强奷系列在线播放 | 久久亚洲精品成人av秋霞| 91精品国产自产在线蜜臀| 狠狠色丁香婷婷亚洲综合| 性动态图无遮挡试看30秒| 日韩人妻不卡一区二区三区| 国产精品va无码一区二区| 久久精品女人天堂av免费观看| 国产精品区一区第一页| 看免费的无码区特aa毛片| 国产拍拍拍无码视频免费| 国产不卡一区二区四区| 亚洲精品日本一区二区| 久久精品夜夜夜夜夜久久| 116美女极品a级毛片| 久热视频这里只有精品6| 9191国语精品高清在线| 乱码中文字幕| 国产精品99区一区二区三| 亚洲中文字幕无码av永久| 国产无遮挡无码视频在线观看| 无码人妻精品一区二区三区下载| 无套内射视频囯产| 少妇人妻无码专区在线视频| 开心激情站一区二区三区| 成人无码午夜在线观看| 国产精品久久久国产盗摄| 狠狠亚洲狠狠欧洲2019| 国产美熟女乱又伦AV果冻传媒| 四虎永久免费精品视频| 亚欧成人精品一区二区乱|