链-家-app的Authorization验签破解

本文介绍了一种破解APP中加密Header的具体方法,特别是针对Authorization字段的破解过程。文章详细描述了从反编译APP开始,找到源码并调试so文件的过程,最终通过IDA调试工具获取到了加密参数。

本来一直不太习惯写东西,这次觉得对我这新手比较有意义,特意发表一下.

此app请求里面header头有一个Authorization字段是加密生成的,

网上有不少人使用其他方法破解过这个,我是使用ida调试出来的,
只说下过程,观众们遇到问题自行百度

1.app反编:

          无加固,没有难度

2.找源码

  过程就不多说了,有很多大神们都有,这里放一个连接https://my.oschina.net/2devil/blog/1624384

3.验签

       源码加密过程中是通过加载so文件生成两个参数,拼接url后的参数生成

源码是
String GetAppSecret = JniClient.GetAppSecret(APPConfigHelper.c().getApplicationContext());
String GetAppId = JniClient.GetAppId(APPConfigHelper.c().getApplicationContext());

先找到so文件发现只有libHomeLinkNdk.so比较像

打开ida 32位软件(我用的是ida7.0)加载so文件

加载完之后搜索方法,发现果然在这里面

 

 

选中方法按f5显示伪c代码,没卵用,看不懂...
接下来就开始调试so

第一步:拷贝IDA安装目录下的android_server文件到设备目录下

第二步:运行android_server命令

第三步:转发端口和用debug模式打开应用

adb forward tcp:23946 tcp:23946

adb shell am start  -D -n 包名/mianactivity地址

 

我使用的是模拟器,并且使用mprop工具直接修改了模拟器的调试属性,所以不用修改app

第四步:启动IDA附件进程

设置本地地址和一些选项:

选中目标两个方法,右键调试add watch 就可以直接查看结果了.
 

 

当然这里的方法返回值是固定的,不需要修改参数进行调试,否则也没这么容易了

### 如何在 Apifox 中通过前置脚本实现获取功能 Apifox 提供了强大的接口自动化测试能力,其中前置脚本可以用来处理复杂的逻辑需求,比如生成名、动态参数化等。以下是关于如何利用前置脚本来完成功能的具体说明。 #### 使用 JavaScript 编写前置脚本 Apifox 的前置脚本支持 JavaScript 语法,可以通过编写自定义代码来实现逻辑。通常情况下,涉及以下几个步骤: 1. **准备数据**:收集需要参与名的数据字段。 2. **拼接字符串**:按照特定规则(如字典序排列)将这些字段组合成一个待加密的字符串。 3. **加密算法**:应用指定的加密方式(如 MD5 或 HMAC-SHA256)对字符串进行加密。 4. **附加到请求头或参数中**:将生成的名附加到 HTTP 请求头部或者作为查询参数发送给服务器。 下面是一个简单的示例代码片段,展示如何基于 `HMAC-SHA256` 加密算法生成名并将其设置为请求头的一部分[^1]。 ```javascript // 定义要参与名的关键字段 const params = { appKey: 'your_app_key', // 应用唯一标识符 timestamp: Date.now().toString(), // 当前时间戳 }; // 将对象转换为 URL 参数形式 (key=value&...) function objectToQueryString(obj) { return Object.keys(obj).sort().map(key => `${encodeURIComponent(key)}=${encodeURIComponent(obj[key])}`).join('&'); } // 转换后的字符串用于后续计算哈希值 const queryString = objectToQueryString(params); // 秘钥,请替换为你自己的 secret key const secretKey = 'your_secret_key'; // 计算 HMAC SHA256 值 CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, CryptoJS.enc.Utf8.parse(secretKey)); const signature = CryptoJS.HmacSHA256(queryString, secretKey).toString(CryptoJS.enc.Hex); // 设置名至全局变量以便其他地方调用 pm.environment.set('signature', signature); console.log(`Generated Signature: ${signature}`); // 添加名到 Header 中 pm.request.headers.add({ key: 'Authorization', value: `Bearer ${signature}` }); ``` 上述代码实现了以下几点: - 动态创建了一个包含必要信息的对象 `params`; - 对象被转化为标准 URI 查询串格式并通过排序保证一致性; - 利用了第三方库 `CryptoJS` 来执行安全散列运算得到最终结果; - 把产生的 token 存储进环境变量里以及直接加入 API 请求 header 部分。 注意:实际开发过程中可能还需要考虑更多细节问题,例如异常捕获机制、兼容性调整等等。 #### 关于性能指标的相关补充 如果涉及到大规模并发场景下的压力测试,则需关注几个核心维度的表现情况,包括但不限于响应时延、事务成功率、资源占用率等方面。具体数值可根据业务特性灵活定制,如下表所示的一个实例配置可供参考[^2]: | 指标名称 | 合格线 | | -------------- | -----------| | 响应时间(ms) | ≤ 1500 | | 成功率(%) | ≥ 99.99% | | CPU利用率(%) | ≈ 78% | | 内存消耗(MB) | 控制合理范围 | 以上表格仅作示范用途,真实环境中应当依据实际情况制定合理的收准则。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值