Crack App | 某搜索 App 中关于 x 信文章检索功能的加密参数

优采云 发布时间: 2022-04-30 02:25

  Crack App | 某搜索 App 中关于 x 信文章检索功能的加密参数

  点击上方“咸鱼学Python”,选择“加为星标”

  第一时间关注Python技术干货!

  

  图源:极简壁纸

  今日目标

  今天的目标是很多读者朋友在采集微信文章时常用站的 app 版本

  aHR0cHM6Ly93d3cud2FuZG91amlhLmNvbS9zZWFyY2gvNjU1NTQ3NDYwMzMwMTAyMDk0MQ==

  抓包分析

  抓包使用的是 Charles + Postern 的组合

  使用大黄鸟 app 抓包也是可以的,Charles 看着会更舒服一些

  打开 app 搜索任意内容,切换到微信栏目就可以抓到以下的请求包了

  

  点击这个请求可以看到请求参数还有请求的结果都是加密的

  

  请求的参数是k、v、u、r、g、p的名字,所以通过参数名检索的方法很难定位到很准确的结果

  静态分析定位逻辑

  apk 包推荐使用 jadx 1.2 打开,用 1.3 搜索的时候老是崩溃

  通过以请求链接的部分v2.get作为搜索关键词可以定位到下面的搜索结果

  

  最后一个搜索的结果和我们的请求链接最匹配

  点进去可以看到下面的内容

  

  可以看到图中红框的部分应该是请求的部分,红框下面是返回的部分

  分别经过了encrypt和decrypt两个方法

  先讲讲我是怎么确定是这两个方法的

  红框部分中定义了一个hashMap,通其中put了一个Content-Length,这个搞过 js 逆向的都知道,这个是代表了请求提交内容的长度

  这个长度是通过encrypt.length得到的,而encrypt是通过ScEncryptWall.encrypt(str, str2, str3);得到的

  而返回部分的代码是在判断了f0.b得出的,在f0.b的判断中有一关于response success的输出,进一步确认了我们的判断

  所以这里的encrypt和decrypt两个方法是分析的重点

  进一步追进去可以看到这两个方法都是native方法,定义在libSCoreTools.so里面

  

  动态调试确认逻辑

  既然是 native 方法,通过 IDA 分析这几个也是导出方法,这里 hook 的方法就很多了。

  

  我们直接用frida hook看下出入参看看是不是符合我们在上一部分的猜想

  先看encrypt

  function hook_encrypt(){<br />    Java.perform(function () {<br />        var ScEncryptWall = Java.use('包名.类名');<br />        ScEncryptWall.encrypt.implementation = function (str1,str2,str3) {<br />            console.log('str1: ', str1);<br />            console.log('str2: ', str2);<br />            console.log('str3: ', str3);<br />            var res = this.encrypt(str1, str2, str3);<br />            console.log('res: ', res);<br />            return res;<br />        }<br />    })<br />}<br />setImmediate(hook_encrypt)<br />

  

  通过hook可以得到以下结果

  str1 = 请求的 url<br />str2 = 请求提交的参数(明文)<br />str3 = 空<br />

  返回的结果就是加密好的参数了

  同样的hook decrypt

  function hook_decrypt(){<br />    Java.perform(function () {<br />        var ScEncryptWall = Java.use('包名.类名');<br />        ScEncryptWall.decrypt.implementation = function (data) {<br />            console.log('data: ', data);<br />            var res = this.decrypt(a);<br />            console.log('res: ', Java.use('java.lang.String').$new(res));<br />            return res;<br />        }<br />    })<br />}<br />setImmediate(hook_decrypt)<br />

  打印结果如下

  

  参数是请求的返回值,解密的结果是列表页的内容

  完事~,Python RPC 调用一下就可以爽爽的采集相关的文章了

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线