Entry

【学习】如何提取调试ShellCode,这些知识你会吗?

北城以北 提交于 2020-12-19 08:06:10
0 x00 前言 最近刚好看了下shellcode的分析方法,然后就想把之前HW遇到的shellcode拿出来分析一下,一方面检验下自己学习成果,另一方面也和大家分享一下shellcode的一些分析思路吧。 这个样本是从客户的一份钓鱼邮件里发现的,伪造成正常邮件,附件为一个嵌入VBA的word文档,如果没有禁用宏的话,打开文档就会触发病毒执行。 0 x01 宏代码提取 根据文件后缀其实就能看出,该 word文档是带有宏代码的,m即为macro。 使用分析工具oledump.py(https://github.com/decalage2/oledump-contrib)对样本进行分析 oledump.py是一个用于分析OLE文件(复合文件二进制格式)的程序,而word、excel、ppt等文档是OLE格式文件的,可以用它来提取宏代码。 先进行文件基础分析,可以看到A3这段数据被标记为“M”,“M”即表示Macro,说明这段数据是带有VBA代码的。 python oledump.py SSL.docm 接下来我们就需要将这段VBA代码提取出来,执行以下命令,可以看到VBA代码就被提取出来了。 我们把他重定向到一个文件里即可。 python oledump.py -s A3 -v SSL.docm 0x02 宏代码分析 分析宏代码,可以使用编辑器,像notepad++来分析

java锁介绍

只谈情不闲聊 提交于 2020-12-19 07:58:22
1.乐观锁和悲观锁 乐观锁:读多写少,读数据默认其他线程不会修改该数据,默认不上锁,但是在更新的时候在该期间判断数据有没有更新。(在写时读取版本号,若发生改变,则重新读取--比较--修改) 悲观锁:写少读多,每次读写操作的时候都会上锁。 如Synchronized是悲观锁,AQS框架下的锁(ReenTrantLock)则先尝试cas乐观锁去获取锁,获取不到则会转换为悲观锁 注:AQS框架指提供了一种实现阻塞锁和一系列依赖的FIFO等待队列同步器框架 2.自旋锁 持有锁的线程在很短的时间内释放资源,等待竞争的线程不需要进入阻塞状态,只需要等待一定的时间(自旋)等持有锁的线程释放锁即可立即获取锁,避免用户进行和内河的切换消耗 注:1.如果在设置等待的最大时间内仍然没有释放锁,则会停止自旋进入阻塞状态 2.若持有锁的线程需要长时间占有锁,则不适合用自旋锁 3.公平锁和非公平锁 公平锁:公平锁指的是锁的分配机制是公平的。加锁前检查是否有排队的等待线程,先到先得 非公平锁:按随机、就近原则分配的锁机制称为不公平锁。加锁前不考虑排队等待问题,直接尝试获取,获取不到自动到队尾等待, 注:1.非公平锁性能比公平锁高5到10倍。因为公平锁需要在多核的情况下维护一个队列 2.synchronized是非公平锁,ReentrantLock默认的lock()方法采用的是非公平锁 4.共享锁和独占锁 独占锁

python_Tkinter

我的未来我决定 提交于 2020-12-19 04:24:51
Tkinter相关 python支持多种图形界面的第三方库,包括: TK wxWidgets QT GTK 等等 但是python自带的库是支持TK的TKinter,使用使用Tkinter,无需安装任何包,就可以直接使用。 我使用的是pycharm编写的python,用的是python2.7版本。 要使用tkinter,首先需要导入Python提供的 tkinter模块。 from ttk import * 这是在我的电脑上适用的导入tkinter模块的语句。 在tkinter模块导入的时候遇到问题时,看见一个实用的回答: try : from tkinter import * except ImportError: # Python 2.x PythonVersion = 2 from Tkinter import * from tkFont import Font from ttk import * from tkMessageBox import * import tkFileDialog else : # Python 3.x PythonVersion = 3 from tkinter.font import Font from tkinter.ttk import * from tkinter.messagebox import * 代码部分

十分钟搞懂阿里Sentinel核心源码(上)

六眼飞鱼酱① 提交于 2020-12-18 19:12:40
点击上方“ JavaEdge ”,关注公众号 设为“ 星标 ”,好文章不错过! 简介 Sentinel提供了丰富的限流、熔断功能。它支持控制台配置限流、熔断规则,支持集群限流,并可以将相应服务调用情况可视化。 本文主要分析Sentinel的限流功能源码。 Sentinel会进行流量统计,执行流量控制规则。而统计数据的展示和规则的设置在 sentinel-dashboard 项目中,这是一个 Spring MVC 应用,有后台管理界面,我们通过这个管理后台和各个应用进行交互。 当然,你不一定需要 dashboard,仅仅使用 sentinel-core,它会将统计信息写入到指定的日志文件中,通过该文件内容来了解每个接口的流量情况。这时只是使用到了 Sentinel 的流量监控功能。 dashboard 应用默认不持久化数据,它的所有数据都在内存,所以 dashboard 重启意味着所有数据都会丢失。你应按需要定制化 dashboard,如至少你应该要持久化规则设置,QPS 数据非常适合存放在时序数据库中,当然如果你的数据量不大,存 MySQL 也问题不大,定期清理一下过期数据即可,因为大部分人应该不会关心一个月以前的 QPS。 Sentinel 的核心将不同 Slot 按序串在一起(责任链模式),从而将不同功能(限流、降级、系统保护)组合在一起。核心结构: slot chain

redisson+spring aop实现限流

柔情痞子 提交于 2020-12-18 18:41:15
redisson的限流原理 RRateLimiter limiter = redisson.getRateLimiter("myLimiter"); // one permit per 2 seconds limiter.trySetRate(RateType.OVERALL, 1, 2, RateIntervalUnit.SECONDS); limiter.acquire(1); 下面是 RedissonRateLimiter.java#RFuture<T> tryAcquireAsync(RedisCommand<T> command, Long value) return commandExecutor.evalWriteAsync(getName(), LongCodec.INSTANCE, command, "local rate = redis.call('hget', KEYS[1], 'rate');" + "local interval = redis.call('hget', KEYS[1], 'interval');" + "local type = redis.call('hget', KEYS[1], 'type');" + "assert(rate ~= false and interval ~= false and type ~= false,

看看线程特有对象ThreadLocal

﹥>﹥吖頭↗ 提交于 2020-12-18 03:45:55
作用:设计线程安全的一种技术。 在使用多线程的时候,如果多个线程要共享一个非线程安全的对象,常用的手段是借助锁来实现线程的安全。线程安全隐患的前提是多线程共享一个不安全的对象 ,那么有没有办法让线程之间不共享这个对象,就像你和我,每个人都有自己的一个苹果,你吃你的,我吃我的,你我互不干涉,来达到线程的安全?有 !在java.lang包下有一个类叫ThreadLocal<T>,让线程之间各自持有自己的对象T。 来看看 来自多线程编程指南的一个案列,的使用方式和其工作原理 /* 授权声明: 本源码系《Java多线程编程实战指南(核心篇)》一书(ISBN:978-7-121-31065-2,以下称之为“原书”)的配套源码, 欲了解本代码的更多细节,请参考原书。 本代码仅为原书的配套说明之用,并不附带任何承诺(如质量保证和收益)。 以任何形式将本代码之部分或者全部用于营利性用途需经版权人书面同意。 将本代码之部分或者全部用于非营利性用途需要在代码中保留本声明。 任何对本代码的修改需在代码中以注释的形式注明修改人、修改时间以及修改内容。 本代码可以从以下网址下载: https://github.com/Viscent/javamtia http://www.broadview.com.cn/31065 */ package io.github.viscent.mtia.ch6; import

java的集合工具类Collections

与世无争的帅哥 提交于 2020-12-17 15:48:57
集合框架的工具类。 Collections: 集合框架的工具类。里面定义的都是静态方法。 Collections 和 Collection 有什么区别? Collection 是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。 它有两个常用的子接口 : List :对元素都有定义索引。有序的。可以重复元素。 Set :不可以重复元素。无序。 Collections 是集合框架中的一个工具类。该类中的方法都是静态的 提供的方法中有可以对 list 集合进行排序,二分查找等方法。 通常常用的集合都是线程不安全的。因为要提高效率。 如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。 Collections 常用方法 排序 static <T extends Comparable<? super T>> void sort(List<T> list) 根据元素的自然顺序 对指定列表按升序进行排序 <T extends Comparable> 要排序的对象必须是 Comparable 的子类 static <T> void sort(List<T> list, Comparator<? super T> c) 根据指定比较器产生的顺序对指定列表进行排序。 自定义比较器排序 最大值最小值 static <T extends Object &

HashMap面试题汇总(附2020年最新大厂面试题、答案)

南楼画角 提交于 2020-12-17 15:48:10
1,HashMap底层存储结构 HashMap在Jdk1.7的时候采用的是数组加链表的数据结构,jdk1.8之后采用了数组加链表加红黑树的数据结构。观察源码可知HashMap类中有一个非常重要的字段就是Node[] table,即哈希桶数组。而Node是HashMap的一个内部类,实现了Map.Entry接口,本身就是一个键值对。 2,解决Hash冲突的方法,HashMap采用了什么方法解决Hash冲突? HashMap使用哈希表来存储数据的,当然哈希表不可避免的就会遇到hash冲突问题,解决hash冲突的方法大致有两种:1,开放地址法。2,链地址法。 1,开放地址法:当地址发生冲突时,按着某种方法继续探测哈希表中的其他存储单元,直到找到空位置为止。 2,链地址法:链地址法就是数组加链表的结合,在每一个数组元素上都有一个链表结构,当地址发生冲突时就讲数据存放在链表中。 而HashMap就是采用链地址法进行解决hash冲突的。 3,jdk1.8的HashMap中的链表达到多少个时会生成红黑树? HashMap用链地址法解决hash冲突,则当链表里的长度太长就会严重影响HashMap的性能。于是在jdk1.8里,对数据结构做了进一步优化,引入了红黑树,当链表长度大于8的时候,链表就会转成红黑树,利用红黑树快速增删改查的特点提高HashMap的性能,其中会用到红黑树的插入、删除

Java Thread之start和run方法的区别

自古美人都是妖i 提交于 2020-12-17 07:58:04
原创转载请注明出处: https://www.cnblogs.com/agilestyle/p/11421515.html start 用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法run()称为线程体,它包含了要执行的这个线程的内容,run方法运行结束,此线程随即终止。 start方法源码示例 一个 Java 线程的创建本质上就对应了一个本地线程(native thread)的创建,两者是一一对应的。 关键问题是:本地线程执行的应该是本地代码,而 Java 线程提供的线程函数(run)是 Java 方法,编译出的是 Java 字节码。 所以, Java 线程其实提供了一个统一的线程函数,该线程函数通过 Java 虚拟机调用 Java 线程方法 , 这是通过 Java 本地方法 start0 调用来实现的。 也就是新创建的线程启动调用native start0方法,而这些native方法的注册是在Thread对象初始化的时候完成的 Thread 类有个 registerNatives 本地方法,该方法主要的作用就是注册一些本地方法供 Thread 类使用,如

记一次ThreadLocal引发的内存泄露

℡╲_俬逩灬. 提交于 2020-12-16 09:20:36
概念 ​首先解释下内存溢出和内存泄露的概念。内存溢出一般指的是out of memory,也就是我们经常说的OOM,常发生在堆,方法区和方法栈。内存泄露指的是一段程序在申请内存空间后,无法释放已经申请的内存空间,导致该内存地址不可达,后续程序里这块内存空间永远被占用。就好像商场的物品柜设计了10个抽屉,每个人使用后都会归还给下一个用户使用,如果有某个人一直占用不退还,别的用户就只能使用剩下的9个抽屉,这样的人多了以后,最后大家一个抽屉也无法使用了。所以内存泄露跟内存溢出是存在联系的,一次内存泄露不会有太大的影响,内存泄露堆积以后就会导致内存溢出。 此处应该有图,大家脑补一下画面。 需求背景 一个to C的个人账户系统,数据量大概有2000多W;某天产品突然来说要做一个to B 商户账户系统,马上一个星期左右后的大促活动就要用,产品跟大老板牛逼已经吹出去了,说我们的系统已经具备了这个能力,能够立马无缝支持。现在火急火燎的来找我们,问是不是直接把我们这套to C的账户系统的能力提供出去就可以了。 需求分析 首先在这么短的时间内要开发测试上线,新做一个to B的账户系统肯定是不现实的,咱们程序员能力再强也不能流水线生产系统啊。只能依赖当前账户系统的能力先去支撑这个业务。这两套账户体系底层的核心领域模型可以抽象一致,都包括记账凭证,记账主体,记账流水