APP逆向 day23司小宝逆向

一.前言

今天也是讲最后一个基础知识点了,ptrace占坑,这个也算是一个坑,今天通过这个案例和大家讲一下,今天这个案例我们来整验证码登录,版本选择4.7.8

二.抓包分析

抓包发现,请求头里的东西通过改包发现都是可以破的,需要破的其实就是这个请求体里面的sign,那我们现在就来反编译找到sign

三.找到sign的加密位置 

我们搜索sign发现太多了,所以我们可以搜索请求体的其他参数,g7timestamp

发现第二个特别像回事,我们点进去 

这不正是将请求体参数进行拼接,然后sign对其进行加密,然后再拼接进去吗,那我们再点进去

发现是对加密进行url编码吗?主要加密逻辑是.a那我们再点进去

 

这个是不是似曾相识,进行hmacsha1加密然后转成base64格式,但是得注意的是这个是hmacsha1,sha1不一样,我一开始也以为是sha1,以为是传的两个参数一个是盐,其实hmacsha1需要一个key,大家读名字也就知道了

但是我们不选择hook这个函数,而是选择hook上一层的a,查看四个字符串是啥,这样比较容易看

四.HOOK以及ptrace占坑

我们需要hook的是这个,这里给出hook代码

import frida
import sys
# 连接手机设备
rdev = frida.get_remote_device()
session = rdev.attach("司小宝")
scr = """
Java.perform(function () {var p0 = Java.use("cmt.chinaway.com.lite.s.i1");p0.a.implementation = function (str, str2, str3,str4) {console.log("---------------------")console.log('参数是:',str, str2, str3,str4);var res = this.a(str, str2, str3,str4);console.log('返回值',res);return res;};
});
"""script = session.create_script(scr)def on_message(message, data):print(message, data)script.on("message", on_message)
script.load()
sys.stdin.read()

发现一运行就报错

 

这个报错是说进程被占用,那现在就是我们的frida的端口被占用了,这就是我们今天要讲的知识点

4.1 查看app运行进程id号

方式一:手机端启动frida-server
    -电脑端执行:frida-ps -U -a  # 可以看到id号,hook时候,可以使用id号
    
方式二:进入到手机中
    adb shell
    su
    ps -A |grep lite  # 包名可以简写
    
        
问题:
    明明发现司小宝在运行,但是就是hook不到
    发现车智赢在运行,能hook到

 

4.2 ptrace占坑

这个就是frida反调试的一种,我们之前学过两种,删除so文件,换用hluda,这次就是 ptrace占坑,什么是ptrace占坑呢?

ptrace可以让一个进程监视和控制另一个进程的执行,并且修改被监视进程的内存、寄存器等,主要应用于调试器的断点调试、系统调用跟踪等--》frida调试,就是基于这种方式来实现的

在Android app保护中,ptrace被广泛用于反调试【frida基于ptrace】。一个进程只能被ptrace一次,如果先调用了ptrace方法,那就可以防止别人调试我们的程序。这就是传说中的先占坑。

一个进程只能被一个进程附加,为了防止frida的附加,程序中自己先基于ptrace附加自己,我们如果后期使用frida去附加app时,就会报错了

我们发现没有冒号的两个,而其中一个名字是 __skb_wait_for_more_packets

 解决方法一:kill掉

 

我们操作一遍发现,直接kill杀不到,那我们强制kill -9 杀掉就会强制退出,所以一定是内部做了进程监听,我们所以得使用另一个方法,但是后续有的app可以用这个方法

解决方法二:spawn方案

解决方法三:后期学习aosp刷机,修改aosp源码--》让app自己的附加进程启动失败--》编译刷入到手机中,即可解决这个问题

那我们作为基础肯定是用方法二,这里给出新的hook代码

import frida
import sys
#spwan 自动运行
rdev = frida.get_remote_device()
pid = rdev.spawn(["cmt.chinaway.com.lite"]) #这里添加的是包名
session = rdev.attach(pid)scr = """
Java.perform(function () {var p0 = Java.use("cmt.chinaway.com.lite.s.i1");p0.a.implementation = function (str, str2, str3,str4) {console.log("---------------------")console.log('参数是:',str, str2, str3,str4);var res = this.a(str, str2, str3,str4);console.log('返回值',res);return res;};
});
"""script = session.create_script(scr)def on_message(message, data):print(message, data)script.on("message", on_message)
script.load()
rdev.resume(pid)
sys.stdin.read()

 

那不就知道了么四个参数是啥,key就是 1KMrg0dfufc0wpnXEJacEQX1YEUYA0Ja 

 str2 + "\n" + str3 + "\n/" + str4进行处理

再进行 HmacSHA1加密,这很简单,我给出生成代码

import hmac
import base64
from hashlib import sha1def sign(g7timestamp):try:secret_key="1KMrg0dfufc0wpnXEJacEQX1YEUYA0Ja"content=f"""POST\n{g7timestamp}\n/v2/isnb-openapi-proxy/auth/router"""# 1 秘钥secret_key = secret_key.encode()# 创建hmac对象,指定使用sha1算法mac = hmac.new(secret_key, digestmod=sha1)# 2 待加密明文mac.update(content.encode('utf-8'))# 生成HMAC并进行Base64编码hmac_result = mac.digest()base64_result = base64.b64encode(hmac_result)# 返回Base64编码后的结果return base64_result.decode()except Exception as e:raise Exception(f"Failed to generate HMAC : {e}")if __name__ == '__main__':res=sign('1717765476740')print(res)

接下来登陆的话抓个包发现加密也是这个sign,我就不和大家讲了

五.总结 

今天主要是讲了ptrace占坑,啥难度都没,简简单单对不对,明天就要和大家讲重头戏了,也就是介绍unidbg,这个会有几天的课程,讲完我们的app逆向基础就先告一段落了

补充

有需要源码的看我主页签名名字私信我,有求必应

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/50061.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot:图书管理系统(一)

1.编写用户登录接口 代码: package com.example.demo;import jakarta.servlet.http.HttpSession; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotatio…

技术成神之路:设计模式(九)备忘录模式

介绍 备忘录模式(Memento Pattern)是一种行为设计模式,它允许在不破坏封装性的前提下捕获和恢复对象的内部状态。通过备忘录模式,可以在程序运行过程中保存和恢复对象的某个状态,从而实现“撤销”等功能。 1.定义 备忘…

【BUG】已解决:UnicodeDecodeError: ‘utf-8’ codec can’t decode bytes in position 10

UnicodeDecodeError: ‘utf-8’ codec can’t decode bytes in position 10 目录 UnicodeDecodeError: ‘utf-8’ codec can’t decode bytes in position 10 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#x…

使用python内置的虚拟环境

在一台机器上安装了太多的第三方python库,它们依赖相同的库可能版本不同,就会造成某些第三方库崩溃,之前可以使用的库可能就会坏掉不能用了,所以可以使用虚拟环境运行不同的程序,python有内置的虚拟环境; …

前端八股文 promise async await 的理解

promise是什么 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。 目的 解析 吴优编程 (解决异步编程中的嵌套问题的,将嵌套的格式 用peomise 写成同步) promise.then() 是成功后继…

Cocos Creator2D游戏开发(4)-飞机大战(2)-编辑器界面

编辑器几个重要板块 参考: https://docs.cocos.com/creator/3.8/manual/zh/editor/ (1) 场景编辑器: 仅看2D视图: 按钮作用依次是: 平移, 旋转,缩放,矩形变换,增量吸附工具,最后三个,前俩是变换工具,最后一个是布局组件 矩形变换: 中心点和锚点切换 以后用到慢慢整吧! (2)层…

AI服务器产业链研究分析

AI服务器产业链初探 一、AI服务器的技术架构与构成 AI服务器的主要构成包括: 芯片种类丰富,包括X86、ARM、MIPS等架构的CPU,以及GPU、FPGA、ASIC和NPU等。 内存:DRAM、HBM(高带宽存储)。 本地存储&#…

前端开发调试工具推荐分类整理

具体前往:前端调试工具分类整理汇总

黑马Java零基础视频教程精华部分_6_字符串

系列文章目录 文章目录 系列文章目录前言一、API是什么? API帮助文档案例:API文档练习Step1:查找文档中Scanner内容。Step2:学习文档中Scanner内容。 二、字符串String类1、String概述总结: 创建String对象的两种方式2…

java学习--String类StringBuffer类StringBuilder类

String类简介 关系图: value不可修改的是value指向的地址,因为可以value为一个数组,而数组名其实就相当于一个指针,指向着一块地址,然后在指向的地址里存放相应的值,值可以任意是什么,但是地址不…

RedHat Enterprise Linux 7 YUM源(本地/网络源)配置详解

目录 一、挂载 二、建立本地源 三、建立网络源 四、验证可行性 一、挂载 ——将光盘挂载到 /mnt 下 当/mnt中有如图内容时,即挂载成功 若挂载光驱/dev/sr0时报错:mount: no medium found on /dev/sr0 解决措施:查看该设备状态是否全部勾选…

MATLAB仿真:数字信号处理IIR数字滤波器设计

目录 1.实验目的 2.实验原理 3.实验仪器及设备 4. 实验内容及步骤 5.信号产生函数mstg清单 6.实验程序及波形如下: 1.实验目的 (1)熟悉用双线性变换法设计IIR数字滤波器的原理…

Python——Pandas(第三讲)

文章目录 修改替换变量值对应数值的替换指定数值范围的替换 虚拟变量变换数值变量分段数据分组基于拆分进行筛选 分组汇总使用 agg 函数进行汇总引用自定义函数 长宽格式转换转换为最简格式长宽型格式的自由互转 多个数据源的合并数据的横向合并concat 命令 处理缺失值认识缺失…

【题解】328. 奇偶链表(链表)

https://leetcode.cn/problems/odd-even-linked-list/description/?envTypestudy-plan-v2&envIdleetcode-75 class Solution { public:// 定义一个函数,用于将链表中的奇数和偶数节点分开ListNode* oddEvenList(ListNode* head) {// 创建两个哑节点&#xff…

python+vue3+onlyoffice在线文档系统实战20240723笔记,项目界面设计和初步开发

经过之前的学习,已经能够正常打开文档了。 目前为止,我们的代码能够实现: 打开文档编辑文档手动保存自动保存虽然功能依然比较少,但是我们已经基本实现了文档管理最核心的功能,而且我们有个非常大的优势,就是支持多人同时在线协同编辑。 现在我们要开发项目,我们得做基…

抽奖大转盘uni-push使用websocket协议实现uniapp+uniCloud实时推送在线互动抽奖项目打包H5微信小程序_咸虾米

嗨,大家好,我是爱搞知识的咸虾米,今天给大家带来的这们课程是使用uni-push实时推送,完成的在线互动抽奖综合项目。 常规的页面只有在手动刷新的时候,才能获取到服务端最新的数据,而websocket可以实现长连…

OpenJudge | 放苹果

总时间限制: 1000ms 内存限制: 65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法…

里程计在激光雷达slam中的作用

在tf树中的父坐标系和子坐标系中间的odom 机器人在平直走廊中由于缺少参照物的变化,无法估计自己的位移;可以通过轮子转动的圈数和一 圈的位移来计算距离,这种通过电机转速计算机器人位移的方法就是常用的电机里程计;里程计不 是…

简单高效的在线拾色器工具 - 为您的设计工作提供便利

你是否曾在寻找完美颜色时感到困扰?现在,有了这个简单而强大的在线拾色器工具,选择理想的颜色变得轻而易举! 网址: https://potatoh5games.fun/tools/#ColorPickr 这款拾色器工具具有以下特点: 用户友好…

golang 文件

golang 文件 概念 文件是计算机系统中用于存储和管理的 数据集合,具有唯一的名称,存在于存储介质上,包含创建、修改等属性,通过文件系统进行组织,用户可进行读取、写入等操作 文件流 文件输入流(InputS…