optional

IAT HOOK

余生颓废 提交于 2020-07-27 10:10:41
在上一篇文章 手动打造一个弹窗程序 中,我们自己手写了一份导入表,在调用函数的时候,我们CALL的是导入地址表的一个地址,为什么要调用这里,而且在构造导入表的时候,导入名称表(INT)和导入地址表(IAT)里面装的内容是一样的,程序又是怎么去调用的,在这篇文章中就来分析一下。 注:以下操作是在 XP 上实现的,其他版本注意写保护机制 目录 0x00 IAT表的填写 0x01 IAT HOOK的原理 0x02 实现代码 0x00 IAT表的填写 在上一篇文章中,我们构造导入表的时候,将 IAT 表和 INT 表都指向的是函数名称所在的位置,然后在运行的时候,IAT 表中的内容会被替换成对应函数的地址,在调用的时候使用间接 CALL ,来调用其中所储存的地址。 下面先来验证一下,函数调用的地址是 0x4010D8 ,在 OD 中进行查看 可以发现,已经正确的填写了,那么操作系统又是根据什么来填写的 首先操作系统会通过 Name 字段找到当前导入表的名字,然后调用 LoadLibrary 得到句柄,如果没有找到的话会提示找不到 dll 文件,报错情况如下 接着会根据 OriginalFirstThunk 找名字,OriginalFirstThunk 所指向的也就是咱们前面所说的 INT 表,通过 INT 表中的 RVA 地址来找函数的名字。 当然,这里也不一定存储的就是名字

Linux cma内存的使用

…衆ロ難τιáo~ 提交于 2020-07-26 23:33:00
CMA的全称叫做contiguous memory allocator,它是为了便于进行连续物理内存申请的一块区域,一般我们把这块区域定义为reserved-memory。 早期的Linux内核中没有cma的实现,如果驱动想要申请一个大块的物理连续内存,那么只能通过预留专属内存的形式,然后在驱动中使用ioremap来映射后作为私有内存使用。这样带来的后果就是有一部分内存将被预留出来不能作为系统中的通用内存来使用,比如camera、audio设备,它们在工作时是需要大块连续内存进行DMA操作的,而当这些设备不工作时,预留的内存也无法被其他模块所使用。 如何使得操作系统能够充分的利用物理内存呢?比如当一些设备需要使用大块连续物理内存时,可以比较容易的申请到,而当这些设备不工作时,这些内存又可以当做普通的内存那样被系统其他模块申请使用。引入CMA就是为了解决这个问题的,定义为cma区域的内存,也是由操作系统来管理的,当一个驱动模块想要申请大块连续内存时,通过内存管理子系统把CMA区域的内存进行迁移,空出连续内存给驱动使用;而当驱动模块释放这块连续内存后,它又被归还给操作系统管理,可以给其他申请者分配使用。 我前面的文章有介绍过《对于MIGRATE_MOVABLE的理解》,其中有讲到,buddy system在对内存进行管理时,不同size的内存块是分类管理的,其中有一类就是

对Windows 平台下PE文件数字签名的一些研究

天涯浪子 提交于 2020-07-26 21:56:44
Windows平台上PE文件的数字签名有两个作用:确保文件来自指定的发布者和文件被签名后没有被修改过。因此有些软件用数字签名来验证文件是否来自家厂商以及文件的完整性,安全软件也经常通过验证文件是否有数字签名来防误报。但是因为windows对于常用的数字签名验证API- WinVerifyTrust实现的问题,以及一些并不恰当的示例代码,很多地方在验证数字签名时存在卡慢或者安全性不高的问题。本文将介绍数字签名的常见使用方法、常见的验证代码、验证原理、以及在使用过程中碰到的问题,并且提出一种在某些场景下安全性更高,速度更快的验证方法,以及其他的一点小东西。有些地方并未完全搞明白,估计有些错误,如有发现的话,欢迎指出,但是喷的时候轻点啊。 目录 1 如何使用工具给文件加签名验签名… 3 1.1 生成证书… 3 1.2 嵌入式签名… 4 1.3 编录签名… 7 1.4 验证签名… 8 2 常见的验证签名代码… 10 3 验证原理… 14 3.1 嵌入式签名… 14 3.2 编录签名… 20 4 使用时遇到的问题… 21 4.1 WinVerifyTrust API的卡慢… 21 4.2 安全性… 22 4.2.1 恶意软件可能会导入证书到系统中… 22 4.2.2 滥发的证书… 23 5 一种更加快速安全的验证方法和一段验证代码… 24 6 其他… 28 6.1 签名后真的完全不可以修改了

聊聊SpinalTap的BinlogEventListener

北慕城南 提交于 2020-07-26 02:09:01
序 本文主要研究一下SpinalTap的BinlogEventListener BinlogEventListener SpinalTap/spinaltap-mysql/src/main/java/com/airbnb/spinaltap/mysql/binlog_connector/BinaryLogConnectorSource.java @Slf4j public final class BinaryLogConnectorSource extends MysqlSource { //...... private final class BinlogEventListener implements BinaryLogClient.EventListener { public void onEvent(Event event) { Preconditions.checkState(isStarted(), "Source is not started and should not process events"); final EventHeaderV4 header = event.getHeader(); final BinlogFilePos filePos = new BinlogFilePos( binlogClient.getBinlogFilename(),

带你认识不一样的Stream,Java8就该这么玩!

浪子不回头ぞ 提交于 2020-07-24 06:36:28
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 相信Java8的Stream 大家都已听说过了,但是可能大家不会用或者用的不熟,文章将带大家从零开始使用,循序渐进,带你走向Stream的巅峰。 操作符 什么是操作符呢?操作符就是对数据进行的一种处理工作,一道加工程序;就好像工厂的工人对流水线上的产品进行一道加工程序一样。 Stream的操作符大体上分为两种:中间操作符和终止操作符 中间操作符 对于数据流来说,中间操作符在执行制定处理程序后,数据流依然可以传递给下一级的操作符。 中间操作符包含8种(排除了parallel,sequential,这两个操作并不涉及到对数据流的加工操作): map(mapToInt,mapToLong,mapToDouble) 转换操作符,把比如A->B,这里默认提供了转int,long,double的操作符。 flatmap(flatmapToInt,flatmapToLong,flatmapToDouble) 拍平操作比如把 int[]{2,3,4} 拍平 变成 2,3,4 也就是从原来的一个数据变成了3个数据,这里默认提供了拍平成int,long,double的操作符。 limit 限流操作,比如数据流中有10个 我只要出前3个就可以使用。 distint 去重操作,对重复元素去重

.NET Core 玩一玩 Ocelot API网关

偶尔善良 提交于 2020-07-24 05:06:58
.net 这几年国内确实不好过。 很多都选择转行。不过.net Core跨平台 开源之后 。社区的生态在慢慢建立。往好的趋势发展。 对于坚守在.NET战线的开发者来说 是个挺不错的消息。 特别是微软收购75亿美金GitHub。.net 生态 社区圈子。肯定会有所上升。 发展趋势越来越好。(当然 这只是我个人祈愿) 最近也比较懒。也有段时间没有写过文章了。 但对于追寻新技术渴望学习 是不会断的 最近微服务比较火热。 将以个大型项目根据业务可以拆分成一个个的较小的独立项目。便于管理 且互相协作 什么是Ocelot Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由、请求聚合、服务发现、认证、鉴权、限流熔断、并内置了负载均衡器与Service Fabric、Butterfly Tracing集成。这些功能只都只需要简单的配置即可完成 但是现在网上关于Ocelot的文章还是有限。 首先感谢几位大佬 Ocelot的文章 https://www.cnblogs.com/shanyou/p/7787183.html (张友善 大神) https://www.cnblogs.com/Leo_wl/p/7852311.html ( HackerVirus 大神) https://www.cnblogs.com/jesse2013/p/net-core

Cast from Optional<> to ArrayList<>

[亡魂溺海] 提交于 2020-07-18 11:40:46
问题 I have the following situation: public ArrayList<A> getMethods(){ return b.c.test(); } So, my problem is that b.c.test() returns a value with Optional<A> as return type. But I need to return an ArrayList<A> . So, I tried to cast it and rewrite it to : public ArrayList<A> getMethods(){ return (ArrayList<A>)b.c.test(); } But Eclipse says that such a cast from Optional<A> to ArrayList<A> is not possible. How can I solve this problem? 回答1: I am presuming your intended semantic is 'if the value is

How to change complex data source in swiftUI List

我的未来我决定 提交于 2020-07-09 12:34:17
问题 App crash when I change data source like I tap “change data” button in APIView or delete item in QueryParametersView.list console log: This class 'SwiftUI.AccessibilityNode' is not a known serializable element and returning it as an accessibility element may lead to crashes Fatal error: Index out of range: file /AppleInternal/BuildRoot/Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-1103.8.25.8/swift/stdlib/public/core/ContiguousArrayBuffer.swift, line 444 class URLComponentsModel:

Mix boost::optional and std::unique_ptr

天涯浪子 提交于 2020-07-02 18:21:06
问题 I admit it: I'm in love with the concept of optional. The quality of my code has improved so much ever since I discovered it. Making it explicit whether a variable may or may not be valid is so much better than plain error codes and in-band signaling. It also allows me to not worry about having to read the contract in the documentation, or worrying about whether it's up-to-date: the code itself is the contract. That said, sometimes I need to deal with std::unique_ptr . Objects of this type

Python typing: return type with generics like Clazz[T] as in Java Clazz<T>

我只是一个虾纸丫 提交于 2020-06-27 16:53:32
问题 So I am aware of pythons typing.Optional. But I wrote my own crude PyOptional (https://github.com/felixhertrampf/PyOptional/blob/master/PyOptional.py) and would like to combine Optional[T] with my PyOptional to PyOptional[T]. I am currently using Python 3.7 and tried extending typing.Optional. Some of my PyOptional class PyOptional: T: TypeVar = TypeVar("T") def __init__(self, obj: T): self.value: Any = obj def get(self) -> Optional[T]: return self.value def or_else(self, default) -> T: