客户需求 客户希望通过spark来分析二进制文件中0和1的数量以及占比。如果要分析的是目录,则针对目录下的每个文件单独进行分析。 分析后的结果保存与被分析文件同名的日志文件中,内容包括0和1字符的数量与占比。 要求:如果值换算为二进制不足八位,则需要在左侧填充0。 可以在linux下查看二进制文件的内容。 命令: xxd –b –c 1 filename 命令参数-c 1是显示1列1个字符,-b是显示二进制。 字符编码的坑 在提示信息以及最后分析的结果中都包含了中文。 所以这里要带名参数: sc = SparkContext(conf = conf) sys.argv的坑 我需要在使用spark-submit命令执行python脚本文件时,传入我需要分析的文件路径。
分析恶意软件的第一步是收集二进制程序在主机上执行的行为事件,研究人员根据这些行为大体形成一个思路来描述恶意软件的功能。 静态分析方法—字符串分析 从二进制文件中提取可读的Ascii和Unicode字符。但并不是所有找到的字符串都会被程序使用,黑客会使用虚假字符串来扰乱取证,研究人员需要辨明那些是有用的字符串。 目前该程序定义了以下类型: MSDOS可执行文件MS-DOS PE可执行文件Windows ELF可执行文件Linux MACH可执行文件Mac OS 文本文件 二进制文件 静态分析方法—PE结构工具 动态分析方法—创建规则(Misp & Yara) Yara规则基于文本或二进制模式创建。每个规则包含一组字符串描述和一个确逻辑表达式。 恶意二进制软件分析的结果可以作为安全事件进一步调查取证的输入物,也可以结合自身的沙箱、网络防火墙等等,补充其薄弱的规则,以防止未来发生相同或类似的攻击。
题目 给定两个二进制字符串,返回他们的和(用二进制表示)。 样例 a =11 b =1 返回100 分析 二进制进行求和,思想较为简单,就是需要搞清楚进位之间的关系。
早期用在二进制中,现在被保护的应用面更广泛了,比如现在还有 JSVMP 等。不过,本篇文章介绍的是二进制相关的 VM。 那么这种 VM 的软件保护机制是什么呢? 0x01:初识某二进制文件 拿到的样本是前几年比赛的一个二进制文件。这种题目一般就是要求输入一个正确的 “值”,这个 “值” 被称作 “Flag”。 那么就直接分析吧。 0x03:解密 loc_80487A8 解密它有两种方法,第一种方法是动态调试,当这块内存被解密以后,我们把解密的代码拿过来进行分析;第二种方法是写脚本让它执行帮我们还原。 RunVm 了,只有分析它,才能得到我们想要的值。
本篇是关于这个话题的最后一篇文章了,前两篇的地址如下: 某二进制 VM 逆向分析(一) 某二进制 VM 逆向分析(二) 0x01:上次回顾 在前面的文章中,找到了 RunVm 的函数,有些时候也叫做 Dispatch 因此,我们接下来的工作首先要把没有分析的分支分析一下,然后再继续。 0x02:继续分析分支 所谓继续分析分支就是输出后续要执行的分支,按照上图,我们把相关的分支进行输出即可。 输出以后编译运行,上次分析到了偏移 284 的位置,这次从偏移 289 的位置查看,结果如下: 289: =>c1: r1 = (unsigned __int8)ReadBuf[32]; // (r1 的正确字符后,继续运行我们的模拟执行,执行情况如下: 可以看到,这次去了 36 ~ 39 四个字符,但是同样是将 4 个 1 字节拼成了 1 个 4 字节,但是后续的算法和之前的是不一样的,这里补齐代码后进行分析 那么,最后,我们要找的字符串就是: 16584abc45baff901c59dde3b1bb6701a254b06cdc23 整个分析完成了!
本文带你跨进计算机病毒的大门 0x00工具 查壳:PEID、ExeInfo PE 动态分析:OllyDbg 静态反汇编分析:IDA Pro 行为监控:ProcessMonitor PCHunter 、火绒剑 0x02行为分析 使用Process Monitor来进行行为检测: 1. 在后面的分析中,我们会详细分析,这里我们不做赘述) ? 12.先对sub_40A7EC :CreateInfectThread进行分析所建线程为:offset sub_40A6C8 ? 到这里整个分析就结束了 下面是部分源代码 ? 0x06结束语 熊猫烧香病毒其实没有那么强,只不过病毒封装方面强一些。
书接上回(上篇文章:某二进制 VM 逆向分析(一)),上回已经还原了 main 函数,也知道我们关键要分析 VM 的执行流程,才能找我们想要的 Flag。 0x01:上次回顾 上回通过分析,知道了关键的代码被加密,通过 chatgpt 写的脚本完成了 smc 的解密功能。 InitIO(); pVm = (VM *)VmInit(); pVm->ip = &opcode; smc(); RunVm(pVm); return 0; } 我们的关键是,分析 静态分析肯定是没有办法搞了,动态调试搞清楚流程也费劲,写代码模拟执行吧。
实例分析 下面是通过websocket服务器返回的数据信息 ? 我们可以用wireshark抓取TCP包观察一下数据 ? 抓取的二进制流是通过十六进制解析的,下面是具体的解包过程: 81(16进制)= 10000001(二进制)=> FIN(0) + RSV1(0) + RSV2(0) + RSV3(0) + Opcode 30(16进制)= 0110000(二进制)=> MASK(0) + Payload length(0x30)数据长度48bytes。 3c到6f 是具体的 text数据内容。(48bytes)
在检测目标中,目前主要包含两部分,一是源码、二是二进制文件。源码面对的主要场景为开发完成后对源码进行扫描,二进制文件为采购、引入的软件分析是否有安全危险。 二. 因此,由上所述,在编译过程中会损失大量信息,并且由于编译过程的区别,导致编译的二进制文件各不相同,导致基于源码的组成成分分析方法完全不适用于二进制文件。 在二进制软件成分分析中一般分析是使用反汇编工具将二进制代码反汇编成汇编代码进行代码相似性检测。有时候会进一步使用IDA把汇编代码转换为伪代码形式。 二进制组成成分分析方法概述 二进制组成成分分析,是在二进制文件中识别可能存在的代码复制、代码克隆、或者其他类型的代码重用情况,从而帮助发现潜在的安全风险或者违反知识产权的行为。 目前,软件供应链中对软件组成成分的分析方法仍然局限于分析和识别二进制文件安装后释放的动态链接库等文件的名称和哈希值等简单特征。
Blob(二进制大对象)方式效果分析 HTMLCanvasElement.toBlob() 方法创造Blob对象,用以展示canvas上的图片;这个图片文件可以被缓存或保存到本地,由用户代理端自行决定。
0000 0000 0000 0000 符号:第1位:0表示正数,1表示负数; 阶码:第2-9位:100 0000 0,即1000 0000为128,所以指数为128-127=1;注意计算方法中必须把从二进制得到的十进制数减 127 尾数:第10-32位:100 1000 0000 0000 0000 0000,所以尾数为1.1001,注意计算方法为把10-23位的二进制后面多余的0全部去掉,剩下的就是小数位了,此处为1001 ,浮点数有效位就出来了; 计算值:把尾数得出的二进制乘阶码即可得出最终的浮点值,此处为1.1001(尾数)乘以2的1(阶码)次方,所以最后的浮点值为11.001=1*2^1+1*2^0+0*2^(-1) java语言中输出float类型数据的二进制代码是: float f = 3.125f; System.out.println(Integer.toBinaryString(Float.floatToIntBits (f))); double类型在计算机中占64位 其中1位符号位,阶码11位,尾数52位 double的计算方法只是在计算阶码的时候减去1023,其他一样 java语言中输出double类型的二进制数据的代码为
本文将通过在虚拟环境中使用冰蝎,通过wireshark抓取冰蝎通信流量,结合平时在授权渗透中使用冰蝎马经验分析并总结特征。 JSP冰蝎马,此处不作冰蝎马分析。 ? PHP冰蝎马 ? 通信流量分析 在本地搭建环境抓取冰蝎流量来进行简单的特征分析,主要测试冰蝎最初版本和最新版本,v1.0和v2.0.1,提取通信关键特征。 从流量包中可以清楚看到请求头中携带的User-Agent: Java/1.8.0_181为客户端Java环境的版本且会随着客户端的Java环境而变化,Content-Type: application/octet-stream表示以二进制流传输数据 ,响应体的数据被加密,无法看出响应的内容是什么,Content-Type: application/octet-stream代表二进制流也不能作为判定的依据,暂时无法提取的有效的特征,但是注意到冰蝎在建立之前会有一个 本次仅从v1.0和v2.0.1中去分析,实际在目前的版本中都存在获取密钥这个请求,由于篇幅有限,只举例说明了这个两个版本。
系统概述 Viper2 是一个用于二进制文件(病毒)分析与管理的框架,提供了文件存储、会话管理、项目管理、模块加载、文件标签、文件搜索等功能。 该系统通过命令行交互的方式,允许用户对二进制文件进行深入分析,并支持通过插件模块扩展功能。 __modules: dict = {} 应用场景 Viper2 适用于以下场景: 恶意软件分析:通过存储和分析二进制文件(病毒),安全研究人员可以快速识别恶意软件的特征和行为。 系统总结 Viper2 是一个功能强大的二进制文件(病毒)分析与管理框架,具有灵活的模块化设计和丰富的命令行交互功能。通过数据库和文件存储的结合,系统能够高效地管理大量文件,并支持复杂的文件关系管理。 其动态模块加载机制使得系统具有高度的可扩展性,适用于多种二进制文件(病毒)分析场景。 github链接地址:https://github.com/viper-framework/viper2.git
比赛和有合法授权的渗透测试,请勿用于其他非法用途,如用作其他非法用途与本文作者无关 逆向工程定义 逆向工程(reverse engineering),又称反向工程,是一种技术过程,即对一项目标产品进行逆向分析及研究 ,从而演绎并得出该产品的处理流程、组织结构、功能性能规格等设计要素,以制作出功能相近,但又不完全一样的产品 逆向工程源于商业及军事领域中的硬件分析 其主要目的是,在无法轻易获得必要的生产信息下,直接从成品的分析 分析恶意代码 了解软件的技术细节 破解要收费软件(嘿嘿) 加固软件安全(和渗透测试差不多一个类型) 漏洞分析 等等 逆向工程必备技能 1. 上面刚刚那段汇编代码,这样看肯定很难看是不,我们可以把他转换成C语言 这样就好分析多了 尤其是在代码量极大的时候 把汇编转换成等价的C语言代码,是会节省我们很多的分析时间的(不要跟我说有插件) 如果你能独立完成汇编到 ,出现的结构体什么的,用汇编分析那就是一连串的地址变地址 如果写成C语言的形式 那就是看上去清爽多了 3.
题目 计算在一个 32 位的整数的二进制表式中有多少个 1. 样例 给定32(100000),返回1 给定5(101),返回2 给定1023(111111111),返回9 分析 方法一 普通法 最容易想到的方法,通过移位加计数,一个个计算统计1的个数 public 如果n的二进制表示中有k个1,那么这个方法只需要循环k次即可。其原理是不断清除n的二进制表示中最右边的1,同时累加计数器,直至n为0 为什么n &= (n – 1)能清除最右边的1呢? 因为从二进制的角度讲,n相当于在n - 1的最低位加上1。 举个例子,8(1000)= 7(0111)+ 1(0001),所以8 & 7 = (1000)&(0111)= 0(0000),清除了8最右边的1(其实就是最高位的1,因为8的二进制中只有一个1)。
为了识别潜在的安全问题,开发者需要使用专业工具对二进制文件进行深入分析。 BinSkim 是由微软开源的一款静态分析工具,主要用于扫描 Windows 的 PE 文件(如 DLL 和 EXE 文件),以识别以下常见的安全问题: 过时的编译器工具集:二进制文件应尽可能使用最新的编译器工具集 不安全的编译设置:二进制文件应采用最安全的编译设置,以启用操作系统提供的安全功能,并最大化编译器错误和警告报告。 签名问题:已签名的二进制文件应使用强加密算法进行签名。 总结 BinSkim 是一款功能强大的二进制分析工具,通过静态扫描帮助开发者发现潜在的安全问题。从过时的编译器工具集到不安全的编译设置,再到签名问题,BinSkim 覆盖了多种关键场景。 如果你正在寻找一款高效且专业的二进制静态分析工具,不妨试试 BinSkim!立即前往 GitHub 或 NuGet 下载并体验吧!
重要声明 该培训中提及的技术只适用于合法CTF比赛和有合法授权的渗透测试,请勿用于其他非法用途,如用作其他非法用途与本文作者无关 今天我们来笼统的说一下二进制逆向分析的工具 工具 1. html 说这个工具之前呢先来说说做恶意代码分析的一些基本常识 第一,就是不要在物理机上分析恶意代码,除非你指定了一台专用的物理机专门用于分析 第二,就是虚拟机在运行恶意代码之前要做好备份和快照 第三 (eax, 100000h, 1, 0, 3, 0, 0) 这样,当然还有其他很多有用的丰富的功能 这里就不一一列举了 那说到了静态分析神器,肯定也少不了我们的动态分析神器啦 2. 动态分析工具-ollydbg OllyDbg(以其作者Oleh Yuschuk命名)是一个当源代码不可用时非常有用时强调二进制代码分析的x86 调试器, 它跟踪寄存器,识别过程,API调用,开关, 该软件是免费的,但共享软件许可证要求用户向作者注册 这个工具也是在逆向界可能无人不知无人不晓的类型 静态分析呢就是不用电脑来帮你运行代码,而是你在大脑中自己运行 动态分析就是用计算机来帮你运行,一步一步的
Binbloom Binbloom是一款针对二进制源码的固件分析软件,该工具旨在帮助广大研究人员分析固件的二进制源码,并自动化判断目标固件中的某些功能特性。 为了计算出加载地址,在使用Binbloom之前,我们还需要一些外部逆向工程分析工具来帮助我们提取目标固件中的潜在函数列表。 功能特性 加载地址: Binbloom可以解析原始二进制固件并确定其加载地址。 字节顺序: Binbloom可以使用一些启发式算法来确定目标固件的字节顺序。 UDS数据库: Binbloom可以解析原始二进制固件,并检查它是否存在有包含UDS命令id的数组。 array elements:515404 515404 This firmware seems to be LITTLE ENDIAN 在上述输出数据中,最后一行才是最重要的一行,因为它给出的是最终的分析结果
什么是angr: angr是一个二进制代码分析工具,能够自动化完成二进制文件的分析,并找出漏洞。 angr是一个基于python的二进制漏洞分析框架,它将以前多种分析技术集成进来,它能够进行动态的符号执行分析(如,KLEE和Mayhem),也能够进行多种静态分析。 angr的基本过程: 1)将二进制程序载入angr分析系统 2)将二进制程序转换成中间语言(intermediate representation, IR) 3)将IR语言转换成语义较强的表达形式,比如 angr过程分析 angr-CLE CLE是angr加载二进制文件的组建,在加载二进制文件的时候会分析病读取binary的信息,包括指令地址、shared library、arch information 为了便于阅读,我自己写了一个python脚本对这个二进制代码进行分析。
如果没有1 则第一位是0 10011001 比如 86 6 4 2 1 64 + 16 + 4 + 2 如果 有1 则第一位就是1 如果没有1 则第一位是0 01010110 二进制 0与二进制负数 最高位变成符号位 原码、反码、补码 1). 其他位存放该数的二进制的绝对值。 2). 反码:正数的反码还是等于原码。负数的反码就是他的原码除符号位外,按位取反。 负数用补码表示,10进制 负数转二进制,先求解对应正数,然后符号位定为1,其余位取反+1 -17转-进制= 二进制负数转十进制,符号位不变,其余位取反+1,得到原码 11000100转十进制- 为什么负数用补码表示 减法可以当做加法来运算 0的表述实现统一 二进制逻辑运算 与运算 & 遇o则0 或运算 | 遇1则1 1-0 0-1 异或运算 ^ 不进位加(相同为0,相异为1 ) 右移 >> 补符号位 正整数右移一位