frida学习(process,module,memory) && android开发学习(结构,kotlin)(二)

FRIDA输出打印

console.log()
console.warn()
console.error()

console之hexdump

打印内存中的地址
target参数可以是ArrayBuffer或者NativePointer,而options参数则是自定义输出格式可以填这几个参数offset、lengt、header、ansi

var libc = Module.findBaseAddress('libc.so');
console.log(hexdump(libc, {
   
   
  offset: 0,
  length: 64,
  header: true,
  ansi: true
}));
           0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  0123456789ABCDEF
00000000  7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00  .ELF............
00000010  03 00 28 00 01 00 00 00 00 00 00 00 34 00 00 00  ..(.........4...
00000020  34 a8 04 00 00 00 00 05 34 00 20 00 08 00 28 00  4.......4. ...(.
00000030  1e 00 1d 00 06 00 00 00 34 00 00 00 34 00 00 00  ........4...4...

send(终于知道send是干什么的了)

nd是在python层定义的on_message回调函数,jscode内所有的信息都被监控script.on(‘message’, on_message),当输出信息的时候on_message函数会拿到其数据再通过format转换, 其最重要的功能也是最核心的是能够直接将数据以json格式输出,当然数据是二进制的时候也依然是可以使用send

process 对象

Process.id:返回附加目标进程的PID
Process.isDebuggerAttached():检测当前是否对目标程序已经附加
Process.enumerateModules()会枚举当前所有已加载的so模块,并且返回了数组Module对象

function frida_Process() {
   
   
    Java.perform(function () {
   
   
        var process_Obj_Module_Arr = Process.enumerateModules();
        for(var i = 0; i < process_Obj_Module_Arr.length; i++) {
   
   
            console.log("",process_Obj_Module_Arr[i].name);
        }
    });
}
setImmediate(frida_Process,0);

Process.enumerateThreads():枚举当前所有的线程,返回包含以下属性的对象数组:id.state,context
Process.getCurrentThreadId():获取此线程的操作系统特定 ID 作为数字(感觉没用)

module对象

Process.EnumererateModules()方法返回了就是一个Module对象
Module对象的属性
1 name 模块名称
2 base 模块地址,其变量类型为NativePointer
3 size 大小
4 path 完整文件系统路径

Module.load() //加载指定so文件,返回一个Module对象
function frida_module(){
   
   
Java.
  const hook = Module.load("libhello.so");
  console.log("模块名称:",hook.name);
  console.log("模块地址:",hook.base);
  console.log("模块大小:",hook.size);
  console.log("路径:",hook.path);
}	
Process.EnumererateModules() 
function frida_Module(){
   
   
   Java.perform(function(){
   
   
           var process_Obj_Module_Arr = Process.enumerateModules();
           for(var i = 0; i < process_Obj_Module_Arr.length; ++i)
           {
   
   
              if(process_Obj_Module_Arr[i].path.indexOf("hello") != -1)
              {
   
   
                         console.log("模块名称:",process_Obj_Module_Arr[i].name);
                         console.log("模块地址:",process_Obj_Module_Arr[i].base);
                         console.<
Frida是一款免费的,基于Python和JavaScript来实现的,面向开发人员、逆向工程师和安全研究人员的动态检测工具包。 Frida拥有一套全面的测试套件,不但调试效率极高,而且在广泛的使用中经历了多年严格的测试。 尤其是,移动应用安全测试和服务巨头NowSecure对齐钟爱有加,在NowSecure内部,安全人员通过Frida这个工具套装,已经完成对大量的移动应用程序大规模深度的安全分析测试。目前依然在该公司的安全测试中扮演重要的角色。 基于Python和JavaScript的Frida,天生就是跨平台的动态调试工具,不但可以运行在Windows、Linux、macOS之上,而且还可以调试Windows应用程序、Linux应用程序,macOS、iOS、Andriod和QNX等几乎全平台的应用程序。可以说,一旦掌握Frida这套工具,就可以在全平台,对全平台的应用程序进行动态调试和分析。 Frida使用极其方便,在使用过程中,只需将你编写的JavaScript脚本通过Frida自身的工具注入到目标进程中,就可以HOOK任何功能,其中包括但不限于监视加密API或跟踪应用程序关键代码等。在使用过程中,无需知道被“研究”程序的源代码。 尤其是可以一边编辑JavaScript脚本,一边运行JavaScript脚本的功能对于调试分析来说极为友好。只需“保存”正在编辑的JavaScript脚本,就立即就能看到该脚本执行的结果,全称无需其它人工介入,也无需重新启动被“研究”的应用程序,极大地简化了分析流程,同时也极大地提高了工作效率。因此,得到了众多安全分析人士的青睐。 本课程从最基本的调试环境搭建开始,基于经典的Windows“扫雷”游戏的动态调试分析,编码等,循序渐进演示Firda在分析调试Windows应用程序中基本使用方法和技巧。拥有这些知识储备之后,在加上官方的参考文档,你就可以轻松地将这些知识“迁移”至分析和调试其他平台的应用程序。 课程资料,请看第一课中github链接。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值