找回密码
 立即注册

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%,国内持牌机构 
查看: 22717|回复: 15

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

[复制链接]

5

主题

50

广告币

168

积分

初级会员

积分
168

社区QQ达人

发表于 2013-5-22 18:49:44 | 显示全部楼层 |阅读模式
Binom_AdvertCN
大洲的小偷程序非常让人眼馋,无奈本diao丝程序员,一无RMB,二无论坛币,只能望洋兴叹,所幸我有web程序开发的经验,对于这个小偷程序的基本原理能猜到不少,本着自力更生,服务大众的精神,我自己实现了一个简易版,在此开源给大家,希望能赚点论坛币,早日进入email版见见世面。
# q0 T  z5 g) u; \3 v& }- p- ^, w3 A+ K
一、原理! `* n( W1 v; }7 U5 W6 Z
1.用户访问流程:
1 w9 h* a- N. j) H# T8 ]% L(1)用户访问我们的冒牌站(A.com)
+ _0 ]- H& @+ M) N* [7 c7 c) w(2)网站后台程序根据用户的query参数(包括get/post/cookie)构造原始网站B.com的url,用后台程序去访问该url,此时可以拿到原始网站的html和header输出。这里有一点需要注意的是原始网站输出的头也不可以忽略,里面的set-cookie信息也可以转发给用户的,这样就可以实现注册和登陆原网站啦。. \4 [/ w% }: ?- j8 W; \
(3)对原始网站的html输出和header输出按某些规则做替换,比如把某些广告去掉啦,把B.com的地址替换成A.com啦,其实这一步是最关键的,也是玩法最多最好玩的部分  D+ x, A5 [4 H( o/ z- P
(4)将替换后的html和header输出给用户。6 T4 @8 p4 n) }$ }! O+ i, M5 Z8 s
( y9 A# ^( s2 @. q/ a, }
2.规则替换的几种玩法:
" S3 T1 G! P" L' }0 k(1)最简单的当然是字符串和正则表达式了,这就不多说了; l* Y1 n7 I$ f* V! U
(2)用html解析库对html的dom节点做操作,然后重新生成html,比如可以把页面中的text node翻译成另一种语言,或者做文章重写,这样比较容易逃过搜索引擎的法眼。
8 H% m' x! f, B6 H6 W7 o. h+ y5 Q+ X1 ]据我所知每种语言都由若干个html库,比如php的有DOM、phpQuery等,java的有htmlcleaner等) i2 G4 L9 t4 i: v' c9 v
(3)在原始html代码的后面加入一些javascript代码,用来隐藏一些页面元素,或加入一些广告代码等
% K$ A& q1 x' a2 j/ T7 R% B
/ s6 G8 Z6 @" v% ]" U+ t+ z3.关于速度和性能:
$ g. T) ]8 Q( _7 e1 B/ Y(1)提到性能第一个想到的当然是缓存啦,我觉得最适合加缓存的地方就是上文1.1.2中提到的生成原始网站url后,这里可以对原始url做md5编码,访问一次改url后就把它的内容和头存到硬盘上,这样就不用每次都去原网站拉取了。做缓存的另一个好处是不用担心被原网站屏蔽。4 Q1 F6 v( Y+ u( r& [. i: _
& @: d0 S& H) J
(2)对于css,图片,js等静态文件,其实不用每个文件都让php访问原网站拉取,可以直接返回个302,让浏览器直接去原网站拉取。
5 k% ^7 e! b2 l' ?8 |: \
, X' I) ~! Y- h: R1 |) V/ J
) E( t1 V. R/ _0 z9 L" }; w5 E二、实现5 k5 L" m: I6 M, S/ H
1.程序语言:
  _$ R  n" o6 J' h其实这个东西哪种语言都能搞定,也都不麻烦,我对php比较熟,就选了php。, Q; n  U; W8 Q% M
2.一些准备工作:
& ?% \% z* T0 X, D) B. D(1)修改apache的rewrite规则,因为我们的程序只有一个文件,我们必须把所有接收到的请求都重定向到这个文件,这里我假设重定向到index.php,在apache的<VirtualHost>中加入这几句,如果是虚拟主机的话就修改.htaccess吧,不过我没试过,所以不知道怎么写re它的write规则3 d4 d' k0 j7 m# {! s+ Q. i
RewriteEngine on
* h  ?' ?2 @$ m2 Z4 a  G RewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME} -s [OR]7 R! F: E: a: o+ u9 t7 @
RewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME} -l [OR]
; g; ?- v/ S" T) ` RewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME} -d
' x/ r, s- Z' ?/ Y5 J( O' s RewriteRule ^.*$ - [NC,L]! f- g6 a" R0 F9 L/ Y
RewriteRule ^.*$ /index.php [NC,L]
2 J2 P' P) {0 }. ^# e3 S
; T7 A: [9 m3 Q(2)安装php的http模块* t9 ?9 a0 G5 V4 X1 w- ^
php发http请求的函数库找了好几个,发现http模块是用起来最简单的,不过需要你会linux操作哦,安装方法在这里http://php.net/manual/en/http.install.php& h( ^: w7 l9 b
ps:如果安装不上或没有vps,请把下面程序的http模块的函数换成phpcurl等http lib" w3 ~% H; y: k) O0 ~

+ v) K) h0 m$ M7 u$ j3.index.php的代码:" L  a( q( l( w7 G: _% y

: g9 ?; e# r$ t1 \) _/ ]( R4 `
, ^. K6 t" m$ i4 {& T$host = $_SERVER['HTTP_HOST'];
1 Q0 y& J: B3 N5 [: n6 H//这里把假站的域名替换成原始网站的,用于生成原始url
. i* E2 ~& i4 m1 T$host = str_ireplace('fake.com', "true.com", $host);
2 g4 j# `+ A3 l6 Y3 ?$toUrl = sprintf("http://%s%s", $host,$_SERVER['REQUEST_URI']);
6 N5 G+ m/ M- P- c% D. Y/ l; F( d1 R+ j5 g; k$ P) D5 D! |
$script_name = $_SERVER['SCRIPT_NAME'];! U% l% q. [. f2 ?
$arr = explode(".", $script_name);
; O1 @, h& O7 D% O6 S: ?$endName = $arr[count($arr) - 1];
7 }1 K- Y$ F/ w. p& L& s2 l$ \, z$ z$ a, N! S3 U; i

- B- M/ ?5 C  g' z' y6 l, y//这些后缀结尾的url直接返回302' p; r' l. n8 J- g3 S9 Y
$STATIC_END_NAME = array('css','xml','rss','gif','jpg','jpeg','js','axd','atom',) h1 y5 M+ L1 V4 v" ~+ {" Q' r
                'mml','txt','jad','htc',' y( }/ c  g8 p! l0 v7 G* b
                'png','tif','tiff','wbmp','ico','jng','bmp','svg',
( Y$ `$ K. J) D- [3 h  I# x: A3 c( [                'jar','war','ear','hqx','doc','pdf','ps','eps','ai',( N# i/ q! M9 ?3 g1 R8 O$ Q1 k4 U4 M
                'rtf', 'xls', 'ppt', 'wmlc', 'xhtml', 'cco', 'jardiff',
7 i+ i  \7 z' z+ m( ^4 t. y/ s( f                'jnlp', 'run', 'pl', 'pm', 'prc', 'pdb', 'rar', 'rpm',% {) L' x* c% g4 x) s
                'sea', 'swf', 'sit', 'tcl', 'tk', 'der', 'der', 'crt',
, V1 J$ {' }$ g' k                'xpi', 'zip', 'bin', 'exe', 'dll' ,'deb', 'dmg', 'eot',
2 S, K- F3 A# G/ V- Y6 ~* ?0 J                'iso', 'img', 'msi', 'msp', 'msm' ,'mid', 'midi', 'kar',
5 V+ Z, n3 p; P' `                'mp3', 'ra', '3gpp', '3gp', 'mpeg', 'mpg', 'mov', 'flv',
0 f5 N1 a* N4 I; q( T# k, V! |                'mng', 'asx', 'asf', 'wmv', 'avi');1 M& E" T. t# m( R  B

# V' t) n- a1 O: H% y7 Vif(in_array($endName ,$STATIC_END_NAME))+ o5 f) t* V9 v# z
{
2 ^- \0 v( Q" }0 Z' u9 c; h- l        $headerStr = sprintf("Location: %s", $toUrl);
" Y# Y  V' g! ^$ Q. e+ Q. i1 i        header( $headerStr, true, 302);
7 V/ m+ c4 K! E7 q        exit;
( K3 A6 w- \$ |* E7 E. j}
. Z% F2 V, G2 D% N
9 t: O; h  v$ ^: R) n: K* r9 i//一个简单的cache
( t* _( `, H. u: Rfunction GetFromCache( $url), m/ a# q) r4 z4 ~# R, D8 g( y# l
{, @! D8 T! Y% {; j7 l2 S) h
    $current_dir = dirname(__FILE__);, N: v3 Z8 Y; j: j
    $cache_dir = $current_dir . "/cache/";
+ U" e6 n, f* d+ K    if( !is_dir( $cache_dir))
2 @/ b0 @; n5 ?+ k8 u$ n9 ]    {
% `4 t- f; l% I$ x. x  F
! V# |: a5 p7 [7 e& I) \        mkdir($cache_dir);
. `0 @0 d2 N+ r5 D, O% F4 D( Q    }
, H# T7 `' i# u& e8 W1 |4 y" T3 b; U+ n6 n' Y. F8 e% T
    $cache_file = $cache_dir . md5($url);
! }' i) o, Y, n/ O' A    if(file_exists( $cache_file))
: I, W4 C8 m' `) K0 p' s4 U- Z) P    {
0 U) c8 p4 d+ s: d3 |- b2 v" o        $html = file_get_contents( $cache_file);3 R: g. \, a! G
        if($html == false)
8 p6 I# z/ }6 N% w( a        {
* @1 x. d" ]% w2 H; `7 L            $html = "";
1 F" ]: X1 \; ^$ Y6 R% D# ~        }- C# X1 a4 h' R' Q5 _. j. P
    }else
- t% ^: K6 u- [, L. ]2 c3 m  X) O    {
! b6 A+ t0 e: t4 M8 i! k        //访问原始网站- G" ^0 `. m5 l# c7 G% c
        $data = http_get($url ,array('redirect' => 5, 'timeout' => 10), $http_info );
: u* B* C" _/ C' [: N7 d3 B. }        $message = http_parse_message($data);5 l4 |: R$ D* C, E- B* q7 q
/ z* X8 h5 Q9 k( l
        $html = trim($message->body);
, g' N  D3 v* ^5 X; ]0 a% |+ e) J, i  }! h
        file_put_contents( $cache_file, $html);
/ l  y2 t6 P8 `6 o! W" ^    }
2 `) T/ Z; h: ]& x# m
* L. {. r* R& i% n    return $html;8 ]# y& ]& w' W7 a/ H% r! B6 t$ P
}
  [& y7 w2 L& Y6 y; Y6 l; o9 W4 P' P+ t" U- E0 U
$html = GetFromCache( $toUrl );
0 r/ L* ]' X  f' S, E/ Q1 e, Y& h: `' ?* W* D* w' K" L- B
! q% C' ]3 s  I5 p
$html = str_replace("circleid.com", "circleid.us", $html);
( y; e; F5 g3 D  @# F- ]& [4 ~
: [& Y% o2 ^6 K& E$html = preg_replace('/<meta name=.*>/', "", $html);
, ?5 O) ?+ U9 G" A* D4 Y
7 u! |) T; j  |- y: d' ?7 S) D  B( f2 x+ a2 F! R/ q$ I! ]1 L
//注释的这两句是用phpquery操作9 A+ K: I9 g: R0 \
//$body = htmlqp($body)->find('#header')->remove()->html();
1 s/ c( ]2 p% E) T6 S5 b: s$ [; Z% `& m//$html = htmlqp($html)->find('#header')->remove()->document->saveHTML();# Y6 g& N/ f1 `$ @) w

) t, ?8 W  P0 Q0 y) e5 E- h2 t$script = <<<EOD: e6 V) E) Z" s% |" h
<script>, f3 y5 Y4 V9 F1 j3 t4 ~
$(document).ready(function() {
# y- U3 P. f- w1 T* R' ]                $("#footer").remove();
. @/ |$ Y+ [9 N
: W4 x# \; Y" s3 m});( x! U4 @1 `$ K( X+ h: F, a! O5 {2 K
' [- D) d- A/ A6 X! _8 Q
</script>
8 i+ _8 z6 v! }2 m$ y
! a$ L+ ]) F7 f/ V& n5 VEOD;$ I; q, b9 s  s+ h# z$ {( c# r
) I5 L) d, V3 d8 ^6 ?
echo($html . $script);) F6 s5 N" }5 [- u! x" A
0 |2 R, v. d& p6 O

( G2 E, Z/ H5 {2 J) p) k) d三、最后
8 h* F; V* Z" m! P" d1.总之,这个程序还很简陋,没有处理post和cookie参数,也没有配置管理模块,距离大洲的程序差距有一个大洲那么大,仅适合稍微懂点程序又有点好奇心的新手玩玩
' j% H# u1 ]2 q2.最后当然是希望大家不令赐分啦,您的论坛币是我继续分享的动力,哈哈
9 r& s% _: o/ ?7 O' {- z4 e6 C  D7 p2 b3 Y

评分

参与人数 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 ^0 ~& M' W* Z1 U7 ]随便找一个proxy代码 功能以去掉 什么都齐全了。。。

; A% T; V* V2 k- A" }' O3 U是的,其实就是个web proxy,重要的是替换模块的创意和玩法。
+ W' d+ i: p' v我觉得大洲最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,让浏览器直接去原网站拉取。
8 Q8 S2 T& L+ i: s- n
3 ?( {8 g  h. }# x- H: z
源网站如果有防盗链的,就不行了。
! s' d( C0 s' C) T# b% o, m+ e8 k6 T* |
危害性
: a6 K, k8 d* H9 q0 P5 F. C* U
) v4 N2 v  F( A- B# s/ o: [302重定向很容易被搜索引擎误认为是利用多个域名指向同一网站,那么你的网站就会被封掉,罪名是“利用重复的内容来干扰Google搜索结果的网站排名”。因为302重定向经常别用于做url劫持,黑帽seo技术中,而且百度在处理302重定向技术还不成熟,经常将它纳入到黑帽seo的范畴中,而google对这方面识别处理就完善了许多。所以302重定向在现阶段的搜索引擎技术中,还是容易导致网站降权的,尽量不用。但从seo、网站优化方面来说是弊大于利。
回复 支持 反对

使用道具 举报

45

主题

781

广告币

1433

积分

高级会员

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

使用道具 举报

111

主题

558

广告币

1220

积分

高级会员

积分
1220

社区QQ达人

发表于 2013-5-23 09:11:53 | 显示全部楼层
一个NGINX就搞定了 效率还高. T0 C; Z( K+ J9 S& i. @0 G) ], y
简单的替换有相应模块
回复 支持 反对

使用道具 举报

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 ; Y8 C0 g4 C3 u9 ~* s
没看懂,楼主你抓取的html是永久保存在服务器硬盘吗?还是用户访问每次都抓或者缓存?
$ _! M: i4 X, `+ p抓来的页面模板要重 ...
1 M5 H4 S1 O3 q  j9 \
这个代码里的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-3 23:54 , Processed in 0.107001 second(s), 28 queries , Gzip On.

Copyright © 2001-2026, AdvertCN

Proudly Operating in Hong Kong.

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