ptrace函数深入分析】的更多相关文章

ptrace函数:进程跟踪. 形式:#include<sys/ptrace.h> Int ptrace(int request,int pid,int addr,int data); 概述: 父进程控制子进程运行,检查和改变它的核心Image.Ptrace主要用来实现断点调试.当进程被中止,通知父进程,进程的内存空间可以被读写,父进程可以选择是子进程继续执行,还是中止. 根据ptrace的函数原形 int ptrace(int request, int pid, int addr, int d…
认识ptrace函数 这是man对于ptrace这个系统调用的解释 http://man7.org/linux/man-pages/man2/ptrace.2.html #include <sys/ptrace.h> long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data); ptrace系统调用提供了一种方法,这个方法可以让一个进程监视.控制另一个进程的执行,并且可以查看和更改被追踪进程的内存和…
Hook ptrace 调试加入了ptrace函数的程序 #import <substrate.h> #if !defined(PT_DENY_ATTACH)#define PT_DENY_ATTACH 31#endif static int (*_ptraceHook)(int request, pid_t pid, caddr_t addr, int data); static int $ptraceHook(int request, pid_t pid, caddr_t addr, in…
例如: #include <stdio.h> #include <sys/ptrace.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <linux/user.h> /* For constants ORIG_EAX etc */ int main() { pid_t child; long orig_eax; child = f…
Synopsis #include <sys/ptrace.h> long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void*data); Description The ptrace() system call provides a means bywhich one process (the "tracer") may observe and control theexecution of…
C/C++学习笔记1 - 深入了解scanf()/getchar()和gets()等函数 ---------------------------------------------------- | 问题描述一:(分析scanf()和getchar()读取字符)   | ----------------------------------------------------     scanf(), getchar()等都是标准输入函数,一般人都会觉得这几个函数非常简单,没什么特殊的.但是有时候…
函数,我之前也提到过一点点内容.其实函数是很好理解的,但是写起来又十分麻烦. 一.     函数引入 我们知道,C源程序是由函数组成的.请看下面的简单函数例子 #include <stdio.h> main() { printf(“Hello World!”); } 在这个C程序中,main函数是一切程序的主函数,程序必须是从main函数开始执行,到main函数结束. 函数体里面只有一个输出语句,而这个输出语句也是调用了一个printf库函数. 改为用户自定义函数形式 第1行 第2行 第3行…
第一篇 linux ptrace I 在之前的文章中我们用ptrace函数实现了查看系统调用参数的功能.在这篇文章中,我们会用ptrace函数实现设置断点,跟代码注入功能. 参考资料 Playing with ptrace, Part I Playing with ptrace, Part II 英文好的推荐直接看老外的文章.但是其代码是运行在x86系统上的,本文中将其移植到了x86_64系统. 进程附加 在之前的文章中,我们都是trace自己程序fork出来的子进程,现在我们来看一下如何tra…
这几天通过<游戏安全--手游安全技术入门这本书>了解到linux系统中ptrace()这个函数可以实现外挂功能,于是在ubuntu 16.04 x86_64系统上对这个函数进行了学习. 参考资料: Playing with ptrace, Part I Playing with ptrace, Part II 这两篇文章里的代码都是在x86平台上运行的,本文中将其移植到了x86_64平台. ptrace提供让一个进程来控制另一个进程的能力,包括检测,修改被控制进程的代码,数据,寄存器,进而实现…
转:问题描述一:(分析scanf()和getchar()读取字符) scanf(), getchar()等都是标准输入函数,一般人都会觉得这几个函数非常简单,没什么特殊的.但是有时候却就是因为使用这些函数除了问题,却找不出其中的原因.下面先看一个很简单的程序:程序1:    #include <stdio.h>    int main()    {char ch1, ch2;scanf("%c", &ch1); scanf("%c", &…
近日,百度安全实验室发现了一款"聊天剽窃手"病毒.该病毒可以通过ptrace方式注入恶意代码至QQ.微信程序进程.恶意代码可以实时监控手机QQ.微信的聊天内容及联系人信息. 该病毒是眼下发现的首款通过ptrace进程注入方式进行恶意窃取私密资料的病毒. 简单介绍 该病毒主要是通过ptrace注入QQ和微信进程进行信息窃取的,主程序调用assets中的inject_appso,libcall.so以及conn.jar联合进行"作案".在conn.jar中获取聊天信息/…
之前介绍了Android平台上3种常见的hook方法,而hook的前提是进程注入,通过进程注入我们可以将模块或代码注入到目标进程中以便对其空间内的数据进行操作,本篇文章介绍基于ptrace函数的注入技术. 对ptrace函数不熟悉的朋友可以参考我之前写的linux ptrace I和linux ptrace II,跟hook相比,在熟悉了ptrace函数的使用方式后注入过程并不复杂,但在细节的处理上要多加留意,稍有不慎就会造成目标进程发生崩溃. 注入流程如下: 附加目标进程 保存寄存器环境 远程…
译者序:在开发Hust Online Judge的过程中,查阅了不少资料,关于调试器技术的资料在网上是很少,即便是UNIX编程巨著<UNIX环境高级编程>中,相关内容也不多,直到我在 http://www.linuxjournal.com 上找到这篇文章,如获至宝,特翻译之,作为鄙人翻译技术文档的第一次尝试,必定会有不少蹩脚之处,各位就将就一下吧,欢迎大力拍砖. 你想过怎么实现对系统调用的拦截吗?你尝试过通过改变系统调用的参数来愚弄你的系统kernel吗?你想过调试器是如何使运行中的进程暂停并…
转:http://www.cnblogs.com/FCWORLD/archive/2010/12/04/1896511.html 转:问题描述一:(分析scanf()和getchar()读取字符) scanf(), getchar()等都是标准输入函数,一般人都会觉得这几个函数非常简单,没什么特殊的.但是有时候却就是因为使用这些函数除了问题,却找不出其中的原因.下面先看一个很简单的程序:程序1:    #include <stdio.h>    int main()    {char ch1,…
下面是转帖的内容,写的很详细.但是不同的linux发行版中头文件的路径和名称并不相同.如在某些发行版中<linux/user.h>就不存在,其中定义的变量出现在<asm/ptrace-abi.h>和<sys/user.h>中. ================================================================================================== by Pradeep Padala Create…
转 https://blog.csdn.net/u012417380/article/details/60470075 Linux Ptrace 详解 2017年03月05日 18:59:58 阅读数:6331 一.系统调用 操作系统提供一系列系统调用函数来为应用程序提供服务.关于系统调用的详细相关知识,可以查看<<程序员的自我修养>第十二章. 对于x86操作系统来说,用中断命令“int 0x80”来进行系统调用,系统调用前,需要将系统调用号放入到%EAX寄存器中,将系统的参数依次放入到…
转自:https://www.cnblogs.com/mmmmar/p/6040325.html 这几天通过<游戏安全——手游安全技术入门这本书>了解到linux系统中ptrace()这个函数可以实现外挂功能,于是在ubuntu 16.04 x86_64系统上对这个函数进行了学习. 参考资料: Playing with ptrace, Part I Playing with ptrace, Part II 这两篇文章里的代码都是在x86平台上运行的,本文中将其移植到了x86_64平台. ptr…
ptrace提供了一种使父进程得以监视和控制其它进程的方式,它还能够改变子进程中的寄存器和内核映像,因而可以实现断点调试和系统调用的跟踪.学习linux的ptrace是为学习android adbi框架和古河的libinject做基础. ptrace有四个参数:long ptrace(enum __ptrace_request request,pid_t pid,void *addr,void *data);第一个参数是重点,可设如下值: PTRACE_ME ptrace(PTRACE_ME,0…
iOS项目分析及优化  来源:吴白的简书   从代码看一个程序员的笔力 从代码的整洁度上就可以看出一个程序员的实力,规范其实就是让你养成一种良好习惯的标杆,在此面前我们应该顺从.本篇我们以OC为例,统计了一些在编写程序中需要注意的事项,共有20条,当然还有更多的规范,此处只是做个示例. 单页代码最好控制在800行以内,每个方法最好不要超过100行,过多建议对代码进行重构 相同的逻辑方法定义避免在多个地方出现,尽量将公用的类.方法抽取出来 删除未被使用的代码,不要大片注释未被使用的代码,确定代码不…
hook钩子: 使用技术手段在运行时动态的将额外代码依附现进程,从而实现替换现有处理逻辑或插入额外功能的目的. 它的技术实现要点有两个: 1)如何注入代码(如何将额外代码依附于现有代码中). 2)如何确定目标函数的地址及替换. 要素: 1)现有功能: 2)目标功能: 3)替换技术. http://www.epubit.com.cn/book/onlinechapter/33620?utm_source=tuicool&utm_medium=referral 8.1 什么是Hook技术 还没有接触…
  问题描述一:(分析scanf()和getchar()读取字符) scanf(), getchar()等都是标准输入函数,一般人都会觉得这几个函数非常简单,没什么特殊的.但是有时候却就是因为使用这些函数除了问题,却找不出其中的原因.下面先看一个很简单的程序:程序1:    #include <stdio.h>    int main()    {char ch1, ch2;scanf("%c", &ch1); scanf("%c", &…
一说明 Android系统最常见也是初学者最难搞明白的就是Binder了,很多很多的Service就是通过Binder机制来和客户端通讯交互的.所以搞明白Binder的话,在很大程度上就能理解程序运行的流程.我们这里将以MediaService的例子来分析Binder的使用:l        ServiceManager,这是Android OS的整个服务的管理程序l        MediaService,这个程序里边注册了提供媒体播放的服务程序MediaPlayerService,我们最后只…
Android下的注入的效果是类似于Windows下的dll注入,关于Windows下面的注入可以参考这篇文章Windows注入术.而Android一般处理器是arm架构,内核是基于linux,因此进程间是弱相互作用,不存在Windows下类似于CreateRemoteThread 作用的函数,可以在其他进程空间内创建线程来加载我们的.so文件,所以我们所采用的方法就是依赖于linux下的ptrace()函数,将目标进程作为我们进程的子进程操作目标进程的寄存器和内存来运行我们加载.so文件的代码…
转自: http://www.spongeliu.com/linux/howgdbwork/ 还是面某M的时候,面试官问我:“用过gdb么?” 答:“用过,调了两年bug了”.“那好,给我解释下gdb是怎么工作的?或者说跟内核什么地方有关系?”. 是阿,gdb凭什么可以调试一个程序?凭什么能够接管一个程序的运行?我以前也想过这样的问题,但是后来居然忘记去查看了.我想到了我们的二进制翻译器,想到了intel的pin,Dynamo.这些都是将翻译后的代码放到codecache中去运行,然后接管整个程…
问题描述: 最近将IOS书城容器化,切换流量后.正常的业务测试了一般,都没发现问题.线上的错误监控系统也没有报警,以为迁移工作又告一段落了,暗暗的松了一口气.紧接着,报警邮件来了,查看发现是一个苹果支付相关接口调用的curl错误,错误码为"56",错误描述为:“Failure with receiving network data”接收网络数据失败. 机器 : 192.168.1.1当前URL : /xxx/recharge/apple?xxxxxxxxxxxxx接口URL : htt…
在逆向过程中经常会遇到反调试,如下段代码: 0008bd8e movs r1, #0xa ; argument #2 for method imp___symbolstub1__dlopen 0008bd90 blx imp___symbolstub1__dlopen 0008bd94 movw r1, #0xe103 0008bd98 mov r6, r0 0008bd9a movt r1, #0x10 ; 0x10e103 (sub_10dfd8 + 0x12b) 0008bd9e add…
以前对Android so的注入只是通过现有的框架,并没有去研究so注入原理,趁现在有时间正好拿出来研究一下. 首先来看注入流程.Android so的注入流程如下: attach到远程进程 -> 保存寄存器环境 -> 获取目标程序的mmap, dlopen, dlsym, dlclose 地址 -> 远程调用mmap函数申请内存空间用来保存参数信息 -> 向远程进程内存空间写入加载模块名和调用函数->远程调用dlopen函数加载so文件 -> 远程调用dlsym函数获…
本教程所用Android Studio测试项目已上传:https://github.com/PrettyUp/SecTest 一.混淆 对于很多人而言是因为java才接触到“混淆”这个词,由于在前移动互联网时代在java程序中“混淆”也只是针对java代码,所以混淆基本就和对java源代码进行混淆等价. 但说到混淆的本质,不过就是将变量名.函数名由有助于开发维护人员理解其用途的名称(如my_name,get_key)改用a,b,c,d这种简短无意义的词去替换.从这个思路出发,资源其实也是可以混淆…
adbi(The Android Dynamic Binary Instrumentation Toolkit)是一个Android平台通用hook框架,基于动态库注入与inline hook技术实现.该框架由两个主要模块构成,1.hijack负责将动态库注入到目标进程:2.libbase提供动态库本身,它实现了通用的hook功能. 而example则是一个使用adbi进行epoll_wait hook的demo. zangzy@android-PC:~/Android/adbi-master$…
原理分析 ADBI是一个著名的安卓平台hook框架,基于 动态库注入 与 inline hook 技术实现.该框架主要由2个模块构成:1)hijack负责将so注入到目标进程空间,2)libbase是注入的so本身,提供了inline hook能力. 源码目录中的example则是一个使用ADBI进行hook epoll_wait的示例. hijack hijack实现动态库注入功能,通过在目标进程插入dlopen()调用序列,加载指定so文件.要实现这个功能,主要做两件事情: 获得目标进程中d…