首页 > 其他分享 >学习笔记-frida入门一

学习笔记-frida入门一

时间:2022-11-11 09:56:53浏览次数:45  
标签:function Java 入门 笔记 console instance frida js log

## 以下的脚本和案例都是参照肉丝师傅的github上的文章的,文章是夹杂我个人的理解来写的,也算是一种学习了。

一.Frida脚本的概率并实现一个简单的hello-world

frida脚本概念

本质就是一个插桩框架,可以对内存空间对象方法进行监视,修改或者替换的一段代码 ## 简单的hello world 编个hello-world.js,2333

setTimeout(function(){
Java.perform(function()
{
console.log("hello world!");
});
});

这段setTimeout()函数传入了一个匿名函数,匿名函数中又调用了Java.perform()函数 又传入了一个匿名函数,里面是实际要做的事,打印了一句话hello world!,setTimeout()方法将我们传入的匿名函数注册到js运行时去,毕竟本质还是js代码,然后Java.perform()方法将传入该方法的匿名函数注册到frida的java运行时中,用来执行函数操作,这里我也有点不理解,有点官方,我理解这个函数就是实际写代码的地方 然后在kali中,把adb devices,然后shell进去,把frida-server打开 再另外开一个终端,frida -U -l hello-world.js android.process.media 发现就打印出字符串了, 插一句: 这里肉丝表哥感觉写的模糊了一些,然后和之前一篇形式也不太一样, frida -help打开之后,查看了这两个参数,一个是-U,一个是-l,也就是第一个是usb连接,第二个是指的load script,加载脚本,相当于这句话,把这段js代码,注入到了android.process.media这个进程中了。上一篇是用python来加载到,没想到还可以直接注入,666

二.简单脚本:枚举所有类

用到Java对象的enumerateLoadedClasses方法 重新创建一个js文件叫enumerateLoaderClasses.js

setTimeout(function(){
Java.perform(function(){
console.log("\n[*] enumerating classes");
Java.enumerateLoadedClasses({
onMatch:function(_className){
console.log("[*] found instance of "+_className+"");
},
onComplete:function(){
console.log("[*] class enumeration complete");

}
});
});
});

frida -U -l hello-world.js android.process.media

三.简单脚本二:定位目标类并打印类实例

比如这里是查看蓝牙的类,所以先找bluetooth的类

setTimeout(function(){
Java.perform(function(){
console.log("\n[*] enumerating classes");
Java.enumerateLoadedClasses({
onMatch:function(instance){
if(instance.split(".")[1]=="bluetooth"){
console.log("[->]\t"+instance)
}
},
onComplete:function(){
console.log("[*] class enumeration complete");

}
});
});
});

再次输入上面的命令,将脚本注入进程中后,发现找到了很多蓝牙的类,然后定位到我们想要找到 的类后,就可以打印类的实际例子,使用Java.choose()函数,来选定一个实例 ### 打印实例 Java.choose("android.bluetooth.BluetoothDevice",{ onMatch:function(instance){ console.log("[*] "+" android.bluetooth.BluetoothDevie instance found"+" :=> '"+instance+"'"); bluetoothDeviceInfo(instance); }, onComplete:function(){ console.log("[*] -------"); } }); 打开蓝牙,连接airpods,检测出蓝牙设备了。 ## 三.定位到类之后,需要去定位对应到方法,并打印出来 这里使用到Java.use(),而不是Java.choose(),前者是新建一个对象,后者是选择内存空间已存在到实例 ```function enumMethods(targetClass) { var hook=Java.use(targetClass); var ownMethods=hook.class.getDeclareMethods(); hook.$dispose; return ownMethods; }

setTimeout(function(){ Java.perform(function(){ console.log(“enumerating classes”); Java.enumerateLoadedClasses({ onMatch:function(instance){ if(instance.split(“.”)[1]==“bluetooth”){ console.log(“[->]+instance) } }, onComplete:function(){ console.log(”[*] class enumeration complete”);

}
});
var a=enumMethods("android.bluetooth.BluetoothDevice");
a.foreach(function(s){
console.log(s);
});
});

}); ``` 这里可以把类到所有方法全部都打印出来,打印出来后,其实hook不就方便了,所以其实先要做的事,是定位到类,确定类到名字,通过类到名字,再次调用,java的use方法,新建一个对象, 然后再把所有方法枚举出来,再次找到要hook到方法名,就可以直接hook就完事了,当然这是不知道方法和类时候做法。

 

 

 

点击关注,共同学习!
[安全狗的自我修养](https://mp.weixin.qq.com/s/E6Kp0fd7_I3VY5dOGtlD4w)


[github haidragon](https://github.com/haidragon)


https://github.com/haidragon

标签:function,Java,入门,笔记,console,instance,frida,js,log
From: https://www.cnblogs.com/haidragon/p/16879608.html

相关文章

  • 学习笔记-Frida构造数组,对象,Map和类参数
    Frida构造数组,对象,Map和类参数数组/(字符串)对象数组/gson/Java.array对象/多态,强转Java.cast接口interface,Java.register枚举,泛型,List,Map,Set,迭代打印重要思路:开......
  • 学习笔记-Frida综合案例
    Frida综合情景案例六层锁机案例调用静态函数和调用非静态函数设置(同名)成员变量内部类,枚举类的函数并hook,trace原型1查找接口,hook动态加载dex-“补充一个找interfa......
  • 学习笔记-RPC远程调用概念和实例
    RPC远程调用概念和实例一定要注意顺序,先hook,然后invoke,再rpc逆向三段:第三段RPC:RemoteProcedureCall远程调用FRIDA精髓:远程调动frida(rpc)多主机多手机多端口......
  • 学习笔记-综合案例,hook时机 ,制作dex,算法还原思路
    综合实战spawn/attach时机的选择各种主动调用/直接撸完各种hook以及构造函数动态加载自己的dexz3:约束求解/符号执行0x01通过案例来进行实战1.这里又放了个新......
  • 学习笔记-linker框架层的Hook和利用
    系统框架nativehookinit_array原理so加载执行流程hook_linkerinit_array自吐应用以32位在64位终端运行adbinstall--abiarmeabi-v7a<pathtoapk>hooklin......
  • 学习笔记-Objection环境,自动化分析和插件
    Frida简介objection与frida版本匹配安装objection连接非标准端口objection内存漫游,hook,traceobjection插件体系:Wallbreakerobjection+DEXDump脱壳0x01objec......
  • 学习笔记-Frida上手和逆向三段
    Frida上手和逆向三段FRIDA基本操作:参数,调用栈,返回值frida精髓2:方法重载,参数构造,动静态处理frida精髓3:主动调用,忽略内部细节,直接返回结果逆向三段:(hookinvoke)r......
  • 学习笔记-组件和事件hook核心原理和案例
    组件和事件的hook核心原理和案例0x01构造方法的hook的例子(java.lang.String这个随便哪个类都行)#构造方法的hookJava.use("java.lang.String").$init.implementation=........
  • 学习笔记-Frida反调试思路和hook native
    用户代码nativehookFrida反调试与反反调试基本思路(Java层API,Native层API,Syscall)六月题的Frida反调试的实现以及Native函数的Javahook以及主动调用静态注册函......
  • 学习笔记-hook和主动调用
    用户代码nativehook静态注册函数参数,返回值打印和替换调用栈主动调动符号hook==偏移hook枚举并保存结果0x01修改返回值以及参数和主动调用修改返回值修改......