Ironbin


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

OpenSSL 学习资源

发表于 2017-06-05 | 分类于 c++ | | 阅读次数:

OpenSSL 可执行文件下载

  • OpenSSL 下载

最好的学习文章

  • OPENSSL编程入门学习

  • openSSL命令、PKI、CA、SSL证书原理

  • 中间人攻击(MITM)姿势总结

阅读全文 »

windows 常用命令

发表于 2017-06-02 | 分类于 windows | | 阅读次数:

一、网络

查看谁在侦听端口

1
2
3
netstat -np <protocol> | find "port #"

netstat -np TCP | find "80"

打开 Internet 网络设置

1
inetcpl.cpl

其它的控制命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
appwiz.cpl
bthprops.cpl
desk.cpl
Firewall.cpl
hdwwiz.cpl
igfxCPL.cpl
inetcpl.cpl
intl.cpl
irprops.cpl
joy.cpl
main.cpl
mmsys.cpl
ncpa.cpl
powercfg.cpl
sysdm.cpl
TabletPC.cpl
telephon.cpl
timedate.cpl
wscui.cpl
阅读全文 »

Visual Studio 提高效率方法和工具

发表于 2017-05-25 | 分类于 vs | | 阅读次数:

为多行注释开头添加空格

一般情况下可以通过快捷键 CTRL+K+C 来添加注释:

1
2
3
//A
//B
//C

但是,我更习惯在每行内容的开头添加一个空格:

1
2
3
// A
// B
// C

这是一个实现的方法:How to comment multiple lines with space or indent

编译 CEF

发表于 2017-04-26 | 分类于 cef | | 阅读次数:

项目与分支

内容来自官方文档BranchesAndBuilding

背景

CEF 是 Chromium 项目的一个扩展,跟踪其分支。可通过自动工具或手动编译。

开发

CEF 的 master 分支跟踪 Chromium 的 master 分支,不建议用其产品化。

下载开发版 CEF

CEF3 - https://bitbucket.org/chromiumembedded/cef/src?at=master

CEF1 已不再支持。

发布(Release)分支

CEF 的发布分支跟踪 Chromium 的 release 里程碑(milesone)MXX 分支,推荐使用其产品化:

  • 基于 Chromium release
  • 更好的测试
  • CEF API 维护不变,仅做 bug 和安全修复
  • CEF 必要时可包含 Blink 补丁
  • 不受 CEF master 分支推进影响

CEF 版本 X.YYYY.A.gHHHHHHH:

  • X:主版本号(当前为 3)
  • YYYY:Chromium 分支
  • A:自增值,反映当前分支的版本值。可表示基于同一分支,各版本的顺序,用于修复 bug 等的版本提升
  • gHHHHHHH:7位字符反映 git 提交哈希,便于定位 git 历史

版本的详细信息保存在 include/cef_version.h 头文件中,也可以通过生成的应用访问 about:version 查看。

CEF release 分支下载规则,YYYY 对应4位 Chromium release 分支号:

  • https://bitbucket.org/chromiumembedded/cef/src/YYYY?at=YYYY

比如: https://bitbucket.org/chromiumembedded/cef/src/2623?at=2623

编译 CEF

下载文档

首先要下载文档仓库

1
git clone https://bitbucket.org/chromiumembedded/cef.git/wiki

然后将文档检出到需要编译的版本,比如 2623

1
git checkout 0625af2618b7f15660146acd769142144e5a48c9

生成项目文件

1
2
cd src\cef 
create.bat

编译

1
2
cd src 
ninja -C out\Release

运行测试

编译成功之后,运行 out\Release\cefclient.exe

打包导出

执行打包脚本

1
2
cd src\cef\tools
make_distrib.bat --ninja-build

打包成功后,在 src/cef/binary_distrib 目录会生成二进制的包

常见问题

NPAPI 启用情况

查看当前版本 NPAPI 是否已经启用,可以打开 Dev Tools -> Console 执行:

1
navigator.plugins

检查每个插件的情况,一般 NPAPI 插件会以 np 开头。

附录

  • CEF branches

Chrome 扩展之: Content Script

发表于 2017-04-25 | 分类于 chrome | | 阅读次数:

1 介绍

1.1 使用场景

Content Script 是一个很神奇的东西。它可以读取和修改页面内容。比如一些应用场景

  • 过滤广告:将页面中的广告区块过滤掉,只显示主要内容
  • 翻译页面中的外语
  • 分享页面内容到社交平台

1.2 限制

  • Use chrome.* APIs, with the exception of:
    • extension ( getURL , inIncognitoContext , lastError , onRequest , sendRequest )
    • i18n
    • runtime ( connect , getManifest , getURL , id , onConnect , onMessage , sendMessage )
    • storage
  • 不能使用扩展页面中的变量和方法
  • 不能使用定义在其它扩展的 Content Script 中的变量和方法

2 使用

2.1 Manifest

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"name": "My extension",
...
"content_scripts": [
{
"matches": ["http://www.google.com/*"],
"css": ["mystyles.css"],
"js": ["jquery.js", "myscript.js"]
}
],
...
"permissions": [
"tabs", "http://www.google.com/*"
],
...
}

2.2 注入

2.2.1 与 browserAction 配合

注入并执行一段代码:

1
2
3
4
5
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript({
code: 'document.body.style.backgroundColor="red"'
});
});

执行上面的代码先获取权限:

1
2
3
"permissions": [
"activeTab"
],

或直接执行一个文件:

1
chrome.tabs.executeScript(null, {file: "content_script.js"});

blocking 会将回调函数设置为同步处理,请求会等待回调完成。使用该参数需要在 permission 中添加 webRequestBlocking 权限。

2.2.2 获取资源文件 URL

1
2
3
/Code for displaying <extensionDir>/images/myimage.png:
var imgURL = chrome.extension.getURL("images/myimage.png");
document.getElementById("someImage").src = imgURL;

3 要点

3.1 ContentScript 在独立环境运行

3.2 注入的方式

3.2.1 整个文件

1
2
3
4
5
6
7
var s = document.createElement('script');
// TODO: add "script.js" to web_accessible_resources in manifest.json
s.src = chrome.extension.getURL('script.js');
s.onload = function() {
this.remove(); // 执行完后清理注入标签
};
(document.head || document.documentElement).appendChild(s);

注意: 将 script.js 加入到 “web_accessible_resources”

3.2.2 代码片段

1
2
3
4
5
6
7
8
9
10
11
12
var actualCode = `// Code here.
// If you want to use a variable, use $ and curly braces.
// For example, to use a fixed random number:
var someFixedRandomValue = ${ Math.random() };
// NOTE: Do not insert unsafe variables in this way, see below
// at "Dynamic values in the injected code"
`;

var script = document.createElement('script');
script.textContent = actualCode;
(document.head||document.documentElement).appendChild(script);
script.remove();

3.2.3 更多方式

参见: Insert code into the page context using a content script

3.3 注入的时机

3.3.1 document_start

  • 在 document.readyState 事件前被触发。
  • document.head 和 document.body 还不可用,只有 documentElement

    1
    2
    3
    4
    var s = document.createElement ("script");
    s.src = "http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js";
    s.async = false;
    document.documentElement.appendChild (s);
    1
    2
    3
    4
    var s = document.createElement ("script");
    s.src = chrome.extension.getURL ("MyPwnCode.js");
    s.async = false;
    document.documentElement.appendChild (s);
  • 如果需要操作其它 DOM,可以等待 DOMContentLoaded 事件

    1
    2
    3
    4
    5
    6
    7
    document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false);

    function fireContentLoadedEvent () {
    console.log ("DOMContentLoaded");
    // PUT YOUR CODE HERE.
    //document.body.textContent = "Changed this!";
    }

3.3.2 document_end

  • DOM 已解析完成
  • 资源如 image 和 frame 还没有加载(onload)

3.3.3 document_idle

  • 晚于 document_end,
  • 也晚于 window.onload
  • DOM 已解析完成

Chrome 扩展之: 使用 webRequest 替换页面资源

发表于 2017-04-19 | 分类于 chrome | | 阅读次数:

请求事件

首先,一个请求的生命周期是这样的:

利用 webRequest 接口,可以监听图中的事件,插入自己的处理。

知识点:

1. webRequest 需要在 background 中使用

2. 调用方式

1
2
3
4
5
6
var callback = function(details) {...};
var filter = {...};
var opt_extraInfoSpec = [...];

chrome.webRequest.onBeforeRequest.addListener(
callback, filter, opt_extraInfoSpec);

3. blocking 参数

blocking 会将回调函数设置为同步处理,请求会等待回调完成。使用该参数需要在 permission 中添加 webRequestBlocking 权限。

举例: 替换网站的 JS 文件

1. 声明权限

编辑 manifest.json,添加 permission

1
2
3
4
5
6
"permissions": [
"webRequest",
"webRequestBlocking",
"http://*/*",
"https://*/*"
]

2. 添加后端 文件

首先在 manifest.json 中添加 background 文件

1
2
3
4
"background": {
"scripts": ["dist/js/background.js"],
"persistent": true
}

3. webRequest 脚本

1
2
3
4
5
6
7
8
9
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
if( details.url.endsWith('origin.js') ){
return {redirectUrl: chrome.extension.getURL ("dist/bake/fake.js")};
}
},
{urls: ["*://*/*.js"]},
["blocking"]
);

解释一下上面的后端代码:

  • 监听 符合规定请求 的 onBeforeRequest 事件
  • 这2个参数是回调函数,通过参数 details 来判断每一个请求 url,如果以 origin.js 结尾,将用扩展中准备好的 fake.js 替换。换句话说,将原始网站的 JS 替换为假的 JS
  • 对于用户来讲,通过查看源码,看到的仍然是 <script src="origin.js"></script>
  • 通过 DevTools 的 network 查看,会发现 url 已经变为 fake.js
  • 第3个参数过滤被监听的请求,支持通配符 *
  • 第4个参数为扩展参数,blocking 说明这是 同步 处理,请求会等待回调函数完成

设置 WebBrowser Document Mode

发表于 2017-03-27 | 分类于 ie | | 阅读次数:

编辑注册表

1
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION

设置值

值 说明
10001 (0x2711) Internet Explorer 10。网页以IE 10的标准模式展现,页面!DOCTYPE无效
10000 (0x02710) Internet Explorer 10。在IE 10标准模式中按照网页上!DOCTYPE指令来显示网页。Internet Explorer 10 默认值。
9999 (0x270F) Windows Internet Explorer 9. 强制IE9显示,忽略!DOCTYPE指令
9000 (0x2328) Internet Explorer 9. Internet Explorer 9默认值,在IE9标准模式中按照网页上!DOCTYPE指令来显示网页。
8888 (0x22B8) Internet Explorer 8,强制IE8标准模式显示,忽略!DOCTYPE指令
8000 (0x1F40) Internet Explorer 8默认设置,在IE8标准模式中按照网页上!DOCTYPE指令展示网页
7000 (0x1B58) 使用WebBrowser Control控件的应用程序所使用的默认值,在IE7标准模式中按照网页上!DOCTYPE指令来展示网页。

举例:

DuiLib 的使用

发表于 2017-03-17 | 分类于 c++ | | 阅读次数:

下载代码

本文下载的是 Redrain 维护的版本,原始的 DuiLib 版本从这里下载。

以库方式使用

打开并升级工程文件

打开 DuiLib_vs2010.sln,我安装的 IDE 是 VS2015,会提示升级,按提示完成。

编译全部动态库

打开菜单 Build > Batch Build…

选择编译所有配置:

保存编译的结果:

  • DuiLib.dll
  • DuiLib.lib
  • DuiLib_d.dll
  • DuiLib_d.lib

以及 DuiLib 库的定义目录: DuiLib

当创建新工程时,把 lib 文件添加到 link 依赖里,把 DuiLib 目录添加到 inluce 路径中,最后把 dll 库放到导出目录中,便配置好了一个 DuiLib 工程。

以源码方式使用

1. 创建一个空工程

2. 将源码中的 DuiLib 目录添加到工程根目录中

3. 导入 DuiLib 项目

在工程上右键,选择:Add > Existing Project…,找到 DuiLib 项目文件导入

4. 设置依赖 DuiLib

在主项目上右键,选择:Build Dependencies > Project Dependencies…,设置依赖 DuiLib 项目。

这样,在编译主项目时会先编译依赖的 DuiLib 项目。

CEF 的使用

发表于 2017-03-17 | 分类于 c++ | | 阅读次数:

下载代码

http://opensource.spotify.com/cefbuilds/index.html

CEF

cefsimple 示例

  1. 编译 libcef_dll_wrapper 静态库
  2. 创建新的项目
  3. 设置 include 目录到 cef 头文件目录
  4. 设置链接库 comctl32.lib, shlwapi.lib, rcprt4.lib, libcef_dll_wrapper.lib, libcef.lib, cef_sandbox.lib
  5. 添加 resource.rc
  6. 添加 cefsimple.exe.manifest 和 compatibility.manifest
  7. 绑定编译事件 post build: 将 cef debug 或 release 目录,Resources 目录复制到输出目录

常见问题

CefSettings

当嵌入到 windows 消息循环和 DuiLib 消息循环时,要设置 multi_threaded_message_loop

CefBrowser 和 CefFrame

CefBrowser 可以包含多个 CefFrame

CefApp

待补充

CefClient

是否支持 crx

1
2
3
4
5
// 加载测试扩展,如果是 windows 或 linux,可以加上 --use-views 获得更好效果
cefclient --load-extension=set_page_color --use-views

// 通过路径加载任意扩展
cefclient --load-extension=c:\path\to\my\extension

Proxychains4 问题

发表于 2017-03-10 | 分类于 mac | | 阅读次数:

Timeout 问题

1
2
3
4
proxychains4 curl https://www.twitter.com/
[proxychains] config file found: /usr/local/Cellar/proxychains-ng/4.10/etc/proxychains.conf
[proxychains] preloading /usr/local/Cellar/proxychains-ng/4.10/lib/libproxychains4.dylib
curl: (7) Failed to connect to www.twitter.com port 443: Operation timed out

解决办法

1. 重启系统进入维护模式(Recovery Mode)

按住 ‘Command’ 和 ‘R’ 启动系统

2. 打开终端(Terminal)

3. 禁用 csrutil

1
csrutil disable

4. 重启系统

1…678…12
程学彬

程学彬

117 日志
48 分类
99 标签
Creative Commons
Links
  • ShinySky
0%
© 2014 — 2020 程学彬