反反调试:app 检测 data/local/tmp 目录绕过手段

2023-11-02

最近在逆向某app时遇到一个非常恶心的反调试手段,只要是maps和fd中存在/data/local/tmp/,甚至只有tmp的字段,app就给kill掉。

因为这个目录对于安卓逆向工作来说,是一个比较敏感的目录。

hluda-server和frida-server都会在/data/local/tmp/目录下生成一个包含frida所需要的so库等文件。所以当app一旦发现了加载了/data/local/tmp下的任何东西,直接就挂掉。 

查找了好些文章,最后思路借鉴Android逆向——过frida检测+so层算法逆向这篇文章实现了,本文大部分内容也是借鉴这篇文章。

直接hook open函数,将原程序的maps文件中一切带有tmp的行都过滤掉,剩余的内容输出到另一个文件中,最后修改open的返回值,指向新生成的文件。

function main() {
    const openPtr = Module.getExportByName('libc.so', 'open');
    const open = new NativeFunction(openPtr, 'int', ['pointer', 'int']);
    var readPtr = Module.findExportByName("libc.so", "read");
    var read = new NativeFunction(readPtr, 'int', ['int', 'pointer', "int"]);
    var fakePath = "/data/data/******/maps";
    var file = new File(fakePath, "w");
    var buffer = Memory.alloc(512);
    Interceptor.replace(openPtr, new NativeCallback(function (pathnameptr, flag) {
        var pathname = Memory.readUtf8String(pathnameptr);
        var realFd = open(pathnameptr, flag);
        if (pathname.indexOf("maps") != 0) {
            while (parseInt(read(realFd, buffer, 512)) !== 0) {
                var oneLine = Memory.readCString(buffer);
                if (oneLine.indexOf("tmp") === -1) {
                    file.write(oneLine);
                }
            }
            var filename = Memory.allocUtf8String(fakePath);
            return open(filename, flag);
        }
        var fd = open(pathnameptr, flag);
        return fd;
    }, 'int', ['pointer', 'int']));
}
setImmediate(main)


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

反反调试:app 检测 data/local/tmp 目录绕过手段 的相关文章

  • Linux 系统的磁盘空间满了的几个解决方法

    Linux磁盘空间占满 解决方法有哪些 本文将详细介绍Linux磁盘空间占满的解决方法 1 使用 查询整体磁盘使用情况 df h df h 以下为执行后显示的部分示例 dev vda1 19G 12G 6 5G 64 devtmpfs 48
  • Cisco access-list 访问控制列表配置全解

    ACL Access Control List 访问控制列表 技术从来都是一把双刃剑 网络应用与互联网的普及在大幅提高企业的生产经营效率的同时 也带来了诸如数据的安全性 员工利用互联网做与工作不相干事等负面影响 如何将一个网络有效的管理起来
  • Ubuntu16.04下载vim80并源码编译支持Python3及lua

    Ubuntu16 04下载vim80并源码编译支持Python3及lua 版本说明 版本 作者 日期 备注 0 1 ZY 2019 7 10 初稿 目录 文章目录 Ubuntu16 04下载vim80并源码编译支持Python3及lua 版

随机推荐

  • Spring Cloud Netflix的序列化机制

    Spring Cloud Netflix的序列化机制 一 序列化的含义 传统含义上的序列化是将java对象转换成字节码以用于网络传输或者持久化存储 相应的反序列化就是将字节码转换成java对象 在java代码中一个类只需要实现java io
  • Spring学习笔记

    文章目录 Spring学习笔记 第一部分 Spring 概述 1 1 Spring 简介 1 2 Spring 发展历程 1 3 Spring 的优势 1 4 Spring 的核 结构 第二部分 核心思想 1 1 IoC 1 1 1 IoC
  • Linux---kvm虚拟化安装

    简介 KVM自Linux2 6 20版本后就直接整合到Linux内核 它依托CPU虚拟化指令集 实现高性能的虚拟化支持 由于与Linux内核高度整合 因此在性能 安全性 兼容性 稳定性上都有很好的表现 在KVM环境中运行的每个虚拟化操作系统
  • kunernets使用helm安装tiller踩坑

    为了安装服务端tiller 还需要在这台机器上配置好kubectl工具和kubeconfig文件 确保kubectl工具可以在这台机器上访问apiserver且正常使用 这里的node1节点以及配置好了kubectl https www j
  • Docker镜像详解(手拉手教你上传至阿里云,发布到私有库)

    1 什么是Docker镜像 镜像 是一种轻量级 可执行的独立软件包 它包含运行某个软件所需的所有内容 我们把应用程序和配置依赖打包好形成一个可交付的运行环境 包括代码 运行时需要的库 环境变量和配置文件等 这个打包好的运行环境就是image
  • mmdetetcion 使用经验

    mmdetection 使用经验记录 github repository https github com open mmlab mmdetection 1 环境配置 一定要按照pytorch官网指令安装pytorch以及其对应的库 比如我
  • 【转载】pycharm 中报错No module named ‘numpy‘

    之前安装了Python 后来因为练习使用Python写科学计算的东西 又安装了Anaconda 但是安装Anaconda之后又出现了一个问题 在命令行中编写Python命令调用numpy可以正常使用 但是在PyCharm中调用却会报错No
  • 华为OD机试真题 Java 实现【勾股数元组】【2022Q4 100分】,附详细解题思路

    一 题目描述 如果三个正整数A B C A B C 则为勾股数 如果ABC之间两两互质 即A与B A与C B与C均互质没有公约数 则称 其为勾股数元组 请求出给定n m范围内所有的勾股数元组 二 输入描述 起始范围 1 lt n lt 10
  • 在S域内产生N个不重合的等径圆,voronoi多边形划分

    离散元中 常需要在特定边界中生成多个不重合的圆 若出现S域小了 或放入的圆多了或其半径大了的情况 可自动识别 可调整S radius或N参数 在S域内产生N个不重合的同直径圆 划分voronoi多边形 可选或修改radius和N参数 获得不
  • Massively Parallel Rendering of Complex Closed-Form Implicit Surfaces论文代码部分跟踪

    Massively Parallel Rendering of Complex Closed Form Implicit Surfaces 是由独立研究者MATTHEW J KEETER发表在2020年SIGGRAPH上的一篇文章 主要提出
  • bootloader中的中断服务程序的相关解释

    前一段时间在学习bootloader代码时 就是不明白bootloader的中断服务怎么跳转过去的 到网上查了半天 还是没能弄明白 只好自己动手了 下面是我对中断服务程序的理解 可能有点偏差
  • Java实现智能对话机器人自动聊天+语音秒回

    技术说明 1 调用青云课人工智能聊天API接口 请求地址 http api qingyunke com api php 请求方式 GET 字符编码 utf 8 请求示例 http api qingyunke com api php key
  • 如何防止订单重复支付

    想必大家对在线支付都不陌生 今天和大家聊聊如何防止订单重复支付 看看订单支付流程 我们来看看 电商订单支付的简要流程 订单钱包支付流程 从下单 计算开始 下单 结算 这一步虽然不是直接的支付起点 但是支付相关的金额等等信息都来自结算 此时订
  • 东方卫视演得泰坦机器人_报名丨清北上交都认可的“机器人技术等级考试”开启报名!...

    点击上方 蓝字 关注我们吧 众所周知 学习少儿编程有利于提高孩子的综合能力 助力升学 但是 关于编程有那么多的比赛和证书 家长该怎么选择 有没有什么考试像钢琴考级一样 通过不同级别认证评估孩子的学习成果呢 答案是 有的 今天 我们要介绍的就
  • 人工智能—问题规约法(Reduction)[一]

    问题规约表示 问题规约 Problem reduction 是另一种基于状态空间的问题描述与求解方法 已知问题的描述 通过一系列变换把此问题最终变成另一个本原问题 事实 定理 集合 这些本原问题的解可以直接得到 从而解决了初始问题 问题规约
  • java中 io和nio的区别

    一 概念 1 基本概念 1 i o inputstream outputstream 整个Java IO体系都是基于字符流 InputStream OutputStream 和 字节流 Reader Writer 作为基类 根据不同的数据载
  • 通俗易懂的 OpenGL ES 3.0(一)入门必备知识!!

    前言 opengl的入门是个难点 因为在绘制出图形之前 你必须要学习一大堆的概念 以及部分图形知识 以至于在代码中不迷路 v 接下来就通俗的讲解下部分概念知识 希望大家取其精华去其糟粕 温馨提示 blog阅读体验会好点 https lais
  • C++ STL中哈希表 hash_map从头到尾详细介绍

    目录 0 为什么需要hash map 用过map吧 map提供一个很常用的功能 那就是提供key value的存储和查找功能 例如 我要记录一个人名和相应的存储 而且随时增加 要快速查找和修改 岳不群 华山派掌门人 人称君子剑 张三丰 武当
  • 前端艺术之毛玻璃-倾斜-日历

    前端艺术之毛玻璃 倾斜 日历 描述 项目 效果 index html index css 描述 项目 描述 开发语言 HTML JavaScript CSS 库 dyCalendarJS vanilla tilt Edge 108 0 14
  • 反反调试:app 检测 data/local/tmp 目录绕过手段

    最近在逆向某app时遇到一个非常恶心的反调试手段 只要是maps和fd中存在 data local tmp 甚至只有tmp的字段 app就给kill掉 因为这个目录对于安卓逆向工作来说 是一个比较敏感的目录 hluda server和fri