m4bln


  • 首页

  • 归档

  • 标签

  • hint

  • 关于

  • 搜索

r2frida使用

发表于 2021-02-19 | 阅读次数:
一、简介radare2和frida的结合体,多用于native代码的hook和调试。参考:https://github.com/nowsecure/r2frida 二、安装 先安装radare2, 参考https://github.com/radareorg/radare2 r2pm -ci r2frida 三、使用这里列举常用的命令,更详细操作参考r2wiki https://r2wiki.readthedocs.io/en/latest/radare-plugins/frida/ 1. 用r2frida开启调试现在搜到的教程一般是较老的使用方式,运行r2 “frida://?”查看最新使用方法: 分为local、usb和remote三种: 调试手机的APP,这里使用: spawn模式 1r2 frida://spawn/usb//com.tencent.mm 使用spawn模式,需要运行”\dc“实现进程resume(r2frida命令以 =! 或 \ 为前缀,后边加问号可以查看命令帮助,例如\?,=!?, dc表示continue断点或resume进程) attach模式 1r2 frida://attach/usb//com.tencent.mm 2. 内存搜索1\/ keyword (注意有空格) 例如在微信进程搜索”\/ fuck Xiao Mi“ 查看内存具体位置1x @ 地址 (x 是 px 命令的简写,这个命令作用是show hexdump) 格式化输出 3. dd应dynamic的意思,主要实现动态调试的功能,常见的命令如下:1234567891011121314151617181920212223242526272829303132333435363738d. Star ...
阅读全文 »

Android常见加密算法实现

发表于 2020-12-28 | 阅读次数:
逆向的时候,经常会遇到各种加密算法,google查起来比较乱,这里整理下。 编码:base64、哈希算法:md5、sha-1、sha-256对称加密:AES、DES、3DES非对称加密:RSA 一、常见算法的Android实现base6412345678//编码byte[] data = text.getBytes("UTF-8");String base64 = Base64.encodeToString(data, Base64.DEFAULT);//解码String x = ""byte[] data = Base64.decode(x, Base64.DEFAULT);String text = new String(data, "UTF-8"); md5、sha-1、sha-256写法都一样,区别在于MessageDigest.getInstance(“MD5”)指明要使用的算法,1234567891011121314151617181920fun md5(str: String): String { val digest = MessageDigest.getInstance("MD5") val result = digest.digest(str.toByteArray()) //没转16进制之前是16位 println("result${result.size}") //转成16进制后是32字节 return toHex(result)}fun sha1(str:String): String { val digest = MessageDigest.getInsta ...
阅读全文 »

objection操作

发表于 2020-08-13 | 阅读次数:
objection(https://github.com/sensepost/objection)集成了一些基于Frida的hook脚本,用一条命令即可实现内存搜索、类函数hook等操作,同时支持Android和iOS,在逆向APP时非常方便。 使用环境 运行Frida server 启动objection (pip3 install objection –upgrade更新到最新版) 正常启动:objection -g com.xxx.xxx explore 指定ip和端口(与frida-server一致)objection -N -h 192.168.1.221 -p 9999 -g com.xxx.xxx explore objection操作objection的操作和参数如下图,具体可以在 objection –help 中查看。 按空格键会出现命令提示 env 当前APP的环境变量 file 文件相关file download []file upload []file http start 当前目录下启动一个http server import 1.js 导入外部js脚本 plugin load 加载外部脚本 reconnect 重连frida server grepobject的命令执行结果是无法grep的,可以使用objection run xxx | grep yyy的方式,例如objection -g com.tencent.mm run memory list modules|grep xxx memory操作 memory list modules 列出加载的module memory list exports libssl.so 查看指定module的导出函数memory list exports lib ...
阅读全文 »

自动定位webview中的SLL_read和SSL_write

发表于 2020-07-24 | 阅读次数:
简介在Android上抓https包是一件非常头疼的事情,随着android的不断升级,你可能面临导入用户证书、导入根证书、解决证书绑定、双向绑定等等一系列复杂的操作,之前的文章 Android Https抓包实践 中记录了APP抓包时踩过的很多坑,抓包配环境的繁琐令人非常痛苦。 基于frida的ssl_logger直接从底层hook SSL_read和SSL_write函数进行抓包,似乎解决了导证书、SSL pining等麻烦,但无法抓取APP内置webview发出的包,这是因为ssl_logger是通过hook 系统的ssl库来抓包,而Webview(Chromium)将boringssl的代码静态编译到了自己的二进制文件中,在收发https数据包时,不会调用系统的SSL库,因此也就无法抓包了。 由于编译后的webview二进制文件是无符号的,要通过hook的方式抓webview发出的https包,就要找到SSL_read和SSL_write符号。 定位SSL_read和SSL_write找到SSL_read和SSL_write偏移的方法参考Hooking Chrome’s SSL functions 。文章中定位方法是在windows上操作的,android上的webview共享同一套代码,因此同样适用。 定位SSL_read和SSL_write的方法主要如下: (1)根据webview版本号(chrome源码)找到chromium源码中使用的boringssl版本(DEPS文件); (2)找到对应boringssl代码中的ssl_lib.cc文件,SSL_read和SSL_write代码中ERR_put_error函数会输出行号; ssl_write和ssl_read(调用ssl_peek)调用了OPENSSL_PUT_ERROR,最后一个参数未代码行号,因此根据代 ...
阅读全文 »

高通QSEE中Trustlet提取

发表于 2020-07-06 | 阅读次数:
Trustlet提取QSEE架构的Trustlet通常放在/firmware目录(/vendor/firmware_mnt的软连接),每个模块被分割为多个文件,以xxxx.b0x形式存在,每个模块对应一个mdt文件,如下图: 其中,mdt文件保存了elf文件头以及证书,使用binwalk可以看到包含一个elf头和3个DER证书文件头: 利用readelf可以看到elf文件分割后的偏移:(mdt文件的elf头和xxxx.b00的文件头相同) 基于这些信息,编写提取Truset的脚本参考如下:12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091import sys, os, structdef main(): #Reading the arguments if len(sys.argv) != 4: print "USAGE: <TRUSTLET_DIR> <TRUSTLET_NAME> <OUTPUT_FILE_PATH>" return trustlet_dir = sys.argv[1] trustlet_name = sys.argv[2] output_file_path = sys.argv[3] flag = open(os.path.join(trustlet_dir, "%s.mdt" % trustlet_name), &qu ...
阅读全文 »

CVE-2020-7958-从手机中提取指纹图片

发表于 2020-07-01 | 阅读次数:
简介众所周知,TrustZone被广泛应用在现在的手机设备中。TrustZone将SoC的硬件和软件资源划分为安全(Secure World)和非安全(Normal World)两个世界,内核、操作系统、上层应用等运行在Normal World,人脸指纹等生物数据识别、支付、加密等操作在Secure World中运行。这样即使设备被ROOT, 也只能意味着Normal World被攻击者控制,人脸指纹等一些极度敏感的数据不会被泄露。 当前主流的TrustZone厂商与产品有:Intel的SGX,Qualcomm的QSEE,Huawei HiSilicon的Trusted Core以及Samsung的Kinibi。 CVE-2020-7958是Oneplus 7Pro上指纹识别模块的一个漏洞,使用了高通的QSEE,该漏洞由Synopsys Cybersecurity Research Center发现和披露,本文对其进行分析和重现,编写exp实现了从TrustZone里提取原始的指纹图片。 为便于理解,在文章开始之前,将几个相关缩略词列举如下: TEETrusted Execution Environment, 可信执行环境,即Secure World REERich Execution Environment,开发执行环境,即Normal World TATrusted Application,可信应用,即可信环境内执行的程序 Trustlet等同于TA 指纹识别TEE架构Android对指纹识别的实现作了要求(参考官方文档),例如指纹匹配必须在TEE中进行,指纹数据也必须进行加密,保证在TEE外无法读取和更改。 Android上指纹识别相关架构如下图所示,其中红框部分处于REE中,即如果有root权限是可以操控的。指纹的匹配、存储等操作位于TEE中。REE通过Fin ...
阅读全文 »

Android锁屏状态下的安全分析

发表于 2020-06-11 | 阅读次数:
简介Android从6.0开始,默认开启了全盘加密(Full Disk Encryption,即FDE),设备开机后第一次解锁时,用户数据处于加密状态,大多数功能在开机解锁前不可用。如下图: 如果没有输入正确的密码,用户数据是解不开的,因此在这一状态下即使物理控制设备,想要进一步攻破设备或者窃取数据也是极其困难的。 用户输入正确的密码后,进入系统,数据解开,所有功能正常使用。当再次锁屏时,必须要解锁后才会进入系统,但这一状态下也是有部门功能处于可用状态,例如下滑查看设置页面、手电筒、闹钟、计算器、锁屏壁纸等功能。 如果锁屏状态下的系统设计存在安全问题,攻击者在接触到用户设备后,就可能窃取用户数据,设置完全解锁手机。因此,本文主要讨论在手机不关机情况下,锁屏状态下的安全问题。 攻击面分析锁屏状态下,所有可用的功能都有可能是一个攻击入口或载体,这里主要总结如下: 锁屏下的数据交互手机虽然处于锁屏状态,但还是可以接收推送消息、刷公交卡等,这就意味着锁屏下存在着数据交互,例如网络数据、蓝牙数据、NFC数据等,大多数情况下这些数据都是被动生成的,虽无法造成严重的安全问题,但有可能存在数据泄露。典型的场景可能有: 结合Kama攻击抓取wifi流量(锁屏下无法设置wifi) 开启NFC直接进行支付 冒充蓝牙设备进行通信等 语音助手语音助手几乎是只能手机的标配,且其功能注定了锁屏下处于可用状态。如果语音助手的设计有问题,可能在锁屏下泄露用户数据。例如唤起某些APP、泄露用户个人信息、唤起智能家居甚至完成支付,严重时甚至直接跳过锁屏界面。 通过逆向语音助手APP的实现,可以挖掘更多的攻击面。 不安全的Activity跳转先前有很多直接绕过锁屏进入activity的案例,其根本原因是在锁屏下调用startActivity时,未判断是否解锁。如果未解锁的话,需要调用KeyguardMana ...
阅读全文 »

一个手机热点泄露你所有的账户信息?

发表于 2020-02-20 | 阅读次数:
在移动互联网生活中,用手机建立热点共享网络是一个很常见的场景,无论是Android还是iOS系统,简单的几步操作就可以迅速的建立热点,将你的4G网络分享给他人使用。 由于连接热点的热备和宿主之间网络互通,操作系统做了很多隔离和保护措施,以保障热点的安全使用,通过热点的机制去攻击宿主操作系统是一件很困难的事情。尽管如此,随着一些新兴业务的开展,通过热点窃取你所有账户也成为了可能…… 手机热点背后到底泄露了什么东西?这要从“手机号码一键登录”开始说起。 0x0 什么是“手机号码一键登录”移动互联网时代,手机里APP的数量越来越多,而初次使用APP通常采用“手机号+验证码”的方式进行注册,填写验证码是一个非常麻烦的事情,早期的APP直接获取短信权限,从短信中提取出验证码帮用户填好,但随着用户隐私意识的加强通常不会赋给APP读取短信的权限,于是就只能手动去短信中找出验证码,多次点击跳转复制粘贴的操作使注册流程变动非常繁琐。 为了解决这个用户痛点,运营商推出了“手机号码一键登录”这个技术(也叫“本机号码一键登录”、“手机号免密登录”等),彻底告别了验证码。 例如手机上打开”货拉拉“,APP会自动获取你手机号,点击”本机号码一键登录“后这个按钮后,APP会直接使用你的手机号进行注册登录,整个过程中不需要任何验证码,做到了真正的一键登录。 如此简单的交互彻底解决了APP在注册和登录时的痛点,告别了烦人的短信验证码,为互联网应用提供全新的用户账号认证一站式解决方案。 然而,作为一名安全研究人员,看到自己的手机号在没有任何权限提示的情况下直接被显示了出来,自然而然的产生了警觉。为了探索这种技术的安全性,我对其背后的原理进行了分析。 0x1 一键登录的原理我们带着几个疑问去解释一键登录的原理。 1.手机号能被APP获取吗?正常情况下,APP是无法读取手机号的,即使给了APP所有的权限,它也读 ...
阅读全文 »

Android通用的jsBridge漏洞挖掘

发表于 2019-12-11 | 阅读次数:
1. 定位jsBridge- Smali静态查找 - 调用 addjavascriptinterface函数 - 静态 使用@JavascriptInterface annotation的 - 动态hook - hook addjavascriptinterface函数 - 第三方webview, 枚举所有类,看是否有addjavascriptinterface函数,进而hook - Chrome远程调试,window.object找到导出的js对象 2. 找到所有WebView组件- 跟踪Menifest文件里带webview的组件 - Activity里继承WebView的 - 第三方webview, 枚举所有类,看是否继承webview,或有webview的成员函数 3. 找特权域白名单如果存在,在每次执行导出的java方法时都会判断 - getHost - getUrl - contain, indexof, startswith等 4. 打开debug模式- 调用setWebContentsDebuggingEnabled函数 - 少数app里有隐藏的开关
阅读全文 »

提取设备中的apk文件

发表于 2019-10-10 | 阅读次数:
测试的时候经常需要从设备中提取apk文件,通常情况下,普通apk安装包位于/data/app/目录下,系统apk位于/system/app或/system/priv-app/目录下,结合包名就可以找到apk文件的路径,由于全局可读,所以直接dump出来就可以。 Android 8.0之后,apk文件的路径添加了随机字符,例如“/data/app/com.tencent.mobileqq-onrUh_8jpKjlW5JhNSDwNQ==/base.apk”,这就给提取apk文件带来了困难。然而有一个命令是可以很方便找到这个路径的,那就是pm path。 不仅仅普通apk,连系统apk路径也能显示出来 之后直接adb pull /data/data/com.x.x.x/app_name.apk就可以拿到apk文件了。 附一些可能用到的命令: pm list packages列出所有安装的apk pm list packages -f列出APK的路径 pm list packages -s列出所有的system APP pm list packages -3列出所有的第三方APP pm list packages keywords匹配关键字的包名 提取所有可执行文件:1find / 2>/dev/null|grep -E '\.jar|\.apk|\.so|\.dex' | xargs grep "xxxx"
阅读全文 »
12…9

m4bln

影后入林到驿前

84 日志
2 标签
© 2021 m4bln
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.3