Skip to content

Commit

Permalink
reverse head
Browse files Browse the repository at this point in the history
  • Loading branch information
aqiongbei committed Dec 2, 2018
1 parent c54499c commit 3e983c9
Show file tree
Hide file tree
Showing 11 changed files with 560 additions and 565 deletions.
12 changes: 2 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,5 @@
# buy_pig_plan | 买猪计划

#### 写在前面

以前,有个人经常给我女朋友打骚扰电话,这家伙实在太可气了,得给他点教训,让他知道骚扰电话的厉害。于是有了这个程序。
在持续的攻击一段时间后我也悄悄的对目标做过一些回访,看看用户体验,顺便记录下来看看攻击效果:

| 时间 | 目标状态 |
|------------|--------------------------------------------------------------|
| 2018.08.18 | 佯装某机构人员电话回访,对方态度**不耐烦**,没讲几句就挂断电话 |


#### 项目介绍

> 买猪计划:一个电话攻击、留言攻击的工具
Expand Down Expand Up @@ -45,6 +35,8 @@ git clone https://github.com/aqiongbei/bomer.git
- 安装依赖

```sh
# 由于安装puppeteer时候需要下载chromium,而下载chromium需要外网,所以建议对puppeteer使用国内镜像下载,加上下面这句
npm config set puppeteer_download_host=https://npm.taobao.org/mirrors
npm install
```

Expand Down
237 changes: 120 additions & 117 deletions app_pptr.js
Original file line number Diff line number Diff line change
@@ -1,118 +1,121 @@
'use strict'

const config = require('config');
const colors = require('colors');
const cron = require('node-cron');
const puppeteer = require('puppeteer');

const util = require('./utils/util');
const {WEB_TYPE, TASK_TYPE, TASK_STATUS} = util.taskConst;

const flow = require('./flow/flow');
const TARGET = config.get('targetInfo');

process.on('uncaughtException', function (err) {
log.error(err);
});

process.on('unhandledRejection', function(err, p) {
log.error(err.stack);
});

if (config.util.getEnv('NODE_ENV') != 'production') {
(async () => {
await puppeteerAttack(TASK_TYPE.call, WEB_TYPE.call.lxb);
// await puppeteerAttack(TASK_TYPE.comment, WEB_TYPE.comment.shangqiao);
})();
return ;
}

let task = cron.schedule(config.get('attackTime'), async function(){
await puppeteerAttack(TASK_TYPE.call, WEB_TYPE.call.lxb);
console.log(config);
}, false);

task.start();

async function puppeteerAttack(task_type, web_type) {
const {url_list, page, browser} = await init(task_type, web_type);
let done = 0;
let failed = 0;
let locked = 0;
let times = 0;

for (let item of url_list) {
times ++ ;
let startTime = new Date();
let sleepTime = config.get('everyTaskSleepTime');
let feedBack = '';

console.log(`==================TASK TIMES: ${times}==================`.yellow)
console.log(`TASK INFO:`.yellow, `WEB NAME: ${item.name} WEB TYPE: ${item.web_type}`.green);

item.result = await puppeteerFlow(page, item);

if (item.result.status == 'done') {
done ++;
}

if (item.result.status == 'failed') {
if (item.result.msg.includes('[TYPE ERROR]') || item.result.msg.includes('[TIME OUT ERROR]')) {
util.deleteUrl(item.task_type, item.web_type, item.id);
}
sleepTime = 0;
failed ++;
}

if (item.result.status == 'locked') {
locked ++;
}

console.log(`TASK RESULT:`.yellow, `STATUS: ${item.result.status} MSG:${item.result.msg}`.green);
console.log(`USED TIME: ${(new Date() - startTime) / 1000} S`.red);
console.log(`SLEEP TIME: ${sleepTime / 1000} S`.red);

await page.waitFor(sleepTime);
}

await browser.close();
console.log(`==================TASK REPORT==================`.yellow)
console.log(`done: ${done} failed: ${failed} locked: ${locked}`.yellow);
}

async function init (task_type, web_type) {
const url_list = util.getRandomUrl(task_type, web_type, config.get('attackTimes'));
const browser = await puppeteer.launch({
executablePath: config.get('chromium').path,
headless: config.get('chromium').headless,
slowMo: config.get('chromium').slowMo,
devtools: false,
args: ['--ash-host-window-bounds=1024x768'],
});
const page = await browser.newPage();

page.setDefaultNavigationTimeout(0);
page.setViewport({width: 1024, height: 768});

console.log(JSON.stringify(url_list, null, 4));
return {url_list, page, browser};
}

async function puppeteerFlow(page, item) {
let result = {
status: '',
msg: ''
};

try {
await page.goto(item.url, {timeout: 30 * 1000});
} catch (e) {
result.msg = `[TIME OUT ERROR] ${e}`;
}

if (!result.msg) {
result = await flow[item.task_type][item.web_type](page, item, TARGET);
}

return result;
'use strict'

const config = require('config');
const colors = require('colors');
const cron = require('node-cron');
const puppeteer = require('puppeteer');
const events = require('events');
const e = new events();
e.setMaxListeners(0);

const util = require('./utils/util');
const {WEB_TYPE, TASK_TYPE, TASK_STATUS} = util.taskConst;

const flow = require('./flow/flow');
const TARGET = config.get('targetInfo');

process.on('uncaughtException', function (err) {
console.log(err);
});

process.on('unhandledRejection', function(err, p) {
console.log(err.stack);
});

if (config.util.getEnv('NODE_ENV') != 'production') {
(async () => {
await puppeteerAttack(TASK_TYPE.call, WEB_TYPE.call.lxb);
// await puppeteerAttack(TASK_TYPE.comment, WEB_TYPE.comment.shangqiao);
})();
return ;
}

let task = cron.schedule(config.get('attackTime'), async function(){
await puppeteerAttack(TASK_TYPE.call, WEB_TYPE.call.lxb);
console.log(config);
}, false);

task.start();

async function puppeteerAttack(task_type, web_type) {
const {url_list, page, browser} = await init(task_type, web_type);
let done = 0;
let failed = 0;
let locked = 0;
let times = 0;

for (let item of url_list) {
times ++ ;
let startTime = new Date();
let sleepTime = config.get('everyTaskSleepTime');
let feedBack = '';

console.log(`==================TASK TIMES: ${times}==================`.yellow)
console.log(`TASK INFO:`.yellow, `WEB NAME: ${item.name} WEB TYPE: ${item.web_type}`.green);

item.result = await puppeteerFlow(page, item);

if (item.result.status == 'done') {
done ++;
}

if (item.result.status == 'failed') {
if (item.result.msg.includes('[TYPE ERROR]') || item.result.msg.includes('[TIME OUT ERROR]')) {
util.deleteUrl(item.task_type, item.web_type, item.id);
}
sleepTime = 0;
failed ++;
}

if (item.result.status == 'locked') {
locked ++;
}

console.log(`TASK RESULT:`.yellow, `STATUS: ${item.result.status} MSG:${item.result.msg}`.green);
console.log(`USED TIME: ${(new Date() - startTime) / 1000} S`.red);
console.log(`SLEEP TIME: ${sleepTime / 1000} S`.red);

await page.waitFor(sleepTime);
}

await browser.close();
console.log(`==================TASK REPORT==================`.yellow)
console.log(`done: ${done} failed: ${failed} locked: ${locked}`.yellow);
}

async function init (task_type, web_type) {
const url_list = util.getRandomUrl(task_type, web_type, config.get('attackTimes'));
const browser = await puppeteer.launch({
executablePath: config.get('chromium').path,
headless: config.get('chromium').headless,
slowMo: config.get('chromium').slowMo,
devtools: false,
args: ['--ash-host-window-bounds=1024x768'],
});
const page = await browser.newPage();

page.setDefaultNavigationTimeout(0);
page.setViewport({width: 1024, height: 768});

console.log(JSON.stringify(url_list, null, 4));
return {url_list, page, browser};
}

async function puppeteerFlow(page, item) {
let result = {
status: '',
msg: ''
};

try {
await page.goto(item.url, {timeout: 30 * 1000});
} catch (e) {
result.msg = `[TIME OUT ERROR] ${e}`;
}

if (!result.msg) {
result = await flow[item.task_type][item.web_type](page, item, TARGET);
}

return result;
}
108 changes: 54 additions & 54 deletions flow/call/baidu_lxb.js
Original file line number Diff line number Diff line change
@@ -1,55 +1,55 @@
'use strict'
const {WEB_TYPE, TASK_TYPE, TASK_STATUS} = require('../../utils/task_const');

async function flow(page, item, target) {
let result = {
status: '',
msg: ''
};

page.on('dialog', async dialog => {
await dialog.dismiss();
});

try {
await page.type('.lxb-cb-input', target.phone, {delay: 10});
await page.click('.lxb-cb-input-btn');
await page.waitFor(1 * 1000);

try {
result.msg = await page.$eval('.lxb-cb-tip', e => e.innerText);
} catch (e) {
try {
result.msg = await page.$eval('.lxb-cb-info-tip-con', e => e.innerText);
} catch (e) {
try {
result.msg = await page.$eval('.lxb-cb-error-tip', e => e.innerText);
} catch (e) {
result.msg = `[MSG ERROR] ${e}`;
}
}
}
} catch (e) {
result.msg = `[TYPE ERROR] ${e}`;
}

result.status = getTaskStatus(result.msg);

return result;
}

function getTaskStatus(text) {
let status = TASK_STATUS.failed;
let doneReg = /|||/g;
let lockedReg = /|/g;

if (doneReg.test(text)) {
status = TASK_STATUS.done;
} else if (lockedReg.test(text)) {
status = TASK_STATUS.locked;
}

return status;
}

'use strict'
const {WEB_TYPE, TASK_TYPE, TASK_STATUS} = require('../../utils/task_const');

async function flow(page, item, target) {
let result = {
status: '',
msg: ''
};

page.on('dialog', async dialog => {
await dialog.dismiss();
});

try {
await page.type('.lxb-cb-input', target.phone, {delay: 10});
await page.click('.lxb-cb-input-btn');
await page.waitFor(1 * 1000);

try {
result.msg = await page.$eval('.lxb-cb-tip', e => e.innerText);
} catch (e) {
try {
result.msg = await page.$eval('.lxb-cb-info-tip-con', e => e.innerText);
} catch (e) {
try {
result.msg = await page.$eval('.lxb-cb-error-tip', e => e.innerText);
} catch (e) {
result.msg = `[MSG ERROR] ${e}`;
}
}
}
} catch (e) {
result.msg = `[TYPE ERROR] ${e}`;
}

result.status = getTaskStatus(result.msg);

return result;
}

function getTaskStatus(text) {
let status = TASK_STATUS.failed;
let doneReg = /|||/g;
let lockedReg = /|/g;

if (doneReg.test(text)) {
status = TASK_STATUS.done;
} else if (lockedReg.test(text)) {
status = TASK_STATUS.locked;
}

return status;
}

module.exports = flow;
Loading

0 comments on commit 3e983c9

Please sign in to comment.