首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >android 壳特征

android 壳特征

作者头像
tea9
发布于 2022-09-08 04:10:54
发布于 2022-09-08 04:10:54
1.3K00
代码可运行
举报
文章被收录于专栏:tea9的博客tea9的博客
运行总次数:0
代码可运行

android app脱壳、实战ctf题

app加固威胁

  • 代码修改(广告植入、替换广告id)
  • 资源修改(界面替换广告,链接替换)
  • 破解(应用收费,内购)
  • 篡改数据(无限金币,钻石)
  • 加入恶意代码(木马,隐私,交易)
  • 动态注入,数据拦截,窃取,修改;协议修改

app加固的目的

  • 保护核心代码,防止被逆向,泄密 防止逆向分析-防止核心代码被反编译
  • 防止营销作弊
  • 防止代码被修改
  • 控制被二次打包-校验完整性,签名,防止盗版
  • 防止调试和注入-防止动态调试,注入获取关键数据
  • 防止应用数据窃取-加密敏感数据
  • 防止协议直接被盗刷-加密协议通信

常见加固厂商

常见加固方式

类加载技术: 针对apk中的classes.dex文件进行处理,放入待定的文件中,通过native代码来进行对其运行时解密。

使用厂商:娜迦,爱加密,梆梆等。

方法替换技术: 将classes.dex中的方法中代码进行提取,抽取方法,在运行时对其动态进行解密还原

梆梆,娜迦

常用加固厂商特征

  • 娜迦 libchaosvmp.so,libddog.so libfdog.so
  • 爱加密 libexec.so,libexecmain.so
  • 梆梆 libsecexe.so libsecmain.so libDexHelper.so
  • 360 qihoo.util libprotectClass.so libjiagu.so
  • 通付盾 libegis.so
  • 网秦 libnqshield.so
  • 百度 libbaiduprotect.so

1.用加固厂商特征:

娜迦: libchaosvmp.so , libddog.solibfdog.so爱加密:libexec.so, libexecmain.so梆梆: libsecexe.so, libsecmain.so , libDexHelper.so360:libprotectClass.so, libjiagu.so通付盾:libegis.so网秦:libnqshield.so百度:libbaiduprotect.so

加固技术的发展历史

第一代壳 Dex加密 Dex字符串加密资源加密对抗反编译反调试自定义DexClassLoader

第二代壳 Dex抽取与So加固 对抗第一代壳常见的脱壳法Dex Method代码抽取到外部(通常企业版)Dex动态加载So加密

第三代壳 Dex动态解密与So混淆 Dex Method代码动态解密So代码膨胀混淆对抗之前出现的所有脱壳法

第四代壳 arm vmp

  • 第一代 DEX加密、字符串加密、资源加密、反调试、自定义DexClassLoader
  • 第二代 核心封装到So库/方法抽取/反调试
  • 第三代 ELF变形/Ollvm混淆/多进程保护
  • 第四代 代码虚拟化保护 DEX虚拟化保护
  • 第五代 ARM虚拟化保护

脱壳的手法

  • 修改系统源码自动脱壳
  • 通过hook方式对关键函数进行脱壳
  • 开源工具入ZjDroid,DexHunter进行脱壳
  • 利用IDA或者GDB动态调试进行脱壳

反调试

反调试代码,都是在壳子的so中执行的,那么,我们只要在进入壳子第一行代码时下了断点,在调试过程中,找到了反调试检测代码的位置,直接干掉,直接绕过反调试

在libdvm.so中方法loadNativeCode处下断点,android系统加载加载native代码也就是so文件都要走的函数,所以下在这里的断点,能够有效的找到加载壳子的so位置,能够在一进入壳子的so,直接断住。

最简单的技巧,就是单步调试,F8一路按下去,按的多了,就有了更好的位置下断点。

记住一点就好,壳子的so中,总有一处是解密还原出app原本的dex的。

脱壳题目实战

链接: https://pan.baidu.com/s/1CELe8HRpGVmjg3NcuXpQGw 密码: 51o7

第一题 java_crackme.apk

java_crackme.apk 首先安装apkadb install java_crackme.apk 随便输入个值发现显示sorry,try again?

再用jadx打开 发现使用了加固找不到入口类

尝试脱壳使用葫芦娃大佬的FRIDA-DEXDump 手机运行frida frida

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
adb shell
su
cd /data/local/tmp
./frida_server

打开app执行python main.py 要使用python3

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
~/Documents/tools/android/FRIDA-DEXDump(master*) » python main.py 
03-22/09:43:29 INFO [DEXDump]: found target [21626] com.kanxue.craceme
[DEXDump]: DexSize=0xbdb2c, SavePath=/Users/tea/Documents/tools/android/FRIDA-DEXDump/com.kanxue.craceme/0x7e8dc04000.dex
[DEXDump]: DexSize=0x214c38, SavePath=/Users/tea/Documents/tools/android/FRIDA-DEXDump/com.kanxue.craceme/0x7e8dcc2000.dex
[DEXDump]: DexSize=0x11c, SavePath=/Users/tea/Documents/tools/android/FRIDA-DEXDump/com.kanxue.craceme/0x7e8e1ca4f5.dex
[DEXDump]: DexSize=0xbdb2c, SavePath=/Users/tea/Documents/tools/android/FRIDA-DEXDump/com.kanxue.craceme/0x7e8e20d780.dex
[DEXDump]: DexSize=0xbdb2c, SavePath=/Users/tea/Documents/tools/android/FRIDA-DEXDump/com.kanxue.craceme/0x7e8e6c301c.dex
[DEXDump]: DexSize=0x214c38, SavePath=/Users/tea/Documents/tools/android/FRIDA-DEXDump/com.kanxue.craceme/0x7ea4a3b5c0.dex

已经脱下壳了 我们可以直接搜索sorry

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd com.kanxue.craceme
 grep -ril "sorry" ./*.dex
./0x7e8dcc2000.dex

用jadx打开这个dex 发现MainActive里之间写了flag然后输入到输入框里测试成功

第二题 so_crackme_1.apk

安装后打开jni_enc 随便输入发现弹框sorry,try again? 用jadx打开apk发现加壳了 先进行脱壳

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
打开app 然后执行
python main.py 
03-24/10:54:56 INFO [DEXDump]: found target [16242] com.example.jni_enc
[DEXDump]: DexSize=0xc1da0, SavePath=/Users/tea/Documents/tools/android/FRIDA-DEXDump/com.example.jni_enc/0x7e90326000.dex
[DEXDump]: DexSize=0x21d21c, SavePath=/Users/tea/Documents/tools/android/FRIDA-DEXDump/com.example.jni_enc/0x7e903e8000.dex
[DEXDump]: DexSize=0xc1da0, SavePath=/Users/tea/Documents/tools/android/FRIDA-DEXDump/com.example.jni_enc/0x7e9080d040.dex
[DEXDump]: DexSize=0x11c, SavePath=/Users/tea/Documents/tools/android/FRIDA-DEXDump/com.example.jni_enc/0x7e90b994f5.dex
[DEXDump]: DexSize=0xc1da0, SavePath=/Users/tea/Documents/tools/android/FRIDA-DEXDump/com.example.jni_enc/0x7e90d9e01c.dex
[DEXDump]: DexSize=0x21d21c, SavePath=/Users/tea/Documents/tools/android/FRIDA-DEXDump/com.example.jni_enc/0x7ea903b5c0.dex
[DEXDump]: DexSize=0x4, SavePath=/Users/tea/Documents/tools/android/FRIDA-DEXDump/com.example.jni_enc/0x7f2ca7a000.dex
[DEXDump]: DexSize=0x4, SavePath=/Users/tea/Documents/tools/android/FRIDA-DEXDump/com.example.jni_enc/0x7f2cb6e000.dex

cd com.example.jni_enc
grep -ril "sorry" ./*.dex
./0x7e903e8000.dex 

用jadx打开0x7e903e8000.dex 发现有jni函数,解压apk包用IDA打开so_crackme_1/lib/armeabi-v7a/libnative-lib.so文件

看JNI_OnLoad好像没有混淆

打开字符串窗口View-Open subviews-Strings搜索flag看看能不能搜索到

输入试试

第三题 so_crackme.apk

没做出来 参考菜菜文章 脱壳要先删除rm -rf com.example.jni_enc文件夹 包名跟第二题重复了 脱壳后发现flag还是写在so里面,用IDA打开libnative-lib.so

看这么复杂应该是混淆了 用IDA进行调试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
把android_server放入手机
/Applications/IDAPro7.0-tea/dbgsrv
adb push android_server /data/local/tmp
运行android_server
adb shell 
marlin:/ $ su
marlin:/ # cd /data/local/tmp 
marlin:/data/local/tmp # chmod 755 android_server 
启动android_server 默认端口为23946 指定端口启动 ./android_server -p12345
marlin:/data/local/tmp # ./android_server                                      
IDA Android 32-bit remote debug server(ST) v1.22. Hex-Rays (c) 2004-2017
Listening on 0.0.0.0:23946...
再打开一个控制台 转发调试端口
~ » adb forward tcp:23946 tcp:23946  
查看端口启动情况 win: netstat -a -n |findstr  23946
~ » netstat -a -n |grep  23946
tcp4       0      0  127.0.0.1.23946        *.*                    LISTEN 

打开IDA启动进程 IDA-Debugger-Select debugger-选择RemoteARM Linux/Android debugger

在选择Debugger-Process options填写ip和端口 hostname 127.0.0.1 port 23946

在选择Debugger-Attach tp process选择要调试的应用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./android_server64 -p12345 
adb forward tcp:12345  tcp:12345 

debug模式启动 adb shell am start -D -n com.example.jni_enc/com.example.jni_enc.MainActivity

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
IDA动态调试so源码 F5伪代码查看
注意:so的动态调试与脱壳在步骤上有很多的相似之处,关于脱壳在后面会详细介绍加壳以及脱壳的发展历程。
bosh123
2020/12/23
3.6K0
Frida-Dexdump 脱壳工具下载使用以及相关技术介绍
Frida-Dexdump 脱壳工具下载使用以及相关技术介绍 ---- 文章目录 Frida-Dexdump 脱壳工具下载使用以及相关技术介绍 前言 一、查壳、反编译、APK工具推荐 二、查壳 1.方式1 2.方式二 三、脱壳 1.启动frida服务 2.方式一 3.方式二 四、反编译 总结 ---- 前言 本案例使用的App是:引力播.apk,涉及到查壳、脱壳、反编译; ---- 提示:以下是本篇文章正文内容,下面案例可供参考 一、查壳、反编译、APK工具推荐 ApkScan-PKID 查壳工具下载使用:
EXI-小洲
2022/12/13
7.4K0
Frida-Dexdump 脱壳工具下载使用以及相关技术介绍
实用FRIDA进阶:脱壳、自动化、高频问题
前面我们聊到了Frida在内存漫游、hook anywhere、抓包等场景中地用法,今天我们聊Frida在脱壳、自动化的用法以及经常被问到的高频问题。
bosh123
2021/01/23
4.6K0
爱加密企业版静态脱壳机编写
加壳时将方法指令抽走后自定义格式加密存放在assets/ijiami.ajm文件中,通过IDA动态调试分析发现每个被抽走的方法的debuginfo值改成0X3F开始的8字节大不的值,该值在还原时做为Map的KEY。
我是小三
2018/08/08
4.3K0
爱加密企业版静态脱壳机编写
记一次爱加密企业版脱壳与反调试绕过
https://github.com/hanbinglengyue/FART?tab=readme-ov-file
亿人安全
2025/04/29
1K0
记一次爱加密企业版脱壳与反调试绕过
【胖虎的逆向之路】03——Android一代壳脱壳办法罗列&实操
在上文中,我们讲解了关于Android整体加壳的原理和实际操作,现在我们来针对目前主流的脱壳工具以及流程进行讲解,由于作者能力有限,会尽力的详细描述 整体壳脱壳 的流程及原理,如本文中有任何错误,烦请指正,感谢~
胖虎哥
2023/05/10
3.9K0
【胖虎的逆向之路】03——Android一代壳脱壳办法罗列&实操
CTF逆向指南
在CTF比赛中, CTF逆向题目除了需要分析程序工作原理, 还要根据分析结果进一步求出FLAG。逆向在解题赛制中单独占一类题型, 同时也是PWN题的前置技能。在攻防赛制中常与PWN题结合。CTF逆向主要涉及到逆向分析和破解技巧,这也要求有较强的反汇编、反编译、加解密的功底。
小道安全
2021/09/24
2.2K0
CTF逆向指南
android逆向学习路线
就我自己从事安卓逆向这几年的经验来说,对没有编程基础的朋友如何学习安卓逆向最好制定以下学习路线:
bosh123
2020/09/06
2.8K0
APK加固之静态脱壳机编写入门
1.大家都知道Android中的程序反编译比较简单,辛苦开发出一个APK轻易被人反编译了,所以现在就有很多APK加固的第三方平台,比如爱加密和梆梆加固等。
我是小三
2018/08/08
2.2K0
APK加固之静态脱壳机编写入门
什么是App加壳,以及App加壳的利与弊
什么是App加壳,以及App加壳的利与弊 目前针对移动应用市场上安卓APP被破解、反编译、盗版丛生的现象,很多APP开发人员已经意识到保护APP的重要性。而对于移动应用APP加密保护的问题,如何对D
非著名程序员
2018/02/02
4.2K0
什么是App加壳,以及App加壳的利与弊
APP加固攻防梳理
现在市面上对APP的安全合规管控越来越严格了,也就要求了APP在上架之前一定要做合规检测和加固处理。对APP就是加固的好处,可以提高APP的安全性,提高APP被逆向分析破解的门槛,同时通过加固保护可以提高过安全合规的检测。由于APP加固技术不断被攻破情况,因此加固技术也是不断在快速迭代的过程。现在市面上的加固产品的还是比较多的,并且各个加固技术产品都有其各自优缺点,但是加固产品的所采用技术去有很多共性的地方。下面就对加固和脱壳对抗方案做些梳理总结。
小道安全
2021/10/14
3.1K1
APP加固攻防梳理
android 常用加密,分享一下Android各种类型的加密
几维安全com.Kiwisec.KiwiSecApplication或者com.Kiwisec.ProxyApplication或者干脆没有application
全栈程序员站长
2022/08/29
8200
Android逆向分析从入门到深入
学习逆向的初衷是想系统学习Android下的hook技术和工具, 想系统学习Android的hook技术和工具是因为Android移动性能实战这本书. 这本书里用hook技术hook一些关键函数来计算关键函数的调用参数和调用时长, 从而确定性能问题发生的位置和原因. 但目前没有比较系统的讲解hook的书籍, 所以就系统的了解下逆向分析.
用户7118204
2020/03/24
1.4K0
android题目 AliCrackme分析
参考链接: https://www.52pojie.cn/thread-1315444-1-1.html apk包: 链接: https://pan.baidu.com/s/1jXfS1qJyZDflKhgzZb8zMQ 密码: htop
tea9
2022/07/16
8710
android题目 AliCrackme分析
Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)[转]include <stdio.h>int func(int a, int b, int c, int d, int e,
声明:本文转自Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码),此文干货很多。
用户2930595
2018/08/23
4.4K0
Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)[转]include <stdio.h>int func(int a, int b, int c, int d, int e,
Android app反调试与代码保护的一些基本方案
| 导语 本文介绍Android app代码(java + ndk)的反调试的方法和保护代码增加逆向难度的一些基本方法。 Android自问世以来得以迅速发展,各大手机厂商纷纷投入成本开发、设计开发自己的Android系统,从2016年开始,Android已经超越ios成为全球最有影响力的操作系统。针对于Android app的逆向方法和逆向工具很多,所以反调试对于Android的代码保护扮演着很重要的角色。本文从四个方面介绍一下Android反调试的一些方法。 ps:反调试并不能完全阻止逆向行为,只是在
腾讯Bugly
2019/05/16
3.6K0
Android app反调试与代码保护的一些基本方案
带壳App去除强制升级
这是一款带壳的APP,打开之后要求强制升级最新版,否则无法使用,针对此APP可以进行脱壳后定位关键代码,然后重打包进行消除强制升级弹窗。
辞令
2020/11/25
3.2K0
带壳App去除强制升级
Android逆向分析概述
学习逆向的初衷是想系统学习Android下的hook技术和工具, 想系统学习Android的hook技术和工具是因为Android移动性能实战这本书. 这本书里用hook技术hook一些关键函数来计算关键函数的调用参数和调用时长, 从而确定性能问题发生的位置和原因. 但目前没有比较系统的讲解hook的书籍, 所以就系统的了解下逆向分析.
望天
2018/08/02
1.5K0
Android逆向分析概述
面试题丨android面试问题合集
静态分析工具是指在不运行程序的情况下,通过对程序文件进行源代码分析,从而对程序的安全性、可靠性、性能等进行分析的工具。它可以识别出程序文件中的漏洞,但只能识别出程序文件中的静态漏洞,不能识别出程序在运行中可能出现的动态漏洞。比如apktool、androidkiller、jeb,GDA、smali、jadx等
极安御信安全研究院
2023/06/08
2.4K1
面试题丨android面试问题合集
【愚公系列】2023年04月 攻防世界-MOBILE(easy-app)
Objection是一款移动设备运行时漏洞利用工具,该工具由Frida驱动,可以帮助研究人员访问移动端应用程序,并在无需越狱或root操作的情况下对移动端应用程序的安全进行评估检查。
愚公搬代码
2023/04/28
4590
【愚公系列】2023年04月 攻防世界-MOBILE(easy-app)
推荐阅读
相关推荐
IDA动态调试so源码 F5伪代码查看
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验