安卓逆向6,frida逆向框架介绍,基础开发hookjava层,进阶开发
hooknativ。。。
####
hook技术
1,hook,java层,这个相对简单,都是java代码,
2,hook,native层,so库,这个难度⼤,⾥⾯都是汇编,
####
frida框架介绍:
frida是⼀个逆向框架,
⽬前逆向框架⽐较知名的有两个,Xposed,frida
Xposed,是java开发的,要会java
frida,是python和js,开发的,这个⽐较适合我,frida是⼀个js注⼊技术,python主要是⼀个架⼦,主要还是⽤js注⼊,
两个⼯具对⽐,
frida⽐Xposed的适⽤性更⼴⼀些,Xposed只能hook安卓,java层,
⽽frida可以hook,安卓,ios,windows,还可以hook,安卓的native层,
###
frida中python只是调⽤,主要是写js,做js注⼊,
###
使⽤frida开发的前提是设备要root
###
使⽤frida开发hook 的前提条件,
你⾸先要知道hook哪⼀个⽅法,所以你要先解决脱壳的问题,获取到源代码,
###
frida组成部分,
1,frida-server,这个是⼀个包,需要放到⼿机设备上,
2,frida,python模块
3,frida-tools,提供cli命令,和frida-server做交互,
第⼆个和第三个是可以只⽤⼀个的,你可以⽤python,直接调⽤js,也可以⽤客户端cli命令,调⽤js,
###
有空经常去看官⽅⽂档,
很多时候,有很多问题,你解决不了,你去百度不到的,必须要养成看官⽅⽂档的习惯,
对于这些先进的东西,⽣态还不是很丰富的,你必须要要看官⽅⽂档,
###
Frida安装配置
第⼀步:电脑安装frida和frida-tools
pip install frida
pip install frida-tools
--注意:这两个我安装到了python虚拟环境⾥⾯了,所以要先进⼊python虚拟环境,然后再执⾏
mac安装本来是两个命令的事情,但是安装的时候总是报错,
sudo pip install --upgrade certifi
open /Applications/Python\ 3.7/Install\ Certificatesmand
如果是证书问题,就执⾏这两句,然后重新启动电脑,我的就是这样好的,
####
第⼆步,⼿机执⾏frida server
下载的时候,注意是x86,还是x86_64,还是arm,
⼿机基本都是arm
模拟器⼀般都是x86的,⽽且是32位的,但是这不是绝对的,需要查看⼀下,
adb shell getprop ro.product.cpu.abi
使⽤这个命令来查看,
####
在⼿机上执⾏:
⾸先下载的frida-server解压,
推⼊⼿机⾥,adb push frida-server-15.0.18-android-x86_64 /data/local/temp/frida-server
adb shell
cd /data/local/temp
确定⼿机当前⽤户是root⽤户或拥有root权限
chmod 777 frida-server  --变成可读可写可执⾏,
./frida-server
执⾏完毕后为运⾏状态。
保留此窗⼝ shell,以保证服务运⾏,关闭该shell 或者停⽌ctrl+c 则服务关闭。接下来的操作可另起shell 或该步骤命令另起 shell 执⾏。###
第三步,端⼝转发:
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043
27042 ⽤于与frida-server通信的默认端⼝号,之后的每个端⼝对应每个注⼊的进程,检查27042端⼝可检测 Frida 是否存在。
你想要在python⾥⾯做开发,还要做端⼝转发,
不然,你python做开发,是会报错,告诉你没有连接上,
####
第四步,检查是否成功
电脑上运⾏
先进⼊python虚拟环境,⾥⾯安装了frida tools
frida-ps -U 电脑上运⾏ android.process.acore 字样表⽰成功
这个命令是验证⼀下,在⼿机端的frida-server是否运⾏起来了,
注意这⼀句要进⼊你安装frida的虚拟环境⾥⾯执⾏,
###
经过上⾯的配置,你就可以做frida开发了,
###
frida基础开发⽰例:
###
frida开发的固定套路:三段论
第⼀段:有⼀个打印的python函数,⽤来打印⽇志,不使⽤这个,使⽤console.log("version: "+v)也可以,只是⾃⼰写可以加⼀些标志,
第⼆段:有⼀段js脚本,
第三段:下⾯有⼀段python代码,
主要是做了,获取设备,获取设备⾥⾯的app包名,执⾏js脚本,注⼊到app⾥⾯取,调⽤第⼀段的打印⽅法,最后⼀句是不要让程序断掉,第⼀段和第⼆段,基本不⽤动,主要是动中间的js脚本,
python主要是⼀个架⼦,主要还是⽤js注⼊,
####
要先在模拟器把app运⾏起来然后再hook
运⾏这个py⽂件,可以打印出来安卓系统的版本,打印所有调⽤的⽅法
###
frida提供了什么⽅法,可以看官⽅⽂档,
具体的js脚本的api,看这个官⽅⽂档,
逆向开发很少有很详细的教程,
所以如果你遇到解决不了的问题,你要常常看官⽅⽂档,静下来⼼看⽂档,这是你进阶的必经之路,
###
Frida 常⽤模块API:
Java 模块:Hook Java 层的类⽅法相关
Process 模块:处理当前线程相关
Interceptor 模块:操作指针相关,多⽤来Hook Native 相关
Memory 模块:内存操作相关
Module 模块:处理so相关
###
python代码:
import frida
import sys
def on_message(message,data):
if message["type"] == "send":
print("[*]{0}".format(message["payload"]))
else:
print(message)
jscode = """
// 获取安卓版本
var v = Java.androidVersion;
send("version: "+v)
//获取该应⽤的加载的类
var classnames = umerateLoadedClassesSync();
// for循环
for(var i = 0; i<classnames.length; i++){
send("class name :" + classnames[i]);
}
"""
process = _usb_device().attach("⾃毁程序密码")
script = ate_script(jscode)
<("message",on_message)
print("[*] running CIF")
script.load()
ad()
>
>
frida进阶开发:
###
###
作为⼀个开发已经要了解⼀个分层的思想,
看上⾯这个图,⼀开始就只有系统层的AIP,也就是so层,这⼀层的API可以让程序员调⽤,
但是你使⽤这⼀层,对程序员很不友好,所以封装出来了应⽤层API,安卓层,这⼀层对程序员⽐较友好,开发效率也会提升,
###
⼀般的程序员是有有流⽔线的培训的,所以在市⾯上有很多培训机构,
系统层,so层,这个对程序员的要求很⾼,对技术的深度和⼴度都有要求,没有办法批量培训,
系统层的问题都⽐较复杂,所以现在很多分层了之后,系统层的问题你就不⽤管了,只需要去考虑应⽤层,去调⽤接⼝去开发app,关注业务逻辑,应⽤层对程序员⽐较友好,
###
另外主要最上层的app,不是只能调⽤安卓层,还能直接掉SO层,这是可以的,
因为及时你调⽤的是安卓层,最终也会传导到系统层,然后执⾏,
###
理解了上⾯的分层,
你就会知道,为什么你有时候hook应⽤层的时候不⽣效,
⽐如打开⽂件,你hook应⽤层不⽣效,这个时候你就要考虑是不是要hook系统层,os层,
因为我知道不管你怎么打开⽂件,⼀定会经过系统层,那我就直接hook系统层的打开⽂件的函数,就⼀定能hook到,
有时候你会发现,直接hook系统SO层,还会更⽅便,
java安装完整教程###
简单了解so库,---ida⼯具
如何看到SO库⽂件⾥⾯的内容,就要使⽤到⼀个神器,IDA⼯具,
使⽤ida⼯具,需要安装⼀下软件,
这个⼯具的使⽤就是调试代码的,
⽬前最优秀的静态反编译软件之⼀,这款mac安全⼯具它不仅可以应⽤在反编译和动态调试等强⼤的逆向⼯程领域,还⽀持对多种处理器不同类型的可执⾏模块进⾏反汇编处理,软件具有⽅便直观的操作界⾯,在为⽤户呈现出简洁清晰源代码的同时,也完美的减少了反汇编⼯作的难度,极⼤的提升了⽤户在反编译⼯作中的使⽤体验。
可以使⽤这个⼯具看到so库⾥⾯的内容,都是⼀个⼀个的函数,供app调⽤,
###
具体软件使⽤要⾃⼰学习了,
###
怎么hook这个so库呢?
下⾯介绍⼏个操作so库的frida的API使⽤
hello.so
  printhello()
假设你要hook⼀个so库,hello.so,
⾥⾯有⼀个⽅法printhello()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论