AdvertCN - 广告中国

 找回密码
 立即注册

QQ登录

只需一步,快速开始

PropellerAds
Google-Bing-Mediago-Criteo开户
⚡️按条S5代理⚡️静态⚡️独享⚡️5G广告专用虚拟卡/U充值/高返点皇家代理IP⚡️#1性价比⚡️
Mediabuy⚡️玩家开户首选【鲁班跨境通-自助充值转账】FB/GG/TT❤️官方免费开户Affiliate 全媒体流量资源⚡️
Taboola/Outbrain /Bing⚡️一级代理开户投流-7*24h❤️人工在线【官方】❤️搜索套利买量投流开户独立站⚡️开户投放
⚡️AdsPower:安全不封号,高效自动化⚡️E.PN 虚拟卡⚡️FB BM不限额,短id账单户BINOM TRACKER 60% OFF!
比Adplexity还好用的Spy工具ADPLEXITY + ADVERTCN7200W全球动态不重复住宅IP代理虚拟信用卡+独立站收款
全球虚拟卡, 支持U充值Facebook 批量上广告尤里改 - FB 稳定投放免费黑五教程(持续更新、欢迎交流)
FB 三不限源头 - 自助下户充值转款各种主页、账单户、BM户(优势)⚡️TikTok企业户,bm户,账单户提供TK企业新户老户、谷歌新户老户
PTM虚拟卡[全新卡BIN+高返点]FB虚拟卡⚡️消费越多返现越多最大欧洲Nutra网盟BA找量优质住宅/移动代理/高匿名/高性能
TK白名单老户|兼职广告可投⚡比特指纹浏览器+云手机, 4.5折起T3NZU:定义应用网盟新时代FB个人号源头服务商
寻找顶级电商?AdsBranded等你!TK老户/国内外端口/预审/加白广告位出租8500万高质量住宅IP,助力各种需求
虚拟卡返佣1%,国内持牌机构   
查看: 21982|回复: 15

网站小偷程序吊丝版(原理、实现,及几种玩法)

[复制链接]

5

主题

50

广告币

168

积分

初级会员

Rank: 2

积分
168

社区QQ达人

发表于 2013-5-22 18:49:44 | 显示全部楼层 |阅读模式
HuiTong虚拟卡
大洲的小偷程序非常让人眼馋,无奈本diao丝程序员,一无RMB,二无论坛币,只能望洋兴叹,所幸我有web程序开发的经验,对于这个小偷程序的基本原理能猜到不少,本着自力更生,服务大众的精神,我自己实现了一个简易版,在此开源给大家,希望能赚点论坛币,早日进入email版见见世面。
& Q2 K7 k0 c+ B3 H1 V/ l1 L* k/ {: v' m; T+ I$ X
一、原理1 |  T, `4 m) o( n/ ]9 i: V
1.用户访问流程:" d  T2 U7 P9 r0 S8 J, S1 B2 n
(1)用户访问我们的冒牌站(A.com)9 o& s, {) H! l
(2)网站后台程序根据用户的query参数(包括get/post/cookie)构造原始网站B.com的url,用后台程序去访问该url,此时可以拿到原始网站的html和header输出。这里有一点需要注意的是原始网站输出的头也不可以忽略,里面的set-cookie信息也可以转发给用户的,这样就可以实现注册和登陆原网站啦。
" g; @5 c/ q* ^/ M(3)对原始网站的html输出和header输出按某些规则做替换,比如把某些广告去掉啦,把B.com的地址替换成A.com啦,其实这一步是最关键的,也是玩法最多最好玩的部分# k8 Q9 ~: [) h' n) h. z- q
(4)将替换后的html和header输出给用户。
- g7 f( t' I+ l0 ?$ l( C- ^
& Q9 p$ ?7 I: \) m) i9 p8 G2.规则替换的几种玩法:
$ e. y' P! f. T! `& w(1)最简单的当然是字符串和正则表达式了,这就不多说了
# I  W( b% B& t% A8 v4 [(2)用html解析库对html的dom节点做操作,然后重新生成html,比如可以把页面中的text node翻译成另一种语言,或者做文章重写,这样比较容易逃过搜索引擎的法眼。" d' J/ Q2 f& N5 w' g9 J8 X
据我所知每种语言都由若干个html库,比如php的有DOM、phpQuery等,java的有htmlcleaner等8 O7 q+ [  }7 _& @; o1 p' a
(3)在原始html代码的后面加入一些javascript代码,用来隐藏一些页面元素,或加入一些广告代码等
. a: z7 P% e$ q' x; c8 o! b3 H$ z$ y( v
3.关于速度和性能:( Q# f; q" s: w) ~3 R
(1)提到性能第一个想到的当然是缓存啦,我觉得最适合加缓存的地方就是上文1.1.2中提到的生成原始网站url后,这里可以对原始url做md5编码,访问一次改url后就把它的内容和头存到硬盘上,这样就不用每次都去原网站拉取了。做缓存的另一个好处是不用担心被原网站屏蔽。/ ?7 k/ \5 I: c* t

- X* A; X% @' i(2)对于css,图片,js等静态文件,其实不用每个文件都让php访问原网站拉取,可以直接返回个302,让浏览器直接去原网站拉取。
# n. Q: e- L% \) j( i% r% s+ V0 u1 w2 e

0 r) A6 W% Z3 p- e  B% P  f- A二、实现
+ Y6 ^3 I. M: n- v, }. T7 N1 O  ^1.程序语言:+ b! i" H% X+ v
其实这个东西哪种语言都能搞定,也都不麻烦,我对php比较熟,就选了php。- H$ l3 g  W$ B) Z7 f0 [
2.一些准备工作:
! v5 C' H6 ?8 T2 ]8 i) U8 z(1)修改apache的rewrite规则,因为我们的程序只有一个文件,我们必须把所有接收到的请求都重定向到这个文件,这里我假设重定向到index.php,在apache的<VirtualHost>中加入这几句,如果是虚拟主机的话就修改.htaccess吧,不过我没试过,所以不知道怎么写re它的write规则: K. _- h$ t5 }& A6 K& X
RewriteEngine on
, u& x$ s2 a9 o/ A RewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME} -s [OR]
. I0 I" V  \# l0 DRewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME} -l [OR], m' C/ c5 b' ^3 M5 _8 L
RewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME} -d9 j4 {7 p: w* I. s6 q1 y
RewriteRule ^.*$ - [NC,L]6 b4 @% P" m8 s- H0 I
RewriteRule ^.*$ /index.php [NC,L]/ c3 x0 \4 D7 v

6 ?, D) Z6 A4 c6 z(2)安装php的http模块
- Y# }" c: x* C% v) Z+ O/ `php发http请求的函数库找了好几个,发现http模块是用起来最简单的,不过需要你会linux操作哦,安装方法在这里http://php.net/manual/en/http.install.php
+ J' U! d; O$ P+ ?* A8 u( |6 _* Wps:如果安装不上或没有vps,请把下面程序的http模块的函数换成phpcurl等http lib/ e2 h, e+ k% M# N- a, R( i

0 v0 o6 o: o& k, A- o2 N# O3.index.php的代码:2 ^5 @9 S6 m4 E0 a: f) X

3 x/ p7 \1 X4 F8 e
( F/ M7 M. [4 [9 C: q! ?. C' g1 E$host = $_SERVER['HTTP_HOST'];
: e' c# W9 [* ~6 B* f//这里把假站的域名替换成原始网站的,用于生成原始url. r) r7 X' |  V& c0 u
$host = str_ireplace('fake.com', "true.com", $host);
: @3 {/ Y0 Z+ o$toUrl = sprintf("http://%s%s", $host,$_SERVER['REQUEST_URI']);8 g+ V" `5 F- m, R# @! `* a) Q
3 `5 R, K" e! E3 z6 W( t- ^
$script_name = $_SERVER['SCRIPT_NAME'];/ [. ?% c% Q- J8 E/ m5 |/ c
$arr = explode(".", $script_name);2 s3 X8 F2 Z( Q2 e3 m* [* b& R' I
$endName = $arr[count($arr) - 1];: v2 s% W0 }: Z. V' x2 S1 B( ^

0 r1 Q% c' j& z- W( I$ R1 D# P* _5 d0 h' x3 l! {
//这些后缀结尾的url直接返回3025 T. B3 _7 v2 s5 l7 E
$STATIC_END_NAME = array('css','xml','rss','gif','jpg','jpeg','js','axd','atom',/ g( k% N4 L" V+ ]' k
                'mml','txt','jad','htc',
9 k+ L. o7 z/ d$ n                'png','tif','tiff','wbmp','ico','jng','bmp','svg'," F; A. L3 T( A' f
                'jar','war','ear','hqx','doc','pdf','ps','eps','ai',
; S3 `) V! X; ~7 G  w% [1 _5 q                'rtf', 'xls', 'ppt', 'wmlc', 'xhtml', 'cco', 'jardiff',
5 V1 E- d! m4 g9 I3 ]                'jnlp', 'run', 'pl', 'pm', 'prc', 'pdb', 'rar', 'rpm',
" @* i+ x; j7 m( B5 q                'sea', 'swf', 'sit', 'tcl', 'tk', 'der', 'der', 'crt',7 Z' }; K) X- L  e: E% T. e
                'xpi', 'zip', 'bin', 'exe', 'dll' ,'deb', 'dmg', 'eot',# {" R& b9 K* t" N
                'iso', 'img', 'msi', 'msp', 'msm' ,'mid', 'midi', 'kar',
6 Z8 Z8 P  n: C# \3 `8 T, z  g0 Y                'mp3', 'ra', '3gpp', '3gp', 'mpeg', 'mpg', 'mov', 'flv',  Y  o* s! ]! Y" h4 C- j% f
                'mng', 'asx', 'asf', 'wmv', 'avi');
; {; L% t5 f; e& F2 W2 [- ]. |& R! r& t( [) ]0 T4 A5 l& C
if(in_array($endName ,$STATIC_END_NAME))
+ w9 B3 G$ H3 n+ I{  t, W- k" c4 b7 f
        $headerStr = sprintf("Location: %s", $toUrl);/ ~7 r; E6 b  i! @
        header( $headerStr, true, 302);0 g% T0 j9 F5 x2 E( U& T
        exit;6 d- {# w. G- [5 q! m2 w
}
* U8 I. H5 `7 Z1 {/ |
" B( q) Y  O+ r3 [* ?3 b4 [4 ?( }//一个简单的cache
7 F( m0 L& f1 O- ^0 Vfunction GetFromCache( $url)2 J$ _/ Z' l$ G$ E) }2 u4 g
{5 D% W2 i3 ~. n
    $current_dir = dirname(__FILE__);
/ k, N4 H+ C0 g  d" ]0 D# j    $cache_dir = $current_dir . "/cache/";
' \% X  u' Z* [) c# l$ ^, Q: W    if( !is_dir( $cache_dir))
1 @7 V# a/ `; X( ]( e    {
! E- {$ I! u- {9 y) @1 \' l
, d! V" y' D. @! x& Q        mkdir($cache_dir);  y: R2 H7 C9 w5 G# h* P
    }9 b/ H; k, ?9 H

$ J0 Z* k# t' D    $cache_file = $cache_dir . md5($url);
( T/ q* ^3 s3 c- J& O1 E- g    if(file_exists( $cache_file))' E, T& w& V3 P' m$ Y$ W9 ]
    {( C; L3 f* c5 d" h- o4 S
        $html = file_get_contents( $cache_file);% g- z4 [* |+ F8 ^- N
        if($html == false)
& l, Y0 O# u- e. H' E6 V" V        {
* y2 \. w" e: x: v8 ?( U0 x            $html = "";
& w' ^- R; t/ I, z        }
4 L; E; M% t, U    }else
# h& |4 S8 u3 H# p    {. E) Q1 N: w* @' J
        //访问原始网站
( R+ H# F- G- [+ v! S7 n, R/ c- P        $data = http_get($url ,array('redirect' => 5, 'timeout' => 10), $http_info );% j- `7 E3 z( N. v, ^( `
        $message = http_parse_message($data);
% K5 o2 b: U) H, q: a, }' e) J) M, }, E1 p
        $html = trim($message->body);& {; B4 h7 s1 O

- w4 y. d5 }/ n& Z3 n        file_put_contents( $cache_file, $html);
% G% J! h5 m" s    }7 e* i- X3 ?. [6 J* T

4 k% S( i- E; N    return $html;
: {+ X1 n% X9 F- X# C. f- ^}6 _, A6 m4 A) l6 j! t; x
, H% O7 b8 c, F; m& h% q* @) c( I7 R1 Q
$html = GetFromCache( $toUrl );& V. x0 k& h' p% y) L- _$ X

3 I/ I6 K; |" T- W: w6 E6 {6 d# F4 K3 z
$html = str_replace("circleid.com", "circleid.us", $html);
  J1 ^# X: J! W4 b9 G3 t; g3 g
# }! X% o  E9 S* ]$html = preg_replace('/<meta name=.*>/', "", $html);5 ]6 W6 f/ e/ n1 j0 s# o/ {. Q

, s) v! p* n: A3 D6 G7 J& A9 |$ P( Q8 U& ]' d5 n' s
//注释的这两句是用phpquery操作) Z/ t% H" o! K# v2 n+ d
//$body = htmlqp($body)->find('#header')->remove()->html();- w2 H1 Y/ Z! U9 H# Y
//$html = htmlqp($html)->find('#header')->remove()->document->saveHTML();: @- j5 u! r& M; a) n2 e  N8 @! v

0 _' M, z$ v7 X/ W7 O) o$script = <<<EOD8 ]2 l( P4 k* z, t
<script>" a' k7 O" L/ u9 H$ n
$(document).ready(function() {
8 |6 y$ ?$ O7 [- W                $("#footer").remove();; e5 q  ?6 D/ L5 h; c; K, j  M$ E
& Q1 e& ^1 t5 {8 c! }: x# m- W
});" r0 L' I% Q# ]& x& o
4 @2 i( x& p! j
</script>
% V2 q1 l( e7 X) D: l; {* h
3 s, l7 p+ n- K/ H3 P5 r2 [0 BEOD;
9 {; y' g- J% W* R) u: Z2 C0 ~: \; v6 Z3 b. W/ j; S0 |
echo($html . $script);& N5 H& N  A2 _0 O2 x  o, T! z

8 {; D: y0 V  D/ R# ?, `% s: ~  H/ H/ t! g* s  V( H* w) L0 k* r7 d
三、最后$ ^$ M/ l$ [: B% R# Q' f) y* {8 o" ]
1.总之,这个程序还很简陋,没有处理post和cookie参数,也没有配置管理模块,距离大洲的程序差距有一个大洲那么大,仅适合稍微懂点程序又有点好奇心的新手玩玩
- ]* f& c0 J- R2 c7 T' o7 Y- c5 b2.最后当然是希望大家不令赐分啦,您的论坛币是我继续分享的动力,哈哈1 R: ^+ U0 G$ [$ g' w

# F7 O* a9 H2 y! I2 L

评分

参与人数 13广告币 +21 收起 理由
useejack + 1 赞一个!
rmvbcc + 1 很给力!
lwbing + 1
blackhat + 2 很给力!
风儿 + 5 赞一个!
hudba + 1 很给力!
dhdz187 + 1 看上去很牛逼的样子,支持!
毕加 + 1 很给力!
老猫 + 2 很给力!
河小马 + 2 很给力!
Smythe_Bob + 1 赞一个!
luguo + 2
chinafla + 1 很给力!

查看全部评分

相关帖子
回复

使用道具 举报

5

主题

642

广告币

1246

积分

高级会员

Rank: 4

积分
1246
发表于 2013-5-22 19:15:10 | 显示全部楼层
随便找一个proxy代码 功能以去掉 什么都齐全了。。。
回复 支持 反对

使用道具 举报

33

主题

57

广告币

309

积分

初级会员

Rank: 2

积分
309
发表于 2013-5-22 19:33:55 | 显示全部楼层
有一个技术流牛人!赞一个!!!
回复 支持 反对

使用道具 举报

21

主题

1028

广告币

2440

积分

论坛嘉宾

积分
2440
发表于 2013-5-22 19:49:04 | 显示全部楼层
NGINX 天生的小偷 结合LUA 各种替换
回复 支持 反对

使用道具 举报

13

主题

303

广告币

569

积分

中级会员

Rank: 3Rank: 3

积分
569

社区QQ达人

发表于 2013-5-22 19:49:15 | 显示全部楼层
nginx 早已经实现了,有插件.
回复 支持 反对

使用道具 举报

22

主题

431

广告币

602

积分

中级会员

Rank: 3Rank: 3

积分
602

社区QQ达人

发表于 2013-5-22 20:20:28 | 显示全部楼层
期待楼主的程序,大洲 的程序貌似挺牛,但是贵,初级屌丝用着吃力。
野花儿http://yehuaer.com
回复 支持 反对

使用道具 举报

5

主题

50

广告币

168

积分

初级会员

Rank: 2

积分
168

社区QQ达人

 楼主| 发表于 2013-5-22 21:21:05 | 显示全部楼层
chinafla 发表于 2013-5-22 19:15
$ e$ [1 R! H9 P. y; `6 D: [* [: M& d; a随便找一个proxy代码 功能以去掉 什么都齐全了。。。

$ ?7 _3 X0 U1 F, [是的,其实就是个web proxy,重要的是替换模块的创意和玩法。2 a8 Q1 p7 n7 E3 Z
我觉得大洲最NB的一点就是把配置管理和站群管理做的很方便,另外就是把替换功能做成插件化,这些边边角角的活看起来没啥技术含量,但是做过产品的人都知道很劳心劳力的

评分

参与人数 1广告币 +1 收起 理由
大洲 + 1 理解万岁~做产品很JB累人

查看全部评分

回复 支持 反对

使用道具 举报

1

主题

9

广告币

42

积分

初级会员

Rank: 2

积分
42
发表于 2013-5-22 21:34:12 | 显示全部楼层
楼主牛人。。。
回复 支持 反对

使用道具 举报

14

主题

179

广告币

280

积分

初级会员

Rank: 2

积分
280

社区QQ达人

发表于 2013-5-23 00:46:21 | 显示全部楼层
对于css,图片,js等静态文件,其实不用每个文件都让php访问原网站拉取,可以直接返回个302,让浏览器直接去原网站拉取。

9 i/ m2 K4 E. y4 \6 t+ U/ E" ^, f( A6 x5 r- F( @. n2 f
源网站如果有防盗链的,就不行了。8 o) c3 R& e: ~+ i8 U# l3 j  Y1 y8 |
危害性! |9 k" x0 n% z  Y
9 T$ t* l" x) j0 g" D8 g7 A
302重定向很容易被搜索引擎误认为是利用多个域名指向同一网站,那么你的网站就会被封掉,罪名是“利用重复的内容来干扰Google搜索结果的网站排名”。因为302重定向经常别用于做url劫持,黑帽seo技术中,而且百度在处理302重定向技术还不成熟,经常将它纳入到黑帽seo的范畴中,而google对这方面识别处理就完善了许多。所以302重定向在现阶段的搜索引擎技术中,还是容易导致网站降权的,尽量不用。但从seo、网站优化方面来说是弊大于利。
回复 支持 反对

使用道具 举报

44

主题

771

广告币

1423

积分

高级会员

Rank: 4

积分
1423
发表于 2013-5-23 06:42:39 | 显示全部楼层
没看懂,楼主你抓取的html是永久保存在服务器硬盘吗?还是用户访问每次都抓或者缓存?9 C, t$ Y' \- {- \/ Q; N9 V1 x
抓来的页面模板要重新设计吗?觉得最后还是要能赚钱。伪原创?
回复 支持 反对

使用道具 举报

111

主题

541

广告币

1203

积分

高级会员

Rank: 4

积分
1203

社区QQ达人

发表于 2013-5-23 09:11:53 | 显示全部楼层
一个NGINX就搞定了 效率还高
# `3 ?% L. _3 [4 W( f" a简单的替换有相应模块
回复 支持 反对

使用道具 举报

4

主题

1173

广告币

1207

积分

高级会员

Rank: 4

积分
1207
发表于 2013-5-23 09:28:35 | 显示全部楼层
会程序的就是NB哈
回复 支持 反对

使用道具 举报

5

主题

50

广告币

168

积分

初级会员

Rank: 2

积分
168

社区QQ达人

 楼主| 发表于 2013-5-23 09:38:36 | 显示全部楼层
hudba 发表于 2013-5-23 06:42
/ [4 ?. o2 [2 I% r1 p0 h没看懂,楼主你抓取的html是永久保存在服务器硬盘吗?还是用户访问每次都抓或者缓存?* `. Y- d6 v( i: U4 T
抓来的页面模板要重 ...
# w' c* b, `& Z/ o% u2 y3 F, R4 @
这个代码里的cache主要是做demo,是存在硬盘里的,实际使用中你完全可以用memcache或数据库代替,cache的过期策略也可以自己控制
回复 支持 反对

使用道具 举报

1

主题

750

广告币

690

积分

中级会员

Rank: 3Rank: 3

积分
690

社区QQ达人

发表于 2013-5-23 11:22:12 | 显示全部楼层
也是一个高手哦。。。
回复 支持 反对

使用道具 举报

8

主题

130

广告币

191

积分

初级会员

Rank: 2

积分
191

社区QQ达人

发表于 2013-5-27 10:32:21 | 显示全部楼层
技术流牛人!赞一个!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们|联系我们|DMCA|广告服务|小黑屋|手机版|Archiver|Github|网站地图|AdvertCN

GMT+8, 2025-12-20 19:39 , Processed in 0.056904 second(s), 19 queries , Gzip On, MemCache On.

Copyright © 2001-2023, AdvertCN

Proudly Operating in Hong Kong.

快速回复 返回顶部 返回列表