学习
实践
活动
专区
工具
TVP
写文章

【Frida】初次接触

Frida现在逆向领域可谓是火的不行不行的。

初次接触,感觉是Frida简直是无所不能;这么说当然是有些过分,不过其可应用的范围确实很广很广。

更关键的是上手简单。

更关键的是还跨平台。

那我们一起来学习学习。本文适合纯小白入门,大佬请绕行。

安装

0、操作系统

本系列文章演示使用的是Windows 7操作系统。其实任何支持Python的操作系统都可以。

跨平台!跨平台!跨平台!

1、安装Python

下载地址:https://www.python.org/downloads/

官方建议使用Python 3.x,下载最新的3.7.0版本即可。

安装时建议选择添加到PATH环境变量。

一般来说,安装完Python,需要升级pip。

升级命令:pip install -U pip

请注意:本系列文章使用的不是上述官方构建发行版本,建议使用官方的发行版本。

2、安装Python IDE

建议使用PyCharm Community,下载地址:https://www.jetbrains.com/pycharm/download/#section=windows

3、安装Frida

通过pip命令安装Frida。

安装命令:pip install frida

请注意:我的演示环境中,并没有把Python及相关程序添加到PATH环境变量中,所以需要进入pip.exe程序所在的目录中执行,才会出现上述警告。建议添加到PATH环境变量,在任何目录中都可以使用。

安装就是如其简单,有木有,没有办法。

使用

使用Frida实现动态插装非常容易,与Xposed相比,简直爽的不行不行的。但是需要一点点Python的基础知识。

笔者没有Python基础,可以说不会Python,但是看看官方的API,按照流程编程,是没有问题的。

按照官方的入门示例来一发,代码如下:

importfrida

#附加到记事本进程,只有附加到目标进程,才能对其进行操作,这个必须是动态插装的第一步

session = frida.attach("notepad.exe")

#获取记事本进程加载的所有模块(动态库、程序)

modules = session.enumerate_modules()

print("=========== modules ===========")

formoduleinmodules:

print(module.name)#加载的模块名称

 # print(module.base_address)  #模块在内存中的基址

 # print(module.size)          #模块占空间大小

 # print(module.path)          #模块文件位置

print("=========== exports ===========")

m1st = modules[1]

#模块的导出函数表

exports = m1st.enumerate_exports()

forexportinexports:

print(export)

print("=========== ranges ===========")

#模块在内存中的映射

ranges = m1st.enumerate_ranges("rwx")

fora_rangeinranges:

print(a_range)

#取消附加进程

session.detach()

以上程序源码地址:https://github.com/fooree/fooFrida/blob/master/install/inject_notepad.py。

执行以上程序的方式有两种:

(1)使用Pycharm运行

(2)使用命令行运行

请不要在意我的python.exe程序文件路径,这是无关紧要的。

运行一下看看效果吧。

如果是初次接触Frida,感觉怎么样,是不是挺无聊的。

哈哈,动手体验一把,一定会觉得真的好简单。

下一篇文章将要演示Frida在Android中的应用。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180712G1RTGN00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券