AdvertCN - 广告中国

 找回密码
 立即注册

QQ登录

只需一步,快速开始

PropellerAds
Google-Bing-Mediago-Criteo开户
⚡️按条S5代理⚡️静态⚡️独享⚡️5G广告专用虚拟卡/U充值/高返点皇家代理IP⚡️#1性价比⚡️
Mediabuy⚡️玩家开户首选【鲁班跨境通-自助充值转账】FB/GG/TT❤️官方免费开户Affiliate 全媒体流量资源⚡️
Taboola/Outbrain /Bing⚡️一级代理开户投流-7*24h❤️人工在线【官方】❤️搜索套利买量投流开户独立站⚡️开户投放
⚡️AdsPower:安全不封号,高效自动化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加白户联盟收款/海外资金下发/服贸结汇域名防红⚠斗篷工具/可试用3天
广告位出租8500万高质量住宅IP,助力各种需求虚拟卡返佣1%,国内持牌机构 
查看: 22446|回复: 15

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

[复制链接]

5

主题

50

广告币

168

积分

初级会员

Rank: 2

积分
168

社区QQ达人

发表于 2013-5-22 18:49:44 | 显示全部楼层 |阅读模式
Binom_AdvertCN
大洲的小偷程序非常让人眼馋,无奈本diao丝程序员,一无RMB,二无论坛币,只能望洋兴叹,所幸我有web程序开发的经验,对于这个小偷程序的基本原理能猜到不少,本着自力更生,服务大众的精神,我自己实现了一个简易版,在此开源给大家,希望能赚点论坛币,早日进入email版见见世面。
8 w& Q$ {7 o4 w8 _+ O% Z& Z+ H9 i
7 k3 `" `+ [0 \( @# f% O一、原理! l! q  G) @, ^+ _! L$ D: n0 P  F$ P
1.用户访问流程:" a- f; y5 X' D. u4 L
(1)用户访问我们的冒牌站(A.com)- ?6 @2 z1 t6 S9 x6 F& n! j2 F
(2)网站后台程序根据用户的query参数(包括get/post/cookie)构造原始网站B.com的url,用后台程序去访问该url,此时可以拿到原始网站的html和header输出。这里有一点需要注意的是原始网站输出的头也不可以忽略,里面的set-cookie信息也可以转发给用户的,这样就可以实现注册和登陆原网站啦。8 F- P$ @; R$ }" z. [
(3)对原始网站的html输出和header输出按某些规则做替换,比如把某些广告去掉啦,把B.com的地址替换成A.com啦,其实这一步是最关键的,也是玩法最多最好玩的部分
6 p& @" y! n6 A/ k(4)将替换后的html和header输出给用户。
' p: {$ @3 Q- {- b; I8 e; X8 X' g4 T+ {4 H' [/ |# V  i! E
2.规则替换的几种玩法:
# Q0 T- U0 a9 w(1)最简单的当然是字符串和正则表达式了,这就不多说了( Y- D3 J/ O2 A. e2 R$ _+ u
(2)用html解析库对html的dom节点做操作,然后重新生成html,比如可以把页面中的text node翻译成另一种语言,或者做文章重写,这样比较容易逃过搜索引擎的法眼。7 a4 x! N& f( n6 k& K$ g
据我所知每种语言都由若干个html库,比如php的有DOM、phpQuery等,java的有htmlcleaner等
+ L' R0 l( t4 B$ u- e6 ?4 q9 W(3)在原始html代码的后面加入一些javascript代码,用来隐藏一些页面元素,或加入一些广告代码等$ ?2 n5 A7 s, h. l+ d3 i! e

% ~  v7 r" d. m  B6 c8 _$ L- H; k$ W3.关于速度和性能:" i+ |  }9 f; ~' c* ^: J6 d
(1)提到性能第一个想到的当然是缓存啦,我觉得最适合加缓存的地方就是上文1.1.2中提到的生成原始网站url后,这里可以对原始url做md5编码,访问一次改url后就把它的内容和头存到硬盘上,这样就不用每次都去原网站拉取了。做缓存的另一个好处是不用担心被原网站屏蔽。$ \+ u: J: x* G# p2 D& {( r
0 `! W) F" O6 W" e* Y) j6 B
(2)对于css,图片,js等静态文件,其实不用每个文件都让php访问原网站拉取,可以直接返回个302,让浏览器直接去原网站拉取。
+ ~- Y# s( t/ W$ s, j1 j
4 A! }0 O$ C8 Z. a8 m% i5 B; P
# I/ w& V" c5 c- N5 p# O% d# t二、实现
. }6 ]9 N# ?9 l, {  C& h) H7 K1.程序语言:% O0 m% V* F% h% [4 O$ B$ `# a, ^
其实这个东西哪种语言都能搞定,也都不麻烦,我对php比较熟,就选了php。
, k5 h, a# N' _3 y7 b- a8 Z2.一些准备工作:
1 r6 x9 W4 ~, |" i  P(1)修改apache的rewrite规则,因为我们的程序只有一个文件,我们必须把所有接收到的请求都重定向到这个文件,这里我假设重定向到index.php,在apache的<VirtualHost>中加入这几句,如果是虚拟主机的话就修改.htaccess吧,不过我没试过,所以不知道怎么写re它的write规则
! ~$ }8 ~. l2 X- D, R RewriteEngine on% k) ?! P1 f5 v; v2 m
RewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME} -s [OR]$ {. c/ `& W* _. i( b% N7 B4 w
RewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME} -l [OR]
' a- ~9 O! }  s! F8 y5 b3 I, ?+ } RewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME} -d
1 H; m- y! W) N) B0 L$ @0 G RewriteRule ^.*$ - [NC,L]" k' W* F$ v# C$ \& ^
RewriteRule ^.*$ /index.php [NC,L]
9 S8 S" u+ ~4 x" l" U  g- q) y! p! F8 E2 d, Y
(2)安装php的http模块
$ C2 @6 w" d/ K- \4 Sphp发http请求的函数库找了好几个,发现http模块是用起来最简单的,不过需要你会linux操作哦,安装方法在这里http://php.net/manual/en/http.install.php* q7 l: c) W. t: {  z
ps:如果安装不上或没有vps,请把下面程序的http模块的函数换成phpcurl等http lib
( _) f. [  B' ~) K* \# l& O8 }" h! c7 e- a1 T' \
3.index.php的代码:
9 s* z% f5 j( V" f8 ]% ]9 [$ `% X& q1 \- ^

# c8 r5 \8 [6 N1 y3 _3 l* A4 N( V$host = $_SERVER['HTTP_HOST'];
$ `6 \; H( a; V/ M1 m! `" c//这里把假站的域名替换成原始网站的,用于生成原始url0 c  |$ _( J) [1 h' k4 j
$host = str_ireplace('fake.com', "true.com", $host);
! a6 M4 v1 \+ y0 Y/ k$toUrl = sprintf("http://%s%s", $host,$_SERVER['REQUEST_URI']);
# H3 I5 e1 V/ N' {4 u# p: m, U! [$ L& Z3 ]! s' h+ k7 K
$script_name = $_SERVER['SCRIPT_NAME'];1 Q6 N$ p/ n( d+ z$ i
$arr = explode(".", $script_name);! B# q8 i6 K( X" f" [- g
$endName = $arr[count($arr) - 1];# Y# `/ [- _3 r2 {+ E

( s. J( V/ K! W0 Y; P+ S
# N8 H: n0 Z) ?0 `2 `//这些后缀结尾的url直接返回302: J/ A, {" T( S
$STATIC_END_NAME = array('css','xml','rss','gif','jpg','jpeg','js','axd','atom',0 U% U) `3 l  C1 Y! N
                'mml','txt','jad','htc',* C' X5 `6 t" I) t3 e! q
                'png','tif','tiff','wbmp','ico','jng','bmp','svg',
$ ?% V) g4 A9 L9 ?& ?                'jar','war','ear','hqx','doc','pdf','ps','eps','ai',, O6 Y& L: T: l8 w, Q# C- ^3 _
                'rtf', 'xls', 'ppt', 'wmlc', 'xhtml', 'cco', 'jardiff',  f- H6 e$ @2 V3 k
                'jnlp', 'run', 'pl', 'pm', 'prc', 'pdb', 'rar', 'rpm',2 \7 {- a/ h! ~. |
                'sea', 'swf', 'sit', 'tcl', 'tk', 'der', 'der', 'crt',* h+ _! s+ d/ u5 e* }
                'xpi', 'zip', 'bin', 'exe', 'dll' ,'deb', 'dmg', 'eot',
' `6 H' _( G( T! D                'iso', 'img', 'msi', 'msp', 'msm' ,'mid', 'midi', 'kar',. R2 H! Q$ `- U) x) `) D
                'mp3', 'ra', '3gpp', '3gp', 'mpeg', 'mpg', 'mov', 'flv',
( V9 f$ I# ^* r; J                'mng', 'asx', 'asf', 'wmv', 'avi');/ [3 p. Z8 Q' h% @/ I
. w( x+ W$ l: o7 y( F) N* _6 a4 a
if(in_array($endName ,$STATIC_END_NAME))
) i  t; P/ ?" p- T  W{
6 x/ }( T6 m. ~6 i* r+ }        $headerStr = sprintf("Location: %s", $toUrl);
7 T" ]- W/ _' v/ V" n) w        header( $headerStr, true, 302);
; C4 g" k4 s1 {2 \; y8 J, z3 n- H        exit;
, z5 P1 F5 k2 R7 `0 ?1 u5 q" S}2 `, ~- |: u* P8 R& L

* k5 c9 A0 |* @# e9 p//一个简单的cache) c  f8 k; j/ H/ w& S3 x5 J# U$ @
function GetFromCache( $url)5 ^; H2 P7 l1 t' r4 H- R0 m1 P
{2 t! o, w  R( ?; _0 {; T- f3 ?
    $current_dir = dirname(__FILE__);7 e+ d+ R/ `, \  ]7 g
    $cache_dir = $current_dir . "/cache/";
& A) e" z" X4 Z7 {9 q    if( !is_dir( $cache_dir))
! h- ?; _3 H, }7 T& \" m    {( U( I/ p1 [" B2 L
  t+ |: P  ]! Q& S/ p7 _/ E
        mkdir($cache_dir);
, r# d0 G* ~' u) k% m- ]! u1 R    }& \, K6 V$ \# d" e
0 r. d' W: n* f, S. U! {6 ?$ X% R( F5 K
    $cache_file = $cache_dir . md5($url);' r6 C. c3 E( B- G" K0 t- r! T
    if(file_exists( $cache_file))
- T( S3 g1 M$ X: \    {
6 z7 ~& L8 b" L" }% v" Z+ }        $html = file_get_contents( $cache_file);( o7 M# R9 }& [5 @' A
        if($html == false)7 _4 u2 n6 c' c6 J2 V! f* ^
        {, j; a# J/ g. X. E
            $html = "";
) C. P) G, T( p- A! B2 E% t: L        }+ {7 K3 U4 O- B
    }else
$ `( F. d; q: A1 X/ O+ K    {
9 f' B+ Y+ q0 x( o, Q* V; m' B        //访问原始网站
- E. h7 P- X; C  ~# V8 k! b1 K        $data = http_get($url ,array('redirect' => 5, 'timeout' => 10), $http_info );
" n, `8 u: N$ U( t        $message = http_parse_message($data);
% ~3 U! t' ]6 x) v& }9 i( h8 w2 H  @# d6 q/ i# d
        $html = trim($message->body);
6 @2 P2 p& x7 o& R: L( {4 _& Q7 ]; [9 Q% D5 w/ r+ |
        file_put_contents( $cache_file, $html);
) o# ?) C- ^' a2 {7 _. j$ H    }
" b$ {7 J, J2 l! g+ b; ], _
) a2 o2 W5 S% z( Q    return $html;+ F) x' }0 U  P  p
}
% J8 o  c" e" Z/ {2 Z
( j! [8 u# d( G; s$html = GetFromCache( $toUrl );7 U+ n/ k5 x  d3 t' o# }
8 V) f: d) N" A
' f$ L# [( z0 i+ \0 j! V, }2 B
$html = str_replace("circleid.com", "circleid.us", $html);' ^& v$ R8 P% L& c3 G+ h) G: L: U

( r1 u4 J. O; W+ m: W$html = preg_replace('/<meta name=.*>/', "", $html);
' b4 ]7 P, Z$ S! l) v/ J" B3 O' l
2 h& z& B+ O# ?% y5 K' }2 f+ |
3 W4 g" A/ l4 ~+ S" z//注释的这两句是用phpquery操作
: \  r2 Q4 y1 E$ n3 N7 l6 q//$body = htmlqp($body)->find('#header')->remove()->html();, ~# t9 k0 h4 N7 w* _( Y& D
//$html = htmlqp($html)->find('#header')->remove()->document->saveHTML();5 d3 G5 i( ^: }1 Y1 K

) r' n0 Q7 R3 O$script = <<<EOD6 [) W" |. k; r- p% ?
<script>+ U3 c5 R4 \" C) V* a
$(document).ready(function() {
; o  @" y  l2 |; a5 E                $("#footer").remove();
/ p: V8 K; ]4 ?, Z- v$ d/ [. c; {: ^9 n3 ?* a$ R+ b5 k/ F
});
7 P+ `% s9 Y9 i- H$ \' f. m5 G
0 s7 ?3 j& u" T0 h</script>
$ Z* E2 \; q- ~. Q( Z$ @
$ d- x! x4 b& EEOD;
; ?+ x5 I$ n8 t8 B% ]  W: P( i0 ]7 T* x5 m' N+ m
echo($html . $script);7 {+ \/ H8 s6 d; N2 D/ l7 u

  n' }( O! g3 \( l- u( M1 V1 k+ T" R4 v: D3 s# c
三、最后
# D6 q1 |. n7 x" P: m1.总之,这个程序还很简陋,没有处理post和cookie参数,也没有配置管理模块,距离大洲的程序差距有一个大洲那么大,仅适合稍微懂点程序又有点好奇心的新手玩玩
, }9 M. ~$ O6 K7 A/ E2.最后当然是希望大家不令赐分啦,您的论坛币是我继续分享的动力,哈哈
0 t  y  C0 w5 D, U/ a
7 T* Z, L! g0 H1 g9 ?. T

评分

参与人数 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 ! K% ~+ R) E2 W
随便找一个proxy代码 功能以去掉 什么都齐全了。。。
6 c: [( d4 `4 @
是的,其实就是个web proxy,重要的是替换模块的创意和玩法。6 d: {* i3 z2 B$ ~8 \
我觉得大洲最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,让浏览器直接去原网站拉取。

2 ^9 J0 b) j1 |0 o/ D
  s7 r- t( Z' K: i) J" H" _源网站如果有防盗链的,就不行了。
1 X! s1 R- v, q5 }. }- B
危害性, S8 Q8 F8 y* u$ b- g& F

) X  |1 I; V* }. G2 A302重定向很容易被搜索引擎误认为是利用多个域名指向同一网站,那么你的网站就会被封掉,罪名是“利用重复的内容来干扰Google搜索结果的网站排名”。因为302重定向经常别用于做url劫持,黑帽seo技术中,而且百度在处理302重定向技术还不成熟,经常将它纳入到黑帽seo的范畴中,而google对这方面识别处理就完善了许多。所以302重定向在现阶段的搜索引擎技术中,还是容易导致网站降权的,尽量不用。但从seo、网站优化方面来说是弊大于利。
回复 支持 反对

使用道具 举报

44

主题

773

广告币

1424

积分

高级会员

Rank: 4

积分
1424
发表于 2013-5-23 06:42:39 | 显示全部楼层
没看懂,楼主你抓取的html是永久保存在服务器硬盘吗?还是用户访问每次都抓或者缓存?
& v: ^5 {* X  {( n$ F2 U抓来的页面模板要重新设计吗?觉得最后还是要能赚钱。伪原创?
回复 支持 反对

使用道具 举报

111

主题

556

广告币

1218

积分

高级会员

Rank: 4

积分
1218

社区QQ达人

发表于 2013-5-23 09:11:53 | 显示全部楼层
一个NGINX就搞定了 效率还高/ ^$ b; M% s' c+ x0 v$ z4 _2 y
简单的替换有相应模块
回复 支持 反对

使用道具 举报

4

主题

1202

广告币

1234

积分

高级会员

Rank: 4

积分
1234
发表于 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 ' c4 n* i7 Z+ s5 L! _, y1 t
没看懂,楼主你抓取的html是永久保存在服务器硬盘吗?还是用户访问每次都抓或者缓存?! R6 k9 E: t; E1 @
抓来的页面模板要重 ...

  j- @! P1 y( a% [1 ?这个代码里的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, 2026-6-27 18:52 , Processed in 0.061217 second(s), 19 queries , Gzip On, MemCache On.

Copyright © 2001-2023, AdvertCN

Proudly Operating in Hong Kong.

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