对于诸多逆向爱好者来说,给一个app脱壳是一项必做的事情。基于安全性的考虑,苹果对上架到appstore的应用都会进行加密处理,所以如果直接逆向一个从appstore下载的应用程序时,所能看到的“源代码”将非常的晦涩难懂。为了能看懂应用程序的“源代码”,就必须对应用程序进行解密,也就是所谓的脱壳。脱壳后的目的是可以分析应用程序的一些技术实现原理,或者利用一些漏洞进行攻击和测试。
Sunday 算法是一种字符串搜索算法,由Daniel M.Sunday于1990年开发,该算法用于在较长的字符串中查找子字符串的位置。算法通过将要搜索的模式的字符与要搜索的字符串的字符进行比较,从模式的最左侧位置开始。如果发现不匹配,则算法将模式向右滑动一定数量的位置。这个数字是由当前文本中当前模式位置的最右侧字符确定的。相比于暴力方法,该算法被认为更加高效。
MDL内存读写是一种通过创建MDL结构体来实现跨进程内存读写的方式。在Windows操作系统中,每个进程都有自己独立的虚拟地址空间,不同进程之间的内存空间是隔离的。因此,要在一个进程中读取或写入另一个进程的内存数据,需要先将目标进程的物理内存映射到当前进程的虚拟地址空间中,然后才能进行内存读写操作。
最近开始学习Python自动化运维,特记下笔记。 学习中使用的系统是Kali Linux2017.2,Python版本为2.7.14+ 因为在KALI里面没有自带psutil模块,需要使用pip进行安装
lsass是windows中处理本地安全和登录策略的重要进程,几乎所有的windows身份认证程序都离不开lsass进程。因此在lsass的内存中会保存用户相关的凭证。它是windows主机中认证的重要组成部分,因此获取lsass内存也是MITRE ATT&CK框架中Credential Access战术下的重要技术点。
传入的第一个参数可以是 PTRACE_PEEKTEXT / PTRACE_PEEKDATA / PTRACE_PEEKUSER , 这三个参数效果相同 ;
目前市场上的虚拟化技术种类很多,例如moby(docker)、LXC、RKT等等。在带来方便应用部署和资源充分利用的好处的同时,如何监控相应Container及其内部应用进程成为运维人员不可避免遇到的新情况。UAV.Container从虚拟化技术的基础原理和Linux操作系统的内核特性出发,得到Container容器和内部进程的各维度监控数据,使无论是虚拟机或物理机运维人员,还是业务运维人员角度,都能得到合适的监控维度。
向进程内存写出数据时 , 每次最多只能写出 4 字节数据 , 先根据读取的大小 , 计算出读取次数 ,
返回此进程是否正在运行。它还检查PID是否已被另一个进程重用,在这种情况下返回False。
CR3是一种控制寄存器,它是CPU中的一个专用寄存器,用于存储当前进程的页目录表的物理地址。在x86体系结构中,虚拟地址的翻译过程需要借助页表来完成。页表是由页目录表和页表组成的,页目录表存储了页表的物理地址,而页表存储了实际的物理页框地址。因此,页目录表的物理地址是虚拟地址翻译的关键之一。
进程的内存空间中存储的域,本地用户名和密码称为LSASS(本地安全机构子系统服务)。如果在目标上具有一定的权限,则可以授予用户访问LSASS的权限,并且可以提取其数据以进行横向移动和特权升级。
SO 注入的前提必须有 root 权限 , 有了 root 权限后 , 才能调用 ptrace 相关函数 ;
IO类型 同步与异步(synchronous,asynchronous):关注消息通知机制 同步: 进程发出系统调用之后,不会立即有返回信息,但是一旦有返回信息,则一定是最终结果. 异步: 进程发出系统调用之后,会有立即返回结果,但不是最终的结果,当内核处理完成之后,内核通过通知机制通知进程,该系统调用已完成. 阻塞与非阻塞(blocking,nonblocking):关注系统调用完成时,调用者的状态 阻塞: 调用者在返回结果之前,一直处于被挂起状态,直到有调用结果返回时才能继续工作. 非阻塞: 调用者在调
一、1.windows系统为每个程序分配4GB的虚拟内存,虚拟内存由“页文件”实现。
性能压测场景 1、本次需要对查询接口进行100、200、500并发逐渐递增方式进行性能压测 2、在压测过程中,100、200并发响应时间、吞吐量、报错率为0,满足性能需求 3、当并发用户为500时,报错率达到22%,此时经过监控服务器,发现服务器cpu、内存、硬盘、网络、应用服务gc情况未出现异常,满足指标 4、经过排查,本次应用服务使用的是Dubbo服务,通过修改jmeter断言,返回响应结果提示threadpool is exhausted ,detail msg:Thread poo
Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多。所以,监控 Redis 的内存消耗并了解 Redis 内存模型对高效并长期稳定使用 Redis 至关重要。
可以看到,当前节点内存碎片率为226893824/209522728≈1.08,使用的内存分配器是jemalloc。
内存映射 概念 : " 内存映射 “ 就是在 进程的 ” 用户虚拟地址空间 " 中 , 创建一个 映射 , " 内存映射 " 有
Redis是内存数据库,是把数据存储在内存中的,但是内存中的数据不是持久的,如果想要做到持久,那么就需要让redis将数据存储到硬盘上。
在Windows操作系统中,每个进程的虚拟地址空间都被划分为若干内存块,每个内存块都具有一些属性,如内存大小、保护模式、类型等。这些属性可以通过VirtualQueryEx函数查询得到。
谈到让Go程序监控自己进程的资源使用情况,那么就让我们先来谈一谈有哪些指标是需要监控的,一般谈论进程的指标最常见的就是进程的内存占用率、CPU占用率、创建的线程数。因为Go语言又在线程之上自己维护了Goroutine,所以针对Go进程的资源指标还需要加一个创建的Goroutine数量。
目前大部分的操作系统和应用程序并不需要16EB( 2^64 )如此巨大的地址空间, 实现64位长的地址只会增加系统的复杂度和地址转换的成本, 带不来任何好处. 所以目前的x86-64架构CPU都遵循AMD的Canonical form, 即只有虚拟地址的最低48位才会在地址转换时被使用, 且任何虚拟地址的48位至63位必须与47位一致(sign extension). 也就是说, 总的虚拟地址空间为256TB( 2^48 )
分布式缓存首先通过上节课的学习,现在我们已经知道了,服务端缓存可以分为“进程内缓存”和“分布式缓存”两大类。相比缓存数据在进程内存中读写的速度,一旦涉及到了网络访问,那么由网络传输、数据复制、序列化和反序列化等操作所导致的延迟,就要比内存访问高得多。
从 Linux 内核 2.6.25 开始,CGroup 支持对进程内存的隔离和限制,这也是 Docker 等容器技术的底层支撑。
一般 Unix 系统中,用户态的程序通过malloc()调用申请内存。如果返回值是 NULL, 说明此时操作系统没有空闲内存。这种情况下,用户程序可以选择直接退出并打印异常信息或尝试进行 GC 回收内存。然而 Linux 系统总会先满足用户程序malloc请求,并分配一片虚拟内存地址。只有在程序第一次touch到这片内存时,操作系统才会分配物理内存给进程。具体我们可以看下如下demo:
自从写 Flink 系列文章,收到了太多读者的私信,希望我不断更新完善 Flink 专栏,为此,土哥还专门创建了一个文档,用来记录粉丝和读者在使用 Flink 组件时遇到的典型问题。
在服务器运维过程中,经常需要对服务器的各种资源进行监控,例如:CPU的负载监控,磁盘的使用率监控,进程数目监控等等,以在系统出现异常时及时报警,通知系统管理员。本文介绍在Linux系统下几种常见的监控需求及其shell脚本的编写。
在《小许code:Go内存管理和分配策略》这篇分享中我们了解到Go是怎么对内存进行管理和分配的,那么用户的程序进程在linux系统中的内存布局是什么样的呢?我们先了解一下基础知识,然后再看Go的内存对齐。
Stack - 所有函数的 local variables, arguments 和 return address 的存放内存区域
-----------------------------------------------------------------
在维护服务器的时候每一次遇到问题都是想不起来命令是啥,真的想有一个服务器监控软件来整合所有的指令,但是目前除了IIS7服务器监控工具,其他的都很难做好。在这里记录一下方便使用的时候找得到。
在前的博客 【Android 逆向】逆向修改游戏应用 ( 分析应用结构 | 定位动态库位置 | 定位动态库中的修改点 | 修改动态库 | 重打包 ) 中 , 已经分析过该动态库 ;
以我的理解,系统调用,即从调用操作系统提供的3环API开始,到进0环,再到返回结果到3环的全过程。
在Win10 x64环境下替换正常的进程,是一个比较高超的技术。使用该技术,可以内存执行病毒、木马。在文件层面实现免杀。可以把一个木马使用DES加密,放在资源里。执行时,从资源里释放出来,在内存里进行DES解密,注入到一个系统的进程中。
📷 📷 📷 .版本 2 .子程序 注入DLL, 整数型, 公开, 成功返回DLL的模块句柄,失败或已注入返回0。 .参数 进程句柄, 整数型, , 句柄必须拥有对被注入进程的完全操作权限。注入后如果没有其他用处可以关闭该句柄。 .参数 DLL数据, 字节集 .如果真 (是否已注入 () 或 DLL数据 = { } 或 进程句柄 = 0) 返回 (0) .如果真结束 ' 将内存中的DLL写到目标进程 DataAddr = 写入内存数据_ (进程句柄, DLL数据) .如果真 (DataAddr
执行 ps -ef 命令 , 可以查看当前所有进程 , 这些进程对应的 PID 就是上述 /proc/ 目录下的所有整数对应的文件 ;
在公司内部,我负责帮助研究院的小伙伴搭建机器学习web服务,研究院的小伙伴提供一个机器学习本地接口,我负责提供一个对外服务的HTTP接口。
*本文原创作者:gaearrow,本文属FreeBuf原创奖励计划,未经许可禁止转载 。 共享库基础知识 程序由源代码变成可执行文件,一般可以分解为四个步骤,分别是预处理(Prepressing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。 预处理过程主要处理源代码中以“#”开始的预编译指令;编译过程把预处理完成的文件进行词法、语法、语义等分析并产生相应的汇编代码文件;汇编过程将汇编代码文件翻译成机器可以执行的目标文件;链接过程将汇编生成的目标文件集合相连接并生成
raft作为一个强一致性的集群共识算法,可以保证当集群多数节点存活时服务可用,但只能有一个领导者,有比较大的局限性。 若是使用同集群多实例方案,所有实例同生共死,当集群非多数节点存活时,所有实例均无法对外提供服务。
GT3.1的版本更新,带来了全面的维度分析。那么这些功能是如何实现的呢?本章GT君将详细的从CUP维度、内存维度、流量维度、流畅度维度为大家讲解这些功能的作用和实现原理。
Redis主要包含2中持久化方式,即RDB和AOF,本文主要介绍RDB,AOF详见Redis持久化AOF (opens new window)
说明 由于 PHP 语言不支持多线程,因此 Swoole 使用多进程模式,在多进程模式下存在进程内存隔离,在工作进程内修改 global 全局变量和超全局变量时,在其他进程是无效的。 对应的解决方案有: 1. 使用Redis数据库、关系型数据库Mysql 2. 内存文件/dev/shm 首先数据库的操作都牵扯到IOD等待时间,因此推荐使用Table
领取专属 10元无门槛券
手把手带您无忧上云