0x00 前言
早就想写一个键盘监听器了,学校的电子阅览室设了Administrator屏障,想装软件什么的很麻烦,因此想截获管理员密码。。
花了大概一个星期编写了一个,效果还不错,因此来分享一下。。
0x01 基本概念
首先解释一下什么是键盘钩子:
钩子(Hook)是Windows消息处理机制中的一个监视点,应用程序可以在这里安装一个子程序(钩子函数)以监视指定窗口某种类型的消息,所监视的窗口可以是其他进程创建的。当消息到达后,在目标窗口处理函数处理之前,钩子机制允许应用程序截获它进行处理。
SetWindowsHookEx函数可以把应用程序定义的钩子函数安装到系统中:
pascal
HHOOK SetWindow
继续阅读 »
当我们编译多个文件时, 就会有多个目标文件.
这些模块最后如何形成一个单一的程序呢?
模块间通信
链接器的由来
C/C++模块之间通信的方式有两种, 一种是模块间函数调用, 另一种是模块之间的变量访问.
在编译成目标文件的时候, 由于没有办法得知所引用的外部函数或者外部变量的地址, 所以会先置0.
所以问题本质上就是, 如何得知目标函数或者目标变量的地址呢?
继续阅读 »
英语是计算机的母语,是程序的母语,所以必然是程序员的母语。程序中的变量名、函数名起得好不好是决定代码质量和可维护性的最关键因素。高质量的代码应该是这样的:代码基本上是自解释的(self-explanatory),不需要太多注释,不管代码的规模有多大,具有相关知识背景的读过文档的人都可以立刻上手、立刻参与维护和开发。要想使代码能够自解释,给变量和函数起个好名字很关键,很显然,只能用英文起名字,一是用汉语拼音起名字可读性很差,二是英文单词通常比汉语更expressive(看吧,如果用汉语来说,就得说“表达能力更强”、“更有表现力”这么罗嗦),由于程序的复杂性,变量和函数往往表示一些很抽象的概念,起个既准确又简洁的名字并不容易,可是很多时
继续阅读 »
其实这篇文章主要是介绍这个东西 Proposal Bind Operator 或者 bind_operator。
也是在一个很偶然的机会看到了,git 上面的一个项目用到了这个用法,为什么自己发现不了这些东西呢?
传统的 this 绑定
在函数外面暂存一个变量
js
// 别名
var self = this;
setTimeout(function() {
this.doSomething();
}, 1000);
使用 bind 函数 & 箭头函数
在使用 class *** extends React.Component {} 的写法声明 React 组件的时候,组件的方法都不会被自动绑定 this 了,下面
继续阅读 »
文/Robin
橙皮书出品的第 85 期的「预言家周报」,@李画 推荐了一款产品,叫做 RoundlyX,去了解了下,挺有意思,分享给大家。
RoundlyX 是一个怎么样的产品呢?简单讲就是在你用借记卡、信用卡消费的时候,RoundlyX 会帮您自动补齐零碎。当积累的零碎达到一定的数额,会在交易所自动帮您买成加密货币。比如说您一笔消费了 $1.8,RoundlyX 会帮您积累 $0.2 凑个整。
至于为什么这个产品叫做 RoundlyX,因为 round 函数是 Excel 中的一个基本函数,作用按指定的位数对数值进行四舍五入,其他编程语言也有类似的函数实现。这个产品取名 RoundlyX,有意思吧。
注册 Round
继续阅读 »
模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。
more
创建模块
要创建模块,可创建一个.py文件,在其中包含用于完成任务的函数。
案例(保存为 mymodule.py):
继续阅读 »
在C语言里, 如何通过输入函数名字来调用函数?
直接上代码.
大致有三种方法:
用函数字典, 缺点是代码耦合在一起, 无法复用.
```
include
include
include
include
继续阅读 »
Version:Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] on win32
函数
可接受任意数量参数的函数
为了能让一个函数接受任意数量的位置参数,可以使用一个*参数
```python
def avg(first, *rest):
return (first + sum(rest)) / (1 + len(rest))
Sample use
avg(1, 2) # 1.5
avg(1, 2, 3, 4) # 2.5
``
在这个例子中,rest`是由所有其他位置参数组成的元组。然后我们
继续阅读 »
建议:函数调用的时候,调用方传给被调用方的参数,如果在调用之后还会被修改,那么调用方应该给被调用方传一个当时的拷贝,深拷贝,否则将会导致潜在的bug:
可能被调用方是异步执行的,如果调用函数之后,参数发生了修改,那么被调用方执行的时候,看到的就是被修改之后的数据,这将导致严重、隐蔽、非必现的BUG,而这种BUG是最让人头疼的
可能被调用方会修改传入的参数,这就导致函数执行完毕之后,调用方看到的数据发生了非预期的变化,这同样会导致严重、隐蔽的BUG
继续阅读 »
文/Robin
最近聊到 USDT,今天聊聊唯一不会被冻结的稳定币 DAI。
USDT-ERC20 的智能合约有 2 个函数,一个是 isBlackListed,另一个是 getBlackListStatus,这两个函数组成了黑名单的核心功能。目前从 Dune Analytics 得知,共计有 98 个黑名单地址。DAI 的智能合约并没有这两个函数,也就是说你的以太坊钱包里的 ETH 和 DAI,都是不能被冻结的,除非矿工不给你打包(当然这种情况几乎不可能,有钱赚为什么要拒绝)。
DAI 是怎么来的呢?1 DAI = 1 美元,Maker 利用抵押及价格反馈制度使 DAI 稳定在 1 美元。其中,抵押品由 MKR 持有人以
继续阅读 »