找回密码
 立即注册

QQ登录

只需一步,快速开始

PropellerAds
Google-Bing-Mediago-Criteo开户
⚡️按条S5代理⚡️静态⚡️独享⚡️5G广告专用虚拟卡/U充值/高返点皇家代理IP⚡️#1性价比⚡️
Mediabuy⚡️玩家开户首选【鲁班跨境通-自助充值转账】FB/GG/TT❤️官方免费开户Affiliate 全媒体流量资源⚡️
Taboola/Outbrain /Bing⚡️一级代理开户投流-7*24h❤️人工在线【官方】❤️搜索套利买量投流开户独立站⚡️开户投放
Google FB TK游戏代投⚡️E.PN 虚拟卡⚡️BINOM TRACKER 60% OFF!比Adplexity还好用的Spy工具
ADPLEXITY + ADVERTCN7200W全球动态不重复住宅IP代理虚拟信用卡+独立站收款全球虚拟卡, 支持U充值
Facebook 批量上广告尤里改 - FB 稳定投放免费黑五教程(持续更新、欢迎交流)FB 三不限源头 - 自助下户充值转款
各种主页、账单户、BM户(优势)IPCola原生住宅IP⚡️$1.8/条双ISPFB资源,账单户,分享户,国内一手TK加白户/二解户/FB海外户/GG老户
最大欧洲Nutra网盟BA找量 FB高权重耐操个号⚡️稳定过审FB企业户海外户,授信户,TK加白户联盟收款/海外资金下发/服贸结汇
✔Taboola海外户源头广告位出租虚拟卡返佣1%,国内持牌机构 
查看: 22727|回复: 15

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

[复制链接]

5

主题

50

广告币

168

积分

初级会员

积分
168

社区QQ达人

发表于 2013-5-22 18:49:44 | 显示全部楼层 |阅读模式
Binom_AdvertCN
大洲的小偷程序非常让人眼馋,无奈本diao丝程序员,一无RMB,二无论坛币,只能望洋兴叹,所幸我有web程序开发的经验,对于这个小偷程序的基本原理能猜到不少,本着自力更生,服务大众的精神,我自己实现了一个简易版,在此开源给大家,希望能赚点论坛币,早日进入email版见见世面。
' Q1 H  D$ D0 d  P% c- g5 R7 s: r4 Z0 h( e4 V. s
一、原理  u& a8 n2 j' @% f2 \9 t: K
1.用户访问流程:
4 ]; {% R5 \# o' D9 E(1)用户访问我们的冒牌站(A.com)3 T( _/ Y# E6 ]. v# u9 M
(2)网站后台程序根据用户的query参数(包括get/post/cookie)构造原始网站B.com的url,用后台程序去访问该url,此时可以拿到原始网站的html和header输出。这里有一点需要注意的是原始网站输出的头也不可以忽略,里面的set-cookie信息也可以转发给用户的,这样就可以实现注册和登陆原网站啦。
/ [2 C: X2 @8 y# d$ K# W; B(3)对原始网站的html输出和header输出按某些规则做替换,比如把某些广告去掉啦,把B.com的地址替换成A.com啦,其实这一步是最关键的,也是玩法最多最好玩的部分* b7 m7 _( k+ [# Z) r
(4)将替换后的html和header输出给用户。3 R* g7 z7 g7 d9 [
' p1 W/ N" i! R
2.规则替换的几种玩法:
( ~- D1 x, O$ n(1)最简单的当然是字符串和正则表达式了,这就不多说了& o) E4 S+ o) s  P5 W% Q' \9 i: B2 `
(2)用html解析库对html的dom节点做操作,然后重新生成html,比如可以把页面中的text node翻译成另一种语言,或者做文章重写,这样比较容易逃过搜索引擎的法眼。  p. ~  H1 @0 U# \# G3 A
据我所知每种语言都由若干个html库,比如php的有DOM、phpQuery等,java的有htmlcleaner等
$ d* Y: z+ G2 O+ A(3)在原始html代码的后面加入一些javascript代码,用来隐藏一些页面元素,或加入一些广告代码等
, R  @/ J, A, j/ n0 e- L/ `% F# y0 t1 S. @+ q
3.关于速度和性能:' [( {$ o) S" M+ q$ l! f
(1)提到性能第一个想到的当然是缓存啦,我觉得最适合加缓存的地方就是上文1.1.2中提到的生成原始网站url后,这里可以对原始url做md5编码,访问一次改url后就把它的内容和头存到硬盘上,这样就不用每次都去原网站拉取了。做缓存的另一个好处是不用担心被原网站屏蔽。) D+ t: D  w+ g3 N! W! H  k
( j. e- D9 Y  M
(2)对于css,图片,js等静态文件,其实不用每个文件都让php访问原网站拉取,可以直接返回个302,让浏览器直接去原网站拉取。' |8 f8 W, O" C3 P( [# d7 }0 z8 C- Y
+ A& |, m0 p8 r& i
/ P/ F- K  \. j& W6 g
二、实现3 F) f2 T$ E$ U+ N
1.程序语言:( A: R+ d/ m$ A# g. [
其实这个东西哪种语言都能搞定,也都不麻烦,我对php比较熟,就选了php。
* ?, I- x5 S8 d2.一些准备工作:8 t- E# ~0 r+ Z  b8 Y1 j9 r
(1)修改apache的rewrite规则,因为我们的程序只有一个文件,我们必须把所有接收到的请求都重定向到这个文件,这里我假设重定向到index.php,在apache的<VirtualHost>中加入这几句,如果是虚拟主机的话就修改.htaccess吧,不过我没试过,所以不知道怎么写re它的write规则
. r. O1 B1 _+ [! S! Y( Q* c RewriteEngine on* r. S: q- F4 C0 E4 I
RewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME} -s [OR]
3 M/ d9 c* @# ?2 b) N* \8 K$ _RewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME} -l [OR]! D! N; q: i2 Y& A& l
RewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME} -d% C/ O8 H, U* ?, j0 Y+ h7 @
RewriteRule ^.*$ - [NC,L]
+ j0 I% q( B4 o7 F4 f+ c RewriteRule ^.*$ /index.php [NC,L]
% ~# b, B  \1 P* U2 ?3 n9 I5 V- @% R0 n& S/ Y6 d5 w5 y' X% m
(2)安装php的http模块
* Y/ m: z3 y) p" uphp发http请求的函数库找了好几个,发现http模块是用起来最简单的,不过需要你会linux操作哦,安装方法在这里http://php.net/manual/en/http.install.php' p0 c( c6 n% M6 U9 H
ps:如果安装不上或没有vps,请把下面程序的http模块的函数换成phpcurl等http lib
3 [+ x* f* F  c/ [9 m5 n) c/ i+ ]+ B5 ]2 w8 R) o! ?
3.index.php的代码:
+ j* d) A9 r$ K/ x: S
$ f& T: X) n3 H9 P# B  }8 `5 E& F4 B
0 L  m! ]! U4 O% Z5 V$host = $_SERVER['HTTP_HOST'];; Q8 N+ \; M8 x$ n7 t
//这里把假站的域名替换成原始网站的,用于生成原始url
; N4 F" S* U& O) L( ~" s' i$host = str_ireplace('fake.com', "true.com", $host);
! `3 Q' n: q8 r/ W) `7 X$toUrl = sprintf("http://%s%s", $host,$_SERVER['REQUEST_URI']);
  V  @+ E9 I2 f7 Z8 E2 E( b% b9 \  q8 n+ n% M7 O% x5 z; o& o* f7 S
$script_name = $_SERVER['SCRIPT_NAME'];3 l+ b. g' K. d) I
$arr = explode(".", $script_name);" J# q. I% v* c" w
$endName = $arr[count($arr) - 1];3 b; t! p% {5 s# l$ p2 K7 v, q. v
* c9 @4 A6 y' Y. u" C! u; K( N4 ^

# h) e9 E. J& z2 o* B//这些后缀结尾的url直接返回302
% u# y: T6 F$ Z$STATIC_END_NAME = array('css','xml','rss','gif','jpg','jpeg','js','axd','atom',
1 b2 ~+ X" P5 r8 C7 H: d                'mml','txt','jad','htc',. f6 j& x; M* m: {
                'png','tif','tiff','wbmp','ico','jng','bmp','svg',
. e0 `) W1 }2 l; s                'jar','war','ear','hqx','doc','pdf','ps','eps','ai',1 M$ E7 O. g) N* y: A* Z) C
                'rtf', 'xls', 'ppt', 'wmlc', 'xhtml', 'cco', 'jardiff',, i! m: V# M* \% ~0 N3 I: `
                'jnlp', 'run', 'pl', 'pm', 'prc', 'pdb', 'rar', 'rpm',
3 t+ P2 w3 O- f* N( W! e                'sea', 'swf', 'sit', 'tcl', 'tk', 'der', 'der', 'crt',. ^8 T: _+ w. q8 s2 L: Y
                'xpi', 'zip', 'bin', 'exe', 'dll' ,'deb', 'dmg', 'eot',
+ D; W2 k7 \3 x& a; ?                'iso', 'img', 'msi', 'msp', 'msm' ,'mid', 'midi', 'kar',
# t, G1 C  B# }- J                'mp3', 'ra', '3gpp', '3gp', 'mpeg', 'mpg', 'mov', 'flv',
* u% @* i" I; P! T2 `( _                'mng', 'asx', 'asf', 'wmv', 'avi');5 x. Y% b* I$ R

! ^9 S- H+ l: rif(in_array($endName ,$STATIC_END_NAME))9 O+ s6 X* ]" K/ _
{; q; y" S) w* x+ s- K6 C9 D
        $headerStr = sprintf("Location: %s", $toUrl);
5 K5 h, U: e$ u" i, c' s        header( $headerStr, true, 302);) d8 A5 ^' }" f2 ?. i9 Y1 `
        exit;
8 O& N% U% F1 {4 `! H}6 ^8 e4 b4 S$ _' _0 |0 h# d1 C! i* e

$ ?" F& l3 Z! T2 U7 C& K//一个简单的cache
/ P5 W8 H* L8 g- q% p7 Cfunction GetFromCache( $url)
' J6 ~" G% i4 c- h2 D( x" O{3 y4 [+ @2 s0 y$ c9 X1 U
    $current_dir = dirname(__FILE__);
+ k/ d5 G& O& ^  t    $cache_dir = $current_dir . "/cache/";
" {% k& ?1 B. X    if( !is_dir( $cache_dir))
- _: O$ S* A5 U  J    {
$ O# r4 _6 _: {! e( ^) ?* Z7 I0 j, j6 v9 n/ |
        mkdir($cache_dir);# M+ {9 o- [* h6 H; A9 M% S
    }
+ \, G+ ]5 g& E' p9 ~
- ]7 X" K7 c: c+ b    $cache_file = $cache_dir . md5($url);3 R- h3 L/ M0 q# s' n$ N
    if(file_exists( $cache_file))
9 f8 j! \" Y7 v/ g0 Z0 t4 ?    {
6 V8 [' n" S- l$ R$ {) \8 ^        $html = file_get_contents( $cache_file);
2 ^+ n: R: `& Z( e# E        if($html == false)3 y9 R) n( i0 ~, g5 `3 \
        {$ ~7 Y$ J  d( G, x) }9 o
            $html = "";7 z* F+ Q* r/ X; c& P
        }
8 O. ?& M# m& c- w7 O    }else
8 i+ ]5 M6 _5 ?- f    {: z' @; }/ y- e/ L
        //访问原始网站
3 |( P% g; j" }2 P# T; H        $data = http_get($url ,array('redirect' => 5, 'timeout' => 10), $http_info );
8 T! C3 y: i8 }' n# a# G1 q, A1 F        $message = http_parse_message($data);
% N3 W$ L6 i' {9 w
& z  E0 }  F* I2 T        $html = trim($message->body);; Z& \7 {3 j) b6 m9 }0 g

5 o0 R, H$ P+ ^' E* ]        file_put_contents( $cache_file, $html);
" ]% j5 e8 b6 b, ~    }% X! u7 D+ f# D

; b) ~& l4 g. y) g- T4 a; w- W    return $html;
# g* P2 @1 T6 q8 ^}2 r/ C0 a- N2 D) v3 I
, J$ Z2 n- J4 i- {
$html = GetFromCache( $toUrl );
8 }4 L! s1 g5 t9 o4 \2 ]% m% E
9 ~; ^* R+ j" M+ P7 G& @
  O. }/ Y+ P3 }; b$ a- f$html = str_replace("circleid.com", "circleid.us", $html);
3 i6 ~6 o1 u2 I& W7 g( E% @
& k. ]& l6 A5 ?$ I$html = preg_replace('/<meta name=.*>/', "", $html);
* {" Q+ R4 L/ Z! j1 |/ B& b
( d, C% f) [/ d& D' u. K% r' G2 J9 `, F' u' W& H
//注释的这两句是用phpquery操作( r+ M: Q* `( B# g7 U
//$body = htmlqp($body)->find('#header')->remove()->html();) g! V( b  w( |; v& }, s+ F- M
//$html = htmlqp($html)->find('#header')->remove()->document->saveHTML();
4 x3 q' H  `3 P. v( P. p5 J, v% r, C. K0 W& b$ V
$script = <<<EOD. O4 V- w" c- U+ g
<script>% n( e' Y' M0 S  `
$(document).ready(function() {0 e8 {2 ]) @3 I2 A1 w! U
                $("#footer").remove();
  |, a5 w; o/ i! D1 A  Y( E' ~8 z9 b) [" s, u
});
2 \% b) S4 Y% I2 f5 b8 C1 i5 ~5 I, I  \: x/ J
</script>( d$ W$ W, P1 V( t9 K: V

# C/ l9 d5 U/ |3 lEOD;
# i7 m2 l& F3 ?  `
' m& d8 m1 G9 P; M% Uecho($html . $script);+ ^4 O  v. S/ b2 a# e
) p& u8 g, D% Z6 d* p# |; V

1 a8 ^7 U" Q6 C, N. b8 a. c三、最后
% ?0 r  S- l) F, X1.总之,这个程序还很简陋,没有处理post和cookie参数,也没有配置管理模块,距离大洲的程序差距有一个大洲那么大,仅适合稍微懂点程序又有点好奇心的新手玩玩
5 |3 Z9 ?; S9 b- P0 Y8 |3 e* c2.最后当然是希望大家不令赐分啦,您的论坛币是我继续分享的动力,哈哈1 p6 T3 a+ |$ X5 {
. w! M+ C8 R$ M, V- d6 n

评分

参与人数 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

主题

643

广告币

1247

积分

高级会员

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

使用道具 举报

33

主题

57

广告币

309

积分

初级会员

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

使用道具 举报

21

主题

1030

广告币

2441

积分

论坛嘉宾

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

使用道具 举报

13

主题

303

广告币

569

积分

中级会员

积分
569

社区QQ达人

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

使用道具 举报

22

主题

431

广告币

602

积分

中级会员

积分
602

社区QQ达人

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

使用道具 举报

5

主题

50

广告币

168

积分

初级会员

积分
168

社区QQ达人

 楼主| 发表于 2013-5-22 21:21:05 | 显示全部楼层
chinafla 发表于 2013-5-22 19:15 3 V  B) b8 k% E7 l
随便找一个proxy代码 功能以去掉 什么都齐全了。。。
0 ?9 e$ a7 F& |" z# ~
是的,其实就是个web proxy,重要的是替换模块的创意和玩法。
! j/ P/ G  ]9 h9 G我觉得大洲最NB的一点就是把配置管理和站群管理做的很方便,另外就是把替换功能做成插件化,这些边边角角的活看起来没啥技术含量,但是做过产品的人都知道很劳心劳力的

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

1

主题

9

广告币

42

积分

初级会员

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

使用道具 举报

14

主题

179

广告币

280

积分

初级会员

积分
280

社区QQ达人

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

1 l: n+ `/ J' m
/ g" I- o# f- h$ b3 p源网站如果有防盗链的,就不行了。
9 M  ~# j5 Z, K, h8 ?
危害性
& T" S# P% Y% l$ E8 G1 M
: ~* `) o6 W0 r% ]* o6 ]" K5 |302重定向很容易被搜索引擎误认为是利用多个域名指向同一网站,那么你的网站就会被封掉,罪名是“利用重复的内容来干扰Google搜索结果的网站排名”。因为302重定向经常别用于做url劫持,黑帽seo技术中,而且百度在处理302重定向技术还不成熟,经常将它纳入到黑帽seo的范畴中,而google对这方面识别处理就完善了许多。所以302重定向在现阶段的搜索引擎技术中,还是容易导致网站降权的,尽量不用。但从seo、网站优化方面来说是弊大于利。
回复 支持 反对

使用道具 举报

45

主题

781

广告币

1433

积分

高级会员

积分
1433
发表于 2013-5-23 06:42:39 | 显示全部楼层
没看懂,楼主你抓取的html是永久保存在服务器硬盘吗?还是用户访问每次都抓或者缓存?8 a6 `" e% Y% s- p; N
抓来的页面模板要重新设计吗?觉得最后还是要能赚钱。伪原创?
回复 支持 反对

使用道具 举报

111

主题

558

广告币

1220

积分

高级会员

积分
1220

社区QQ达人

发表于 2013-5-23 09:11:53 | 显示全部楼层
一个NGINX就搞定了 效率还高
4 Q( D6 c7 ~+ J) H6 H) m$ I简单的替换有相应模块
回复 支持 反对

使用道具 举报

4

主题

1204

广告币

1236

积分

高级会员

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

使用道具 举报

5

主题

50

广告币

168

积分

初级会员

积分
168

社区QQ达人

 楼主| 发表于 2013-5-23 09:38:36 | 显示全部楼层
hudba 发表于 2013-5-23 06:42 : i' |& J, {, A  _, r
没看懂,楼主你抓取的html是永久保存在服务器硬盘吗?还是用户访问每次都抓或者缓存?
" M7 d$ O! t: w) X! b+ x6 N抓来的页面模板要重 ...
2 C% q. s% q, X% A" B: S9 P5 h
这个代码里的cache主要是做demo,是存在硬盘里的,实际使用中你完全可以用memcache或数据库代替,cache的过期策略也可以自己控制
回复 支持 反对

使用道具 举报

1

主题

750

广告币

690

积分

中级会员

积分
690

社区QQ达人

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

使用道具 举报

8

主题

130

广告币

191

积分

初级会员

积分
191

社区QQ达人

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-10-5 23:00 , Processed in 0.080761 second(s), 23 queries , Gzip On.

Copyright © 2001-2026, AdvertCN

Proudly Operating in Hong Kong.

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