找回密码
 立即注册

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老户
海外CL企业户源头最大欧洲Nutra网盟BA找量 FB高权重耐操个号⚡️稳定过审GG,FB,TK, 欧美源头, 欢迎合作❤️
FB企业户海外户,授信户,TK加白户联盟收款/海外资金下发/服贸结汇⚡️Spend.net — 美元卡仅需$0⚡️✔Taboola海外户
广告位出租8500万高质量住宅IP,助力各种需求虚拟卡返佣1%,国内持牌机构 
查看: 22556|回复: 15

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

[复制链接]

5

主题

50

广告币

168

积分

初级会员

积分
168

社区QQ达人

发表于 2013-5-22 18:49:44 | 显示全部楼层 |阅读模式
大洲的小偷程序非常让人眼馋,无奈本diao丝程序员,一无RMB,二无论坛币,只能望洋兴叹,所幸我有web程序开发的经验,对于这个小偷程序的基本原理能猜到不少,本着自力更生,服务大众的精神,我自己实现了一个简易版,在此开源给大家,希望能赚点论坛币,早日进入email版见见世面。# W/ ?# g! K4 z  P/ H$ k
4 p( Q* s9 @5 W) b) A, _3 K
一、原理" u  Y6 _  V& K' v  S) D4 l
1.用户访问流程:
; x' b+ Y- q  c3 S# a. k  p. L  U0 ~# h(1)用户访问我们的冒牌站(A.com)" {' y. Q. D) t! B; g9 r
(2)网站后台程序根据用户的query参数(包括get/post/cookie)构造原始网站B.com的url,用后台程序去访问该url,此时可以拿到原始网站的html和header输出。这里有一点需要注意的是原始网站输出的头也不可以忽略,里面的set-cookie信息也可以转发给用户的,这样就可以实现注册和登陆原网站啦。
5 L7 d/ T; z  B# ?(3)对原始网站的html输出和header输出按某些规则做替换,比如把某些广告去掉啦,把B.com的地址替换成A.com啦,其实这一步是最关键的,也是玩法最多最好玩的部分1 R9 J  ?, d( W, C; h! U
(4)将替换后的html和header输出给用户。
$ n( `( O( U1 J- O; [
: D/ v% D5 L0 {/ S1 `2.规则替换的几种玩法:
% e* w: g$ q# M( J2 E# d(1)最简单的当然是字符串和正则表达式了,这就不多说了
, L* F, U, J2 P" C' ](2)用html解析库对html的dom节点做操作,然后重新生成html,比如可以把页面中的text node翻译成另一种语言,或者做文章重写,这样比较容易逃过搜索引擎的法眼。
9 N, I9 }. p$ v  F# D6 a据我所知每种语言都由若干个html库,比如php的有DOM、phpQuery等,java的有htmlcleaner等
4 c+ Y+ w4 x+ \  s( g$ p(3)在原始html代码的后面加入一些javascript代码,用来隐藏一些页面元素,或加入一些广告代码等8 x" G# |, d3 M# h  w* ~$ m+ c* i
* Z* e8 _$ [7 W
3.关于速度和性能:
% q. I- ]; _) J5 o/ U(1)提到性能第一个想到的当然是缓存啦,我觉得最适合加缓存的地方就是上文1.1.2中提到的生成原始网站url后,这里可以对原始url做md5编码,访问一次改url后就把它的内容和头存到硬盘上,这样就不用每次都去原网站拉取了。做缓存的另一个好处是不用担心被原网站屏蔽。' U% c) B! E+ E; U
$ e& w& ~6 x: \; [9 O, ?7 ]
(2)对于css,图片,js等静态文件,其实不用每个文件都让php访问原网站拉取,可以直接返回个302,让浏览器直接去原网站拉取。
& v( Q2 s- t+ S  A9 y
4 R5 g! ^1 H! F! B9 w! s( F
! K2 W  b8 V. r# k& t; C8 u9 x( R二、实现
) Z! M* z8 @) Y5 E: H; @- T- A1.程序语言:/ [  s# ^4 v2 T  u
其实这个东西哪种语言都能搞定,也都不麻烦,我对php比较熟,就选了php。
- g+ l: e0 m- S3 S1 }2.一些准备工作:/ t. c' Y! @/ V" J: S# u
(1)修改apache的rewrite规则,因为我们的程序只有一个文件,我们必须把所有接收到的请求都重定向到这个文件,这里我假设重定向到index.php,在apache的<VirtualHost>中加入这几句,如果是虚拟主机的话就修改.htaccess吧,不过我没试过,所以不知道怎么写re它的write规则
: m. i6 G* V1 `7 d' C RewriteEngine on
0 m+ O: u9 D' v! e9 l! G8 r RewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME} -s [OR]
' _1 ?# Z" ?- A" h) F$ F  dRewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME} -l [OR]1 C1 C# i8 H) C" h
RewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME} -d
# m' e$ |( U4 a: e9 c2 f7 m# s RewriteRule ^.*$ - [NC,L]
3 S9 d5 q2 i. S RewriteRule ^.*$ /index.php [NC,L]5 D6 b6 y- }& Q4 N# B" L4 O* z
( i% f) A% N" D+ Y5 m* r, j6 F
(2)安装php的http模块# i! Y: H2 W2 }+ s; b+ ?- `
php发http请求的函数库找了好几个,发现http模块是用起来最简单的,不过需要你会linux操作哦,安装方法在这里http://php.net/manual/en/http.install.php$ M2 k3 h$ c- z* Q- Q# t
ps:如果安装不上或没有vps,请把下面程序的http模块的函数换成phpcurl等http lib
! O- ^0 Y2 ^3 k) U( n% I8 p7 e" B: e
3.index.php的代码:
5 s* p  }1 M" J/ _' Q4 Q) S5 G3 y8 _# A2 W9 ], A( h. i- O

+ ^3 D0 v: ]7 y' ~, m5 Q$host = $_SERVER['HTTP_HOST'];
3 r1 \/ ]9 a5 z8 ^7 \//这里把假站的域名替换成原始网站的,用于生成原始url( T5 r; }: o3 ~2 L
$host = str_ireplace('fake.com', "true.com", $host);# J+ U; _6 z! }' ?' n
$toUrl = sprintf("http://%s%s", $host,$_SERVER['REQUEST_URI']);$ I: |' p5 G4 e7 F- L# `6 @2 C

  b- B5 N* P2 @$script_name = $_SERVER['SCRIPT_NAME'];7 y, ~/ s: |" q" m6 p
$arr = explode(".", $script_name);5 {' {4 z+ ?5 Z2 ?" q& I/ n
$endName = $arr[count($arr) - 1];
2 x! m* J' B) X+ m0 e, v1 I  H7 Q
2 k, g- P' [# ?: _% F8 J- |' P
0 v1 s3 o  u0 U- V- C2 o//这些后缀结尾的url直接返回302
6 b8 s' i- ]0 M/ n4 R$STATIC_END_NAME = array('css','xml','rss','gif','jpg','jpeg','js','axd','atom',: N+ D; F/ U$ k: v2 T
                'mml','txt','jad','htc',
  i: p1 K2 U' x/ `8 H% v' n1 F                'png','tif','tiff','wbmp','ico','jng','bmp','svg',6 i$ B  B4 C6 L" \! @9 v
                'jar','war','ear','hqx','doc','pdf','ps','eps','ai',6 u# e3 b7 K: y
                'rtf', 'xls', 'ppt', 'wmlc', 'xhtml', 'cco', 'jardiff',
" R, g- v3 G  F' R2 Y& N! w0 x                'jnlp', 'run', 'pl', 'pm', 'prc', 'pdb', 'rar', 'rpm',
( o: {* }& @/ ]" M# J8 x                'sea', 'swf', 'sit', 'tcl', 'tk', 'der', 'der', 'crt',
+ e/ q5 q7 N- C6 b$ C                'xpi', 'zip', 'bin', 'exe', 'dll' ,'deb', 'dmg', 'eot',
/ c( Q3 `% ]9 U1 ^9 o5 f$ E) u# B                'iso', 'img', 'msi', 'msp', 'msm' ,'mid', 'midi', 'kar',3 ^4 O2 }: Z  k) E
                'mp3', 'ra', '3gpp', '3gp', 'mpeg', 'mpg', 'mov', 'flv',- P/ m$ u$ X+ S  _: R. Y8 J
                'mng', 'asx', 'asf', 'wmv', 'avi');( Z- r" X; Z3 h" B7 o/ O4 l

2 c% I4 O1 q( F# C1 T! k1 zif(in_array($endName ,$STATIC_END_NAME))
- |* G; v9 V# P# D{
/ n) w8 _+ M4 m6 N# h5 l* P5 S  i        $headerStr = sprintf("Location: %s", $toUrl);. M6 M3 {2 I$ J7 {( q4 F
        header( $headerStr, true, 302);
: Z- t- L/ g* N- u- X; d5 {        exit;
6 I8 c# x& F% H/ U& I}( l6 g" D! R1 V/ V# q

0 a( g) U0 E4 w0 g" T+ u//一个简单的cache
- n! Z/ G3 M$ m4 G  z6 v1 {7 qfunction GetFromCache( $url); W/ g6 k3 |& E8 F0 `
{
  a) g, I0 \1 {, Z7 O; Q4 B    $current_dir = dirname(__FILE__);
- p6 a5 Z: g& c' @0 k- G" H3 t  n    $cache_dir = $current_dir . "/cache/";
/ E; _, c8 y) q# x. P    if( !is_dir( $cache_dir))
- {8 \0 D2 @5 n5 m' U% A  e: B    {
/ w' G" {* G: r
9 L. w/ X3 I8 Q        mkdir($cache_dir);$ Q4 l' ?" v- L* _+ N
    }3 m+ l* t5 L! A7 f& `7 _
8 a- r. F: v: r1 r) b
    $cache_file = $cache_dir . md5($url);, s- Q$ `  r5 j; ^9 A# x
    if(file_exists( $cache_file))4 D! j7 y+ ~  ^8 m6 C% Q
    {7 @4 O; n1 N* {1 |! s* k
        $html = file_get_contents( $cache_file);
. {: \2 B$ a: A( U$ U        if($html == false)
- S, e+ B& j9 u0 W        {& x0 ]! h& z  e6 C+ ?0 M) a$ s
            $html = "";
1 B$ C% `9 O0 m6 Y" H' W        }( _; o/ c1 |& p5 {7 g" G8 H
    }else& Q+ A, q- W3 O0 c; F
    {/ d' q0 N& z. K2 L& E
        //访问原始网站
  {, `4 F" V: [5 V        $data = http_get($url ,array('redirect' => 5, 'timeout' => 10), $http_info );
* Z5 N) ]9 {0 e5 x# L7 e# G  _        $message = http_parse_message($data);" V. I9 C2 k; l3 X. W7 G. v
6 u  B- X. T- g6 T' g
        $html = trim($message->body);
3 V; C; H9 }8 p
2 I3 g- p3 L# h        file_put_contents( $cache_file, $html);/ U  I$ l  E6 e% G3 k/ A) I4 M
    }; r# w! j3 i& g
% Y8 Q) o/ L/ X# Q  B
    return $html;# q& X5 u- o- b: q( W% E5 |
}+ t4 H& m6 R* J; }$ L

/ F/ @0 u+ [/ p; }( B$html = GetFromCache( $toUrl );
0 o- @, r6 k3 c5 F/ a- }
# O, e  E( m8 j
) R# C& @/ n( r/ J7 r& |$html = str_replace("circleid.com", "circleid.us", $html);7 C, S: |5 V" E: e

9 C; R/ X2 X& n, C* j  Z$html = preg_replace('/<meta name=.*>/', "", $html);
3 B4 K- _; f9 W/ w' ^2 E
6 E( Y( Z. T2 \, T; r( s& i& }$ D! u% a
//注释的这两句是用phpquery操作
  n( e. f* |% N) Z: G3 }. Q% P//$body = htmlqp($body)->find('#header')->remove()->html();$ D7 X4 B3 r4 {" U* P! A
//$html = htmlqp($html)->find('#header')->remove()->document->saveHTML();
  T7 ?, R" G, Y3 U) y2 l/ m3 Y% m7 }% k$ x2 [
$script = <<<EOD) g3 e+ O& E) x3 r
<script>
! f" H& f/ b+ E3 r# k$(document).ready(function() {: p* A5 w0 B% C( W: C/ R$ ]
                $("#footer").remove();' y& y3 L% [) r
5 D5 J( w: N1 u, _+ F
});, E* {/ [: i! {" G; G% w3 F% C
5 i# ?) ?, Y* A* X, C! D  t0 y
</script>; |+ ]- |5 f8 Q/ ?; d

9 Q# \: `# |: r. H7 a  n$ G: X+ NEOD;
% p8 T6 h$ r6 A1 Q( i" V: q; v2 j) n# r+ i8 ]% Q6 J6 R( \- \  M5 t
echo($html . $script);
6 m, C! ]6 W; C" ^, l' E1 e
) p3 G  F  }( l/ h. V3 b2 e" H+ D3 s& M3 x- r: y
三、最后6 D' @* D* {2 S& y3 D/ @
1.总之,这个程序还很简陋,没有处理post和cookie参数,也没有配置管理模块,距离大洲的程序差距有一个大洲那么大,仅适合稍微懂点程序又有点好奇心的新手玩玩+ p7 {9 x" A6 q/ \9 |. Q
2.最后当然是希望大家不令赐分啦,您的论坛币是我继续分享的动力,哈哈
0 Y2 I3 U% P, w9 o. a- c* F# @( x

评分

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

积分

高级会员

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

使用道具 举报

33

主题

57

广告币

309

积分

初级会员

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

使用道具 举报

21

主题

1028

广告币

2440

积分

论坛嘉宾

积分
2440
发表于 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 7 H% \! K7 O& H# L, J
随便找一个proxy代码 功能以去掉 什么都齐全了。。。
  ]: |1 s- `  f' U8 @& U. W/ C* G9 D
是的,其实就是个web proxy,重要的是替换模块的创意和玩法。: x& ~! I+ f  s+ m7 ~6 j7 a% q
我觉得大洲最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,让浏览器直接去原网站拉取。

3 ?( x7 a# C; f8 h9 ?% e
+ m. H. _( }, z源网站如果有防盗链的,就不行了。# n+ E* d& y- X5 b
危害性
3 o: G! L- ?, v1 P7 Q5 H0 w
$ L( J0 E! A5 t, j5 J302重定向很容易被搜索引擎误认为是利用多个域名指向同一网站,那么你的网站就会被封掉,罪名是“利用重复的内容来干扰Google搜索结果的网站排名”。因为302重定向经常别用于做url劫持,黑帽seo技术中,而且百度在处理302重定向技术还不成熟,经常将它纳入到黑帽seo的范畴中,而google对这方面识别处理就完善了许多。所以302重定向在现阶段的搜索引擎技术中,还是容易导致网站降权的,尽量不用。但从seo、网站优化方面来说是弊大于利。
回复 支持 反对

使用道具 举报

45

主题

781

广告币

1433

积分

高级会员

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

使用道具 举报

111

主题

558

广告币

1220

积分

高级会员

积分
1220

社区QQ达人

发表于 2013-5-23 09:11:53 | 显示全部楼层
一个NGINX就搞定了 效率还高
+ v! F0 M7 K4 g# |简单的替换有相应模块
回复 支持 反对

使用道具 举报

4

主题

1203

广告币

1235

积分

高级会员

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

使用道具 举报

5

主题

50

广告币

168

积分

初级会员

积分
168

社区QQ达人

 楼主| 发表于 2013-5-23 09:38:36 | 显示全部楼层
hudba 发表于 2013-5-23 06:42 0 y3 N& }" x1 i- b: J
没看懂,楼主你抓取的html是永久保存在服务器硬盘吗?还是用户访问每次都抓或者缓存?) T; Q0 @3 m. y7 |+ S
抓来的页面模板要重 ...
1 {! e3 Z5 f1 y: |" |0 n5 c
这个代码里的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-8-11 20:41 , Processed in 0.078814 second(s), 24 queries , Gzip On.

Copyright © 2001-2026, AdvertCN

Proudly Operating in Hong Kong.

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