手动脱壳准备

一个加固的Apk文件
frida环境
一台Root手机

手动脱壳准备

本次的脱壳目标就是一个叫每日优先的软件
我在论坛里分析了很久 最后发现这个软件适合用来练手

目标就是脱出完整的dex文件分析源码

整个目录结构

我们用jdax打开

可以看到没有我们要找的目标包和类,所以软件dex被加壳保护起来了。

分析哪家的壳

百度搜索 secneo.apkwrapper找到了这个加固厂商为梆梆加固

可以通过这个分析加固特点了

核心加固技术:

1.防逆向(Anti-RE) 抽取classes.dex中的所有代码,剥离敏感函数功能,混淆关键逻辑代码,整体文件深度加密加壳,防止通过apktool,dex2jar,JEB等静态工具来查看应用的Java层代码,防止通过IDA,readelf等工具对so里面的逻辑进行分析,保护native代码。

2.防篡改(Anti-tamper) 每个代码文件、资源文件、配置文件都会分配唯一识别指纹,替换任何一个文件,将会导致应用无法运行,存档替换、病毒广告植入、内购破解、功能屏蔽等恶意行为将无法实施。防调试(Anti-debug) 多重加密技术防止代码注入,彻底屏蔽游戏外挂、应用辅助工具,避免钓鱼攻击、交易劫持、数据修改等调试行为。

3.防窃取(Storage Encryption) 支持存储数据加密,提供输入键盘保护、通讯协议加密、内存数据变换、异常进程动态跟踪等安防技术,有效防止针对应用动、静态数据的捕获、劫持和篡改。

编写脱壳脚本

核心思想 就是运行时的dex文件从内存里面dump里下载下来

hook框架选择

我们选择frida来进行hook

hook点研究

通常的hook点都是拦截dex解密加载过程的方式

其实可以选择内存中存放dex文件的位置,也就是内存检索DEX文件

具体参考 https://mp.weixin.qq.com/s/n2XHGhshTmvt2FhxyFfoMA

具体的检索流程

1.遍历当前进程所有可以读的内存段

2.判断所谓的内存段到底是不是dex

3.把文件dump下来

1.检索遍历进程内存

使用函数 Process.enumerateRanges('r--') 枚举读出可以读出的内存区块

这个函数返回一个列表 我们可以遍历这个内存区块列表

找出基址和内存大小

2.过滤内存区块

Memory.scanSync函数可以加载内存区块传入 基址 大小 第三个参数是 过滤大小

使用正则过滤加载自己需要的大小

比如这个"64 65 78 0a 30 ?? ?? 00" 的意思就是 只加载这个区间的内存 也就是所谓的dex内存地址

3.检索遍历进程内存

开始过滤符合要求的dex

过滤掉系统的dex文件

if (range.file && range.file.path&& (range.file.path.startsWith("/data/dalvik-cache/") ||range.file.path.startsWith("/system/"))) {return;}

我们这里只过滤一下就是大小要大于0x70,为什么呢 因为dex head大小就是0x70

function verify_dex(dex_ptr, range) {if (range != null) {var range_end = range.base.add(range.size);// verify header_size if (dex_ptr.add(0x70) > range_end) {return false;}// 这里+0x3C 是 string_ids_off, 也就是 string_ids 段的偏移位置 这里的值要正好等于0x70return dex_ptr.add(0x3C).readUInt() === 0x70;}return false;
}

4.返回真正的dex文件地址和大小

前面已经拿到了想要的内存开始地址,但是dex的大小还是没有拿到

这个dex文件大小需要额外的获取

在header头信息里面的0x20字段写了dex文件大小

直接读取即可

var dex_size = dex_ptr.add(0x20).readUInt();

测试脚本功能

现在可以测试这个基础脚本了

基本上可以拉下来我们需要的dex文件

后面直接使用jadx即可查看内容了

其他的细节问题

修复dex文件错误,适配一些对dex文件的魔改情况

后面讲解

加固加壳脱壳分析(3)_实战手动脱壳某家加固相关推荐

  1. 加固加壳脱壳分析(1)_加固加壳原理和几代壳

    什么是加固加壳 对App资源代码进行保护,使其不容易被反编译工具解开. 加固的核心在于保证软件正常运行的同时又能保证源码的安全性. 为什么要加固加壳 若应用不做任何安全防护,极易被病毒植入.广告替换. ...

  2. 关于apk软件的加固加壳和签名打包

    昨天搞了个apk软件.软件首先通过android killer进行反编译了一下.编译签名后是可以正常使用的.但是和朋友交流后结论是要学习进行一个加固处理. 由于自身目前是小白一个.正在学习网络技术知识 ...

  3. 加固加壳脱壳分析(2)_脱壳原理和一些脱壳机分析

    脱壳原理 基于静态分析的源代码失效,脱壳的核心就是在于动态运行时候的把源代码dex文件dump下来. 所以最重要的几个点包括: 1.找到合适的脱壳点,也就是dex被解密加载进内存的点. 2.分析出de ...

  4. idea dump分析工具_实战:OOM 后我如何分析解决的

    点击上方"匠心零度",选择"设为星标" 做积极的人,而不是积极废人 作者:jasonGeng88 https://github.com/jasonGeng88/ ...

  5. python分析比赛_实战项目练习 ---- 【2018世界杯】用python分析夺冠球队

    2018世界杯 前言 在网上找到了个用Python分析2018世界杯夺冠热门的项目,感觉很有意思准备拿来练练手. 因为目前还没有学到图形可视化部分,所以这部分内容会完全借鉴网上的教程. 分析目的 通过 ...

  6. Android Apk加壳技术实战详解

    前言 前几天面试了一家信息加密相关的公司,经过两轮面试原以为坐等HR,结果还有一个实践测试ORZ-面试这么多家公司,真心觉得这家公司很特殊,尤其是那个逻辑测试-算了,不扯远了,走回正题. 面试官加我Q ...

  7. BUUCTF-Reverse:新年快乐 + 加壳与脱壳

    题目地址:https://buuoj.cn/challenges#%E6%96%B0%E5%B9%B4%E5%BF%AB%E4%B9%90 用IDA打开文件: 怎么可能才两个函数,猜测加了壳,直接查: ...

  8. 病毒加壳技术与脱壳杀毒方法解析

    壳是什么?脱壳又是什么?这是很多经常感到迷惑和经常提出的问题,其实这个问题一点也不幼稚.当你想听说脱壳这个名词并试着去了解的时候,说明你已经在各个安全站点很有了一段日子了.下面,我们进入"壳 ...

  9. 壳与加壳脱壳基础知识

    在自然界中,我想大家对壳这东西应该都不会陌生了,由上述故事,我们也可见一斑.自然界中植物用它来保护种子,动物用它来保护身体等等.同样,在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程 ...

最新文章

  1. 东北大学 | 一种适用于大规模公路环境的鲁棒激光惯性里程计和建图系统
  2. 【Groovy】Groovy 扩展方法 ( 实例扩展方法配置 | 扩展方法示例 | 编译实例扩展类 | 打包实例扩展类字节码到 jar 包中 | 测试使用 Thread 实例扩展方法 )
  3. cinder配置多ceph储存池[Ceph and Cinder multi-backend]
  4. 静止的单摄像机无法得到像点的三维坐标详解
  5. ArcEngine开发之自定义工具
  6. /plus/recommend.php sql注入漏洞,DedeCMS 全版本通杀SQL注入漏洞利用代码及工具 -
  7. html view设置全屏,uni-app 如何设置web-view 不全屏,不自动铺满,动态控制web-view的高度...
  8. 响应服务器auth first,asp.net mvc发送QQ邮件提示 命令顺序不正确。 服务器响应为: Error: need EHLO and AUTH first !...
  9. python 中的意义_python3中 -的意义
  10. HBase编程api介绍(转)
  11. while 循环语句的使用
  12. 如何做gif动图?手把手教你在线制作动图
  13. T2695 桶哥的问题——吃桶
  14. Js 限时秒杀【倒计时】【案例】
  15. 使用ab对nginx进行压力测试
  16. linux设置环境变量将动态库加入环境变量步骤
  17. 好客租房101-项目介绍
  18. html正方形框表示什么意思,html方框里面有字
  19. Oracle IMp/Exp Expdp/Impdp 高版本 导入 低版本的问题
  20. 一个草根程序员如何进入BAT。此文比较扎心,心态不好切勿点击

热门文章

  1. Java课程设计---实现登录(1)
  2. Flask request 属性详解
  3. 块状链表(STL rope)
  4. 【高等数学】【3】微分中值定理与导数的应用
  5. JS算法:洗牌算法(shuffle)
  6. flinksql获取系统当前时间搓_sql 时间戳
  7. 深入理解设计模式:设计模式定义、设计原则以及组织编目
  8. 关于sfdisk分区命令不支持的问题
  9. unexpected output in sfdisk --version解决方法
  10. 武大计算机专硕难还是学硕难,考研难度有多大?看完武大考生的信息,我很庆幸自己已经上岸...