首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Android 逆向】ART 函数抽取加壳 ⑤ ( unistd.h#execve 函数分析 | 使用自定义的 myexecve 函数替换 libc.so#execve 函数 )

文章目录 一、bionic/libc/include/unistd.h#execve 函数分析 二、使用自定义的 myexecve 函数替换 libc.so#execve 函数 在 【Android...④ ( 对 libc.so#execve 函数进行内联 HOOK 操作 ) 博客中 , 对 libc.so#execve 函数 进行了 内联 HOOK 操作 , 可以对该函数进行拦截 ; 本篇博客实现...自定义的 myexecve 函数 替换 libc.so#execve 函数 ; 一、bionic/libc/include/unistd.h#execve 函数分析 ---- libc.so#execve...函数在 libc.so 的地址 , uint32_t new_addr 参数是自定义替换 execve 函数执行的函数地址 , uint32_t **proto_addr 参数是 execve函数的地址...envp); // 自定义的 execve 函数 , 用于替换 Android 自带的 execve 函数 // 主要用于拦截 dex2oat 字节码文件 int myexecve(const char

41520
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Hack ELF Loader:用户态execve

    下的loader:用户态execve。...研究用户态execve的实现,起初是从攻击的方向去思考的,在linux主机安全中,使用shell命令进行攻击是非常常见的场景,无论是横向移动,还是种马,很难不应用shell命令。...在之前的文章中,无"命令"反弹shell-逃逸基于execve的命令监控(上) 分享过关于shell命令的各种监控方式,其中最难绕过的是内核态的execve监控。...[eauldvj8mz.png] 我的选择是抛弃execve系统调用来执行命令,而是思考自己实现用户态execve,这样就可以彻底摆脱命令监控,如果再延展一下,还会有更深层次的操作。...二.How:如何设计linux elf loader how 用户态execve 是仿照linux内核中execve syscall的原理 ,在应用层实现程序的加载和运行,如果做过windows pe

    2.2K10

    【Android 逆向】ART 函数抽取加壳 ④ ( 对 libc.so#execve 函数进行内联 HOOK 操作 )

    文章目录 一、对 libc.so#execve 函数进行内联 HOOK 操作 在 【Android 逆向】ART 函数抽取加壳 ① ( ART 下的函数抽取恢复时机 | 禁用 dex2oat 机制源码分析...中的 exec_utils.cc#execve 函数 , 首先要查找到 libc 库的基地址 , 然后查找 exec_utils.cc#execve 函数的地址 ; execve 函数 定义在 bionic...#execve 函数 在 " libc.so " 函数库 中的地址 , 第一个参数是 " libc.so " 函数库的基地址 , 第二个参数是函数名称即 " execve " , 该函数的原型如下 :..." registerInlineHook " 函数 , 传入的参数含义如下 : uint32_t target_addr 参数 : execve 函数在 " libc.so " 函数库中的地址 ; uint32..., 传入被 HOOK 的函数地址 , 也就是 exec_utils.cc#execve 函数在 " libc.so " 函数库中的地址 ; enum ele7en_status inlineUnHook

    57720

    反弹shell-逃逸基于execve的命令监控(上)

    但是我们在开发linux程序的时候,执行系统命令,并没有直接使用execve系统调用,这是因为libc/glibc库对execve系统调用封装成了函数,方便我们调用。...因此基于execve的系统命令监控方式,分成了用户态和内核态。用户态通过劫持libc/glibc的exec相关函数来实现,内核态则通过系统自身组件或者劫持execve syscall 来实现。...1.用户态 在libc/glibc中,对execve syscall 进行了一系列的封装,简称exec族函数。exec系列函数调用时,启动新进程,替换掉当前进程。...目前常用的 hook 方法是通过修改syscall table(Linux 系统调用表)来实现,原理是系统在执行系统调用时是通过系统调用号在syscalltable中找到相应的函数进行调用,所以只要将syscalltable...中execve对应的地址改为我们安装的内核模块中的函数地址即可.

    3.1K20

    Linux进程启动过程分析do_execve(可执行程序的加载和运行)---Linux进程的管理与调度(十一)

    ()函数族 exec函数一共有六个,其中execve为内核级系统调用,其他(execl,execle,execlp,execv,execvp)都是调用execve的库函数。...execve加载可执行程序的过程 内核中实际执行execv()或execve()系统调用的程序是do_execve(),这个函数先打开目标映像文件,并从目标文件的头部(第一个字节开始)读入若干(当前Linux...sys_execve, 该函数很快将工作委托给系统无关的do_execve函数 SYSCALL_DEFINE3(execve, const char __user *,...在Linux中提供了一系列的函数,这些函数能用可执行文件所描述的新上下文代替进程的上下文。...这样的函数名以前缀exec开始。所有的exec函数都是调用了execve()系统调用。

    4K31

    无命令反弹shell-逃逸基于execve的命令监控(上)

    但是我们在开发linux程序的时候,执行系统命令,并没有直接使用execve系统调用,这是因为libc/glibc库对execve系统调用封装成了函数,方便我们调用。...因此基于execve的系统命令监控方式,分成了用户态和内核态。用户态通过劫持libc/glibc的exec相关函数来实现,内核态则通过系统自身组件或者劫持execve syscall 来实现。...1.用户态 在libc/glibc中,对execve syscall 进行了一系列的封装,简称exec族函数。exec系列函数调用时,启动新进程,替换掉当前进程。...目前常用的 hook 方法是通过修改syscall table(Linux 系统调用表)来实现,原理是系统在执行系统调用时是通过系统调用号在syscalltable中找到相应的函数进行调用,所以只要将syscalltable...中execve对应的地址改为我们安装的内核模块中的函数地址即可.

    1.6K20

    linux中getchar函数用法,linux getchar函数使用

    1 函数介绍 1) 函数原型 int getchar(void); 2) 函数功能 从stdin中读取一个字符。 3) 返回值 返回读取字符的ASCII值或者EOF字符或者出错值。...4) 头文件 #include 2 函数使用 2.1 getchar函数的特点 Linux下编写的一个例子: #include int main(void) { char ch; int num...重新编译并运行程序,输入字符串:hello[回车] 得第一次运行结果 当程序首次执行到while中的getchar时,getchar函数等待用户的输入,getchar函数一直等待用户输入,当用户按下回车表示用户输入完毕...getchar函数读取,因为while循环的条件已经为假)并得到以下输出界面 String输入字符串的长度为6在一次表明getchar读取了用户输入的回车。...3 额外总结 函数本身的特性与语句条件限制两者各自带来的作用需要分清楚。 Note Over。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    3.1K30

    Linux应用层系统时间写入RTC时钟的方法

    Linux内核版本:linux-3.0.35 开发板:i.MX6S MY-IMX6-EK200 系统:Ubuntu12 前言:之前写过一篇关于如何通过应用层程序读取系统时间的blog,今天再写一篇如何写入并保存...一、写入时间 1、预备知识: a、mktime 头文件:#include 函数:time_t mktime(struct tm *timeptr) 函数说明:mktime...c、execve()应用层调用脚本文件: 头文件:#include 函数:int execve(const char * filename, char * const argv...[], char * const envp[]); 函数说明: execve()用来执行参数filename 字符串所代表的文件路径, 第二个参数系利用数组指针来传递给执行文件, 最后一个参数则为传递给执行文件的新环境变量数组...f、execve测试结果: ?     可以看出execve使用正常,我们将脚本内容改为hwclock –systohc就可以实现将系统时间同步到硬件时间了。

    3.1K00

    linux无文件执行— fexecve 揭秘

    继续2020年的flag,至少每周更一篇文章,今天讲linux无文件执行。...linux无文件执行,首先要提到两个函数:memfd_create 和 fexecve。...第二个函数,fexecve同样的功能很强大,它能使我们执行一个程序(同execve),但是传递给这个函数的是文件描述符,而不是文件的绝对路径,和memfd_create搭配使用非常完美!...但是这里有一个需要注意的地方就是,因为这两个函数相对比较新,memfd_create 是在kernel3.17才被引进来,fexecve是glibc的一个函数,是在版本2.3.2之后才有的, 没有fexecve...fexecve的实现 今天不谈memfd_create,这是linux的新特性,没有什么好玩的,本人对fexecve 的实现很有兴趣,因为fexecve是glibc中的函数,而不是linux的系统调用。

    4.7K40

    Linux Clone函数

    Linux Clone函数 之前某一次有过一次面试,问了内核中是怎么创建命名空间的? 下面就来扒一扒clone的精髓,以及如何通过它创建命名空间。...目录 Linux Clone函数 使用clone创建进程和线程 clone的使用 原型 描述 clone()封装函数 clone3() clone() 和clone3()参数的差异 子进程结束信号 set_tid...创建线程的函数pthread_create内部使用的也是clone函数。...在glibc的/sysdeps/unix/sysv/linux/createthread.c源码中可以看到,创建线程的函数create_thread中使用了clone函数,并指定了相关的flags:...CLONE_VFORK (since Linux 2.2) 如果设置了该标志,则调用进程的执行会被挂起,直到子进程通过execve(2) 或_exit(2) (类似vfork(2))释放了其虚拟内存资源

    6.7K31

    两个主题:躲避execve与分析proc目录

    躲避execve,是在原来的文章的基础上补充一个小思路,分析/proc/目录 是为了下一篇讲解内存中修改函数做准备,要让大家提前知道这回事。...躲避execve的小思路 在之前文章中,我讲解过各种躲避execve监控的方法,如果有朋友没看到过,可以点下面文章链接熟悉一下: 无"命令"反弹shell-逃逸基于execve的命令监控(上) linux...由于execve执行软链接,会自动执行目标文件,不会对软链接进行转换,从而实现了隐藏。 不要以为这就结束了!!!...分析/proc/目录 接下来的文章中,我要讲解一下从linux进程内存中修改函数,需要给大家提前预习一下基础知识。 proc文件系统是一个伪文件系统,它提供内核数据结构的接口。通常安装在/过程。...wchan /proc/[pid]/wchan显示当进程 sleep时, kernel当前运行的函数

    1.6K30

    计算机编程语言的本质

    /demo同时我们能看到启动执行的过程,进程会调用execve系统调用函数帮我装载demo可执行文件,同时调用了write系统调用函数,此函数的功能就是向参数1【标准输出】写入数据"hello:Le-studyg...[] args) { System.out.println("Hello World"); }}同样的,我们也在Linux os 编译一下它,同时观察它调用了Linux os的系统调用函数图片图片...;}编译后文件是ELF文件图片启动示例程序启动示例程序图片同样的也是execve,write系统调用函数。php编程语言在Linux os 的运行//demo.php<?...os 系统调用函数上面我们演示了golang,java,rust,php编程语言【其它编程语言也是一样】,它们启动到运行都是调用了Linux 的系统函数execve,write,【其实linux 的系统调用函数很多...像execve,write系统调用函数linux0.1版本【1991年发布的操作系统】就已经提供了。

    650241

    记一次有趣的挖矿病毒

    还有一点,此病毒全程没有符号表,这给逆向的人员带来很多麻烦,很多函数都需要一点点跟进才行。对于linux病毒,如果单纯使用gdb调试的话,很容易陷入局部,不能整体把控。...方法: 1)将ida dbgsrv目录下的linux_server放在linux虚拟机中,以root形式运行linux_server,如下图。 ?...这里有一点需要注意的是病毒执行sys_execve的方式并不是直接调用函数sys_execve,而是采用了int 0x80的方式。...Linux系统提供了200多个系统调用,通过汇编指令 int 0x80 实现,用系统调用号来区分入口函数。为了对避免毒软件对敏感函数的纠察,病毒正好利用了此特性,通过两个步骤来实现所要执行的函数过程。...比如需要执行sys_execve。 1)首先查看资料得知sys_execve的序号是11。接着病毒将此序号传入代码中等待。

    1.3K20
    领券