起源于一个朋友要求做一个虚假的报表,要求就是逼真。哈哈,对于本人来说就是专业造假30年,因为这里的报表返回是json.所以无疑就更方便了,现在这里简单介绍一下这款工具。在github上他的地址是:https://github.com/wuchangming/node-mitmproxy

上一张结果图

这里的安装比较轻便,但我这里给他做了一点提取操作。简化了一下这个包包。另外,这里需要的环境如下:

nodejs

nodejs-mitmproxy

另外这里是基于代理形式的,跟传统的ARP欺骗有些不同。先说说安装吧,你也可以照着官方文档来安装,也可以用我的方法来安装。当你装好nodejs以后。默认npm模块路径是C:\Users\Administrator\AppData\Roaming\npm\node_modules所以你把我的包解压到这里就可以了。目录树大致就是这样的。下载压缩包 下载例子

└─node-mitmproxy ├─lib │ ├─bin │ ├─common │ ├─middleware │ ├─mitmproxy │ └─tls └─node_modules ├─.bin ├─@types │ └─node ├─agentkeepalive │ └─lib ├─ansi-regex ├─ansi-styles ├─babel-code-frame │ └─lib ├─babel-core │ └─lib │ ├─api │ ├─helpers │ ├─tools │ └─transformation │ ├─file │ │ └─options │ └─internal-plugins ├─babel-generator │ └─lib │ ├─generators │ └─node ├─babel-helper-call-delegate │ └─lib ├─babel-helper-define-map │ └─lib ├─babel-helper-function-name │ └─lib ├─babel-helper-get-function-arity │ └─lib ├─babel-helper-hoist-variables │ └─lib ├─babel-helper-optimise-call-expression │ └─lib ├─babel-helper-regex │ └─lib ├─babel-helper-remap-async-to-generator │ └─lib ├─babel-helper-replace-supers │ └─lib ├─babel-helpers │ └─lib ├─babel-messages │ └─lib ├─babel-plugin-check-es2015-constants │ └─lib ├─babel-plugin-syntax-async-functions │ └─lib ├─babel-plugin-transform-async-to-generator │ └─lib ├─babel-plugin-transform-es2015-arrow-functions │ └─lib ├─babel-plugin-transform-es2015-block-scoped-functions │ └─lib ├─babel-plugin-transform-es2015-block-scoping │ └─lib ├─babel-plugin-transform-es2015-classes │ └─lib │ └─lib ├─babel-plugin-transform-es2015-computed-properties │ └─lib ├─babel-plugin-transform-es2015-destructuring │ └─lib ├─babel-plugin-transform-es2015-duplicate-keys │ └─lib ├─babel-plugin-transform-es2015-for-of │ └─lib ├─babel-plugin-transform-es2015-function-name │ └─lib ├─babel-plugin-transform-es2015-literals │ └─lib ├─babel-plugin-transform-es2015-modules-amd │ └─lib ├─babel-plugin-transform-es2015-modules-commonjs │ └─lib ├─babel-plugin-transform-es2015-modules-systemjs │ └─lib ├─babel-plugin-transform-es2015-modules-umd │ └─lib ├─babel-plugin-transform-es2015-object-super │ └─lib ├─babel-plugin-transform-es2015-parameters │ └─lib ├─babel-plugin-transform-es2015-shorthand-properties │ └─lib ├─babel-plugin-transform-es2015-spread │ └─lib ├─babel-plugin-transform-es2015-sticky-regex │ └─lib ├─babel-plugin-transform-es2015-template-literals │ └─lib ├─babel-plugin-transform-es2015-typeof-symbol │ └─lib ├─babel-plugin-transform-es2015-unicode-regex │ └─lib ├─babel-plugin-transform-regenerator │ └─lib ├─babel-plugin-transform-strict-mode │ └─lib ├─babel-polyfill │ ├─dist │ ├─lib │ ├─node_modules │ │ └─regenerator-runtime │ └─scripts ├─babel-preset-es2015 │ └─lib ├─babel-register │ └─lib ├─babel-runtime │ ├─core-js │ │ ├─array │ │ ├─error │ │ ├─json │ │ ├─math │ │ ├─number │ │ ├─object │ │ ├─reflect │ │ ├─regexp │ │ ├─string │ │ ├─symbol │ │ └─system │ ├─helpers │ └─regenerator ├─babel-template │ └─lib ├─babel-traverse │ └─lib │ ├─path │ │ ├─inference │ │ └─lib │ └─scope │ └─lib ├─babel-types │ └─lib │ └─definitions ├─babylon │ ├─bin │ └─lib ├─balanced-match ├─brace-expansion ├─chalk ├─charset │ └─coverage │ └─lcov-report │ └─charset ├─colors │ ├─examples │ ├─lib │ │ ├─custom │ │ ├─maps │ │ └─system │ └─themes ├─commander ├─concat-map │ ├─example │ └─test ├─convert-source-map │ ├─example │ └─test │ └─fixtures ├─core-js │ ├─build │ ├─client │ ├─core │ ├─es5 │ ├─es6 │ ├─es7 │ ├─fn │ │ ├─array │ │ │ └─virtual │ │ ├─date │ │ ├─dom-collections │ │ ├─error │ │ ├─function │ │ │ └─virtual │ │ ├─json │ │ ├─map │ │ ├─math │ │ ├─number │ │ │ └─virtual │ │ ├─object │ │ ├─promise │ │ ├─reflect │ │ ├─regexp │ │ ├─set │ │ ├─string │ │ │ └─virtual │ │ ├─symbol │ │ ├─system │ │ ├─typed │ │ ├─weak-map │ │ └─weak-set │ ├─library │ │ ├─core │ │ ├─es5 │ │ ├─es6 │ │ ├─es7 │ │ ├─fn │ │ │ ├─array │ │ │ │ └─virtual │ │ │ ├─date │ │ │ ├─dom-collections │ │ │ ├─error │ │ │ ├─function │ │ │ │ └─virtual │ │ │ ├─json │ │ │ ├─map │ │ │ ├─math │ │ │ ├─number │ │ │ │ └─virtual │ │ │ ├─object │ │ │ ├─promise │ │ │ ├─reflect │ │ │ ├─regexp │ │ │ ├─set │ │ │ ├─string │ │ │ │ └─virtual │ │ │ ├─symbol │ │ │ ├─system │ │ │ ├─typed │ │ │ ├─weak-map │ │ │ └─weak-set │ │ ├─modules │ │ ├─stage │ │ └─web │ ├─modules │ │ └─library │ ├─stage │ └─web ├─core-util-is │ └─lib ├─debug │ └─src ├─detect-indent ├─escape-string-regexp ├─esutils │ └─lib ├─globals ├─has-ansi ├─home-or-tmp ├─iconv-lite │ ├─encodings │ │ └─tables │ └─lib ├─inherits ├─invariant ├─is-finite ├─isarray ├─js-tokens ├─jschardet │ ├─dist │ ├─src │ └─tests │ └─qunit ├─jsesc │ ├─bin │ └─man ├─json5 │ └─lib ├─lodash │ └─fp ├─loose-envify ├─minimatch ├─minimist │ ├─example │ └─test ├─mkdirp │ ├─bin │ ├─examples │ └─test ├─ms ├─node-forge │ ├─js │ └─swf ├─number-is-nan ├─os-homedir ├─os-tmpdir ├─path-is-absolute ├─private ├─process-nextick-args ├─readable-stream │ ├─doc │ │ └─wg-meetings │ └─lib │ └─internal │ └─streams ├─regenerate ├─regenerator-runtime ├─regenerator-transform │ ├─lib │ └─src ├─regexpu-core │ └─data ├─regjsgen ├─regjsparser │ ├─bin │ └─node_modules │ ├─.bin │ └─jsesc │ ├─bin │ └─man ├─repeating ├─safe-buffer ├─slash ├─source-map │ ├─dist │ └─lib ├─source-map-support ├─string_decoder │ └─lib ├─strip-ansi ├─supports-color ├─through2 ├─to-fast-properties ├─trim-right ├─tunnel-agent ├─util-deprecate └─xtend

紧接着安装一下证书。如果你是默认安装,则使用以下命令

start %HOMEPATH%/node-mitmproxy/node-mitmproxy.ca.crt

你也可以用我包里的。然后添加到

这时候就不会出现证书错误了。紧接着你创建一个简单例子simpleConfig.js

module.exports = { sslConnectInterceptor: (req, cltSocket, head) => true, requestInterceptor: (rOptions, req, res, ssl, next) => { var url=rOptions.path; //console.log(rOptions.path);//link /?id=111 //console.log('Visit:{rOptions.protocol}//${rOptions.hostname}:${rOptions.port}'); //console.log('cookie:', rOptions.headers.cookie); if(url.indexOf("paopaoyang.com")>0) { console.log('target:'+url); //res.end("it's time to replace"); } //res.end('hello node-mitmpoxy!'); next(); }};

如此以来,当请求路径里包含paopaoyang.com的时候,就会输出target:和你请求的路径。

而这个res.end呢,就是不显示原有网页内容,直接显示你自己设定的内容。所以这里,对于我们伪造报表起到了关键性作用。我们可以判断这个请求,然后返回特定的json.就实现了伪造!关于更多nodejs的用法,你可以参考https://nodejs.org/api/fs.html

然后你就可以使用node-mitmproxy -c simpleConfig.js来启动你的套件了!下面是抄自官方说明,针对于MacOs下的方法:安装上都是一样的。导入证书这一块如下:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/node-mitmproxy/node-mitmproxy.ca.crt

具体请根据你的情况作微调。另外附上一张网页截图: