在进行安卓安全研究时,hook技术是不可或缺的,常用的有Xposed:Java层的HOOK框架,由于要修改Zgote进程,需要Root,体验过Xposed,整个过程还是很繁琐的,并且无法hook,native层的。作为一名安卓菜鸟,Frida明显更方便,更适合我,结合现有的工具可以很容易的达到hook 的目的。

  本篇文章为第一篇,初体验Frida。

  学习的前提:安卓开发基础 ,推荐:https://www.runoob.com/w3cnote/android-tutorial-android-studio.html,(代码敲一遍),java基础,python基础,js基础。

  关于Frida的安装,环境搭建:https://juejin.cn/post/6844904110706130952

  简单体验Frida,破解一个app。

  

  app很简单,需要输入密码才能进入主页面;破解思路,我们要找到检查验证码的函数,进行hook.

  找到hook点的思路,静态分析代码,借助工具进行动态调试。

  

  代码1位置处可以看到securityCheck()函数进行校验,如果返回值为true,验证成功。在3位置可以看到,函数实在native,要想知道函数内容需要查看so文件。

  hook一个函数,是返回值为true,可以去hook函数的参数,提交正确的参数可返回true,或者hook函数的返回值,使函数的返回值永远为true也可以。

  这里我们只从java层去hook,hook函数的返回值,使函数的返回值永远为true即可

  开始写hook代码,我们只需要按照所给的代码框架,写入未入hook代码即可。

 

 1 import frida

 2 import sys
3
4 jscode = """
5 //这个地方写js代码,也是主要的hook代码;
6
7 """
8
9 def on_message(message, data):
10 if message['type'] == 'send':
11 print("[*] {0}".format(message['payload']))
12 else:
13 print(message)
14
15
16 # 重点的4行代码
17 process = frida.get_usb_device().attach('com.yaotong.crackme')//更改为要的app包名,.attach可改为spawn。spawn:以包名启动进程并附加 ,attach:在app运行过程中去附加
18 script = process.create_script(jscode)
19 script.on('message', on_message)
20 script.load()
21 sys.stdin.read()

jscode 里要写的内容为

console.log("Hello");
function main() {
console.log("Hello");//打印字符,证明hooK开始
Java.perform(function x() {
var MainActivity = Java.use("com.yaotong.crackme.MainActivity"); //要想hook一个函数我们先要找到他的类,得到类以后可以就调用它里面的函数.Java.use(包名.类名)实现
    //MainActivity即为我们hoook到的类,可以直接调用里面的函数,更改属性值等操作,具体写法如下(ps:该函数为普通方法,构造方法,重载方法写法都不同)
MainActivity.securityCheck.implementation = function (str) { //调用函数,function里面的参数要与原函数对应。
return true; //更改返回值,frida会检测app进程,一旦该pp调用了MainActivity里面的securityCheck()函数,会自动更改返回值为true;
}; }) } setImmediate(main);

运行脚本:

接着我们去输入验证码的地方输入任意值,调用该函数都会返回true

hook成功

以上是Frida的初体验,找到hook点,编写hook的js代码,启动frida,调用该函数,hook成功。整个过程十分方便。

Android 安全研究 hook 神器frida学习(一)的更多相关文章

  1. Android hook神器frida(二)

    1.关于使用frida遇到的一些问题 (1)如果出现以下错误: 可以通过以下方式关闭SELinux,在adb shell中执行: > /sys/fs/selinux/enforce 或者 set ...

  2. Android hook神器frida(一)

    运行环境 ● Python – latest 3.x is highly recommended ● Windows, macOS, or Linux安装方法使用命令 sudo pip install ...

  3. Android逆向之旅---Native层的Hook神器Cydia Substrate使用详解

    一.前言 在之前已经介绍过了Android中一款hook神器Xposed,那个框架使用非常简单,方法也就那几个,其实最主要的是我们如何找到一个想要hook的应用的那个突破点.需要逆向分析app即可.不 ...

  4. Android安全研究经验谈

    安全研究做什么 从攻击角度举例,可以是:对某个模块进行漏洞挖掘的方法,对某个漏洞进行利用的技术,通过逆向工程破解程序.解密数据,对系统或应用进行感染.劫持等破坏安全性的攻击技术等. 而防御上则是:查杀 ...

  5. 【转】Android安全研究经验谈

    本文转载自:http://www.cnblogs.com/whp2011/archive/2015/01/26/4250875.html 一.安全研究做什么 攻击角度:对某个模块进行漏洞挖掘的方法,对 ...

  6. 转载_2012年的Android之旅:梦想、学习、坚持、自信、淡定

    原文地址:http://blog.csdn.net/luoshengyang/article/details/8452527 2012年的Android之旅:梦想.学习.坚持.自信.淡定.. ---- ...

  7. Android多线程研究(6)——多线程之间数据隔离

    在上一篇<Android多线程研究(5)--线程之间共享数据>中对线程之间的数据共享进行了学习和研究,这一篇我们来看看怎样解决多个线程之间的数据隔离问题,什么是数据隔离呢?比方说我们如今开 ...

  8. hook框架frida的安装以及简单实用案例

    1.下载地址 https://github.co/frida/frida/releases 2.另外两种安装方法 1.Install from prebuilt binaries This is th ...

  9. Android M Permission 运行时权限 学习笔记

    Android M Permission 运行时权限 学习笔记 从Android 6.0开始, 用户需要在运行时请求权限, 本文对运行时权限的申请和处理进行介绍, 并讨论了使用运行时权限时新老版本的一 ...

随机推荐

  1. mysql 优化数据类型

    1.更小的通常更好 选择不会超过范围的最小类型 2.简单就好 例如,整型比字符操作代价更低,因为字符集和校对规则(排序规则)使字符比较比整形比较更复杂. 3.尽量避免null 如果查询中包含可为nul ...

  2. 团队作业第六次——Beta冲刺

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta 冲刺 这个作业的目标 团队进行Beta冲刺 作业正文 正文 其他参考文献 无 代码规范与计划 代码 ...

  3. 半监督伪标签方法:Feature Space Regularization和Joint-Distance

    原文链接 小样本学习与智能前沿 . 在这个公众号后台回复"200706",即可获得课件电子资源. @ 目录 Abstract I. INTRODUCTION Framework. ...

  4. YoyoGo微服务框架入门系列-快速编写WEB API

    前言 YoyoGo是一个使用Golang编写的一个简单.轻量.快速.基于依赖注入的微服务框架,目前依然在研发阶段,欢迎Star以及一起参与到框架的研发 GitHub地址:https://github. ...

  5. IntelliJ IDEA 2020.3正式发布,年度最后一个版本很讲武德

    仰不愧天,俯不愧人,内不愧心.关注公众号[BAT的乌托邦],有Spring技术栈.MyBatis.JVM.中间件等小而美的原创专栏供以免费学习.分享.成长,拒绝浅尝辄止.本文已被 https://ww ...

  6. 第2.3节 Python运算符大全

    一. Python的算术运算 Python的算术运算符与C语言类似,略有不同.包括加(+).减(-).乘(*).除(/).取余(%).按位或(|).按位与(&).按位求补(~).左移位(< ...

  7. PyQt程序执行时报错:AttributeError: 'winTest' object has no attribute 'setCentralWidget'的解决方法

    用QtDesigner设计了一个UI界面,保存在文件Ui_wintest.ui中,界面中使用了MainWindow窗口,窗口名字也叫MainWindow,用PyUIC将其转换成了 Ui_wintest ...

  8. PyQt学习随笔:自定义Qt事件可以使用的事件类型的常量值范围

    除了<PyQt学习随笔:Qt事件QEvent.type类型常量及其含义资料速查>介绍的Qt已经定义的事件外,Qt还支持自定义事件. 为了方便起见,可以使用 registerEventTyp ...

  9. PyQt学习随笔:Qt事件QEvent.type类型常量及其含义资料汇总详细内容速查

    下表是Qt5.11提供的所有已经定义的事件类型常量及其含义说明(其中标蓝色的是老猿认为价值比较大的事件),事件的事件类型通过QEvent.type()来获取.由于老猿没有找到直接粘贴Excel表格的方 ...

  10. PyQt(Python+Qt)学习随笔:QAbstractItemView的tabKeyNavigation属性

    老猿Python博文目录 老猿Python博客地址 tabKeyNavigation属性为bool类型,用于控制视图中是否启用tab键和backtab(shift+tab)进行数据项之间的导航切换. ...