<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Crack App | 某貓小說必讀榜加密參數(shù) sign 分析

          共 6566字,需瀏覽 14分鐘

           ·

          2022-11-29 14:58

          友情提示:本文章僅供學(xué)習(xí)交流,請勿用于非法用途!如果侵犯貴司請及時聯(lián)系刪除

          本次分析的是七貓小說中的七貓必讀榜的接口,關(guān)鍵參數(shù) sign ,接口是  /api/v1/must-read ,將app脫入到j(luò)adx中進(jìn)行分析,直接搜索 must-read 參數(shù),

          發(fā)現(xiàn)可疑參數(shù),跟進(jìn)去看一下

          上面一個參數(shù)跟我們抓包得到的參數(shù)是一致的,但是唯獨缺少了sign,懷疑可能是后續(xù)進(jìn)行添加的,接著搜索sign參數(shù)

          發(fā)現(xiàn)可疑的節(jié)點,addQueryyParameter,極大可能是利用這個方法添加sign參數(shù),直接上frida進(jìn)行hook驗證一下我們的猜想

          發(fā)下sign參數(shù)和抓包的參數(shù)是一致的,那我們就去跟蹤 Encryption.sign 這個方法,先用frida hook一下入?yún)⒌膕tr

          看的結(jié)果像是md5,到本地去驗證一下

          結(jié)果發(fā)現(xiàn)對不上,那我們值接調(diào)用這個方法加密 123456 試一下,加密123456得到的結(jié)果是 8c3d25f82b40f42281ae47ed2ca937ad加密可能是經(jīng)過魔改或者是參數(shù)進(jìn)行加鹽,接著跟具體的加密算法

          是so層的加密,那我們要找到他是加載的哪一個so文件,可以看到在定義 native方法的這個位置并沒有加載so文件的方法 System.loadLibrary  我們往上層看 在Encryption 這個類中有個init方法是有點可疑的,那我們直接看他的用例,果然在用例中發(fā)現(xiàn)了System.loadLibrary

          public class dk extends zx0 {
              @Override // defpackage.yx0
              public void run() {
                  Context context = this.b;
                  Encryption.init(context, context.getResources().getString(R.string.app_md5_key));
                  try {
                      try {
                          r5.b(this.b, "common-encryption");
                      } catch (Exception e) {
                          e.printStackTrace();
                      }
                  } catch (Exception unused) {
                      System.loadLibrary("common-encryption");
                  }
              }
          }

          確定我們需要的so文件時 common-encryption ,直接上IDA進(jìn)行解析,但是經(jīng)過IDA解析之后沒有發(fā)現(xiàn)我們需要的sign方法

          我們再使用frida-trace 看一下內(nèi)存中是不是有這一個方法,按照靜態(tài)加載的格式拼接好sign方法

          frida-trace -U -i  "Java_com_km_encryption_api_Security_sign"  -p 8845
                                                                         -p 獲取線程id
          frida-trace -UF -i "Java_com_km_encryption_api_Security_sign"   com.kmxs.reader
                                                                         根據(jù)包名

          果然找到在內(nèi)存中trace到了方法,但是我們還是在IDA中找不到這個方法。這個時候我們利用一段腳本來找到方法的偏移地址(腳本來自于: 馬到成功https://blog.csdn.net/weixin\_56039202/article/details/126376536?spm=1001.2014.3001.5501[1])

          function hook_func_from_exports(){
              var module = Process.findModuleByName("libcommon-encryption.so")
              var funcs = module.enumerateExports()
              funcs.forEach(function(func){
                  if(func.name.indexOf("Java_com_km_encryption_api_Security_sign")>=0){
                      console.log("sign offset-->0x" + (func.address-module.base).toString(16))
                  }
              })
              
          }


          setImmediate(hook_func_from_exports)

          >sign offset-->0x15620

          得到方法的偏移地址之后到IDA中進(jìn)行搜索,搜索發(fā)現(xiàn)15620 竟然指向的是Java_com_km_encryption_api_Security_token

          那我們就直接分析token,整個加密算法是這樣的

          發(fā)現(xiàn)到一個比較可疑的方法, MessageDigestAlgorithm::toStr((MessageDigestAlgorithm *)v23); ,那我們來hook一下v23的值,直接上frida代碼

          function hook_MessageDigestAlgorithm_toStr() {
              var libcommon = Process.findModuleByName("libcommon-encryption.so")
            Interceptor.attach(libcommon.base.add(0x15778), {
                  onEnter: function (args) {
                      console.log("---toStr---");
                      console.log(hexdump(this.context.x1, {
                          offset: 0,
                          length: 128,
                          header: true,
                          ansi: true
                      }));
                  }
              })
          }

          在入?yún)⒌臅r候我們最好能夠把入?yún)⒐潭ㄒ幌拢覀冎苯影焉厦娴膆ooksign的方法拿過來用

            Java.perform(function(){
                  let Encryption = Java.use("com.qimao.qmsdk.tools.encryption.Encryption")
                  Encryption.sign.implementation = function(str1){
                      console.log(`[Encryption.sign HOOK] 入?yún)?${str1}`)
                      let result = this.sign("123456");
                      console.log(`[Encryption.sign HOOK] 返回值:${result}`)
                      return result;
                  }
              });

          用這段代碼固定住入?yún)⒌募用軈?shù),來看下結(jié)果

          可以看到MD5是加了鹽的,到加密工具中測試一下

          [Encryption.sign HOOK] 返回值:8c3d25f82b40f42281ae47ed2ca937ad

          再恢復(fù)正常的參數(shù)進(jìn)行測試

          接下來放到python中請求一下,完美成功,當(dāng)然heders中還有qm-params  sign,多次抓包分析這些參數(shù)是不會變得,這篇文章就完結(jié)撒花啦!

          這個文章是參考馬到成功這個大佬的文章寫的,大佬的文章寫的是登錄接口后面還有其他的參數(shù),如果有需要可以到大佬的博客看下,本文是我的第一篇安卓逆向的文章,寫的不好還請各位看官海涵!

          參考資料

          [1]

          https://blog.csdn.net/weixin_56039202/article/details/126376536?spm=1001.2014.3001.5501: https://blog.csdn.net/weixin_56039202/article/details/126376536?spm=1001.2014.3001.5501


          瀏覽 196
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久操综合视频在线 | 91在线无码精品秘 入口动漫板 | 91射| 亚洲在线播放 | 青青草原www网站 |