AdvertCN - 广告中国

 找回密码
 立即注册

QQ登录

只需一步,快速开始

Binom
 谷歌+Bing+TT+MSN官方代理 
⚡️按条S5代理⚡️静态⚡️独享⚡️5G⚡️最干净<Wifi住宅+5G移动>IP代理指纹浏览器,就用AdsPower
Mediabuy⚡️玩家开户首选【鲁班跨境通-自助充值转账】FB/GG/TT❤️官方免费开户Affiliate 全媒体流量资源⚡️
Taboola/Outbrain /Bing⚡️一级代理开户投流-7*24h❤️人工在线【官方】❤️搜索套利广告开户独立站⚡️开户投放
DuoPlus专注打造跨境电商云手机E.PN 虚拟卡BINOM TRACKER 60% OFF!比Adplexity还好用的Spy工具
MediaGo+Taboola+Ob开户百度国际MediaGo⚡️让产品狂奔全球百度国际,高点击转化,快速放量百度国际MediaGo,独家原生流量
ADPLEXITY + ADVERTCN7200W全球动态不重复住宅IP代理虚拟信用卡+独立站收款全球虚拟卡, 支持U充值
Facebook 批量上广告尤里改 - FB 稳定投放免费黑五教程(持续更新、欢迎交流)FB 三不限源头 - 自助下户充值转款
各种主页、账单户、BM户(优势)⚡️个人户,bm户不限额,账单户一手BM分享户不限额9Proxy ⚡️ $0.04/IP, 无限带宽
FB二三解0.1元一个虚拟卡|PTM星际卡FB专用虚拟卡Google、Bing官方总代  联盟流量开户
FB账号资源/稳定靠谱/运行5年啦FB开户代投/三不限/白名单fb耐用号0.01一个fb账号官方合作商
搜索套利开户❤️Bigo/Kwai/MediagoFB资源,账单户,分享户,国内一手FB企业户BM户账单户源头广告位出租
查看: 20994|回复: 15

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

[复制链接]

5

主题

50

广告币

168

积分

初级会员

Rank: 2

积分
168

社区QQ达人

发表于 2013-5-22 18:49:44 | 显示全部楼层 |阅读模式
大洲的小偷程序非常让人眼馋,无奈本diao丝程序员,一无RMB,二无论坛币,只能望洋兴叹,所幸我有web程序开发的经验,对于这个小偷程序的基本原理能猜到不少,本着自力更生,服务大众的精神,我自己实现了一个简易版,在此开源给大家,希望能赚点论坛币,早日进入email版见见世面。( S( K6 t, T5 `! N: w3 v  \0 q$ c

0 o, p& O/ R% u! @7 C; ]* F一、原理  Y, k/ N4 A+ x5 F
1.用户访问流程:
- o% a+ g+ o) E! g9 `8 w+ {* X, r9 B(1)用户访问我们的冒牌站(A.com)
+ L+ E2 b1 p4 w) D% N(2)网站后台程序根据用户的query参数(包括get/post/cookie)构造原始网站B.com的url,用后台程序去访问该url,此时可以拿到原始网站的html和header输出。这里有一点需要注意的是原始网站输出的头也不可以忽略,里面的set-cookie信息也可以转发给用户的,这样就可以实现注册和登陆原网站啦。
2 Y# k- G+ _. |0 Y- M$ e(3)对原始网站的html输出和header输出按某些规则做替换,比如把某些广告去掉啦,把B.com的地址替换成A.com啦,其实这一步是最关键的,也是玩法最多最好玩的部分
) I1 F8 N3 _' i# u(4)将替换后的html和header输出给用户。
. S, |# \# n, i8 V: h( C7 c& m! q) _2 h" n/ v' i. o
2.规则替换的几种玩法:
; r  c  W/ H2 z; Y' I+ Q7 ](1)最简单的当然是字符串和正则表达式了,这就不多说了
# \- a; P8 K/ E/ I2 E' I(2)用html解析库对html的dom节点做操作,然后重新生成html,比如可以把页面中的text node翻译成另一种语言,或者做文章重写,这样比较容易逃过搜索引擎的法眼。4 `. U/ _% J/ ]; |, F3 V$ m* y
据我所知每种语言都由若干个html库,比如php的有DOM、phpQuery等,java的有htmlcleaner等7 s0 W* y8 N! h+ X( x7 L1 m
(3)在原始html代码的后面加入一些javascript代码,用来隐藏一些页面元素,或加入一些广告代码等/ i& k' W3 y- V9 C; X# N" D4 ^
: V& c, j7 N+ X0 b  `
3.关于速度和性能:
# l6 q4 ?8 w, o(1)提到性能第一个想到的当然是缓存啦,我觉得最适合加缓存的地方就是上文1.1.2中提到的生成原始网站url后,这里可以对原始url做md5编码,访问一次改url后就把它的内容和头存到硬盘上,这样就不用每次都去原网站拉取了。做缓存的另一个好处是不用担心被原网站屏蔽。
3 f& ]+ D* U9 T, G9 M# U
) T; k6 Y! h% X. c7 J- A( q(2)对于css,图片,js等静态文件,其实不用每个文件都让php访问原网站拉取,可以直接返回个302,让浏览器直接去原网站拉取。
) R) a# c3 d, D$ o- h, {
* F  b' D) q& H1 J0 R4 A$ b0 b4 B! q9 T. O9 i2 A" C$ S
二、实现
3 M! G, m( O# I7 ?) C1.程序语言:
, z4 o/ I8 _0 e. R" o* i2 c其实这个东西哪种语言都能搞定,也都不麻烦,我对php比较熟,就选了php。4 k7 ~0 W# M& a1 u
2.一些准备工作:
; ^* f% G4 l$ j3 {(1)修改apache的rewrite规则,因为我们的程序只有一个文件,我们必须把所有接收到的请求都重定向到这个文件,这里我假设重定向到index.php,在apache的<VirtualHost>中加入这几句,如果是虚拟主机的话就修改.htaccess吧,不过我没试过,所以不知道怎么写re它的write规则( M9 ^0 X: G+ J
RewriteEngine on
7 D0 B, Y) j: F3 K) W/ t- k3 h0 X4 Z& ] RewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME} -s [OR]( B' K2 `* a/ q2 q: V' O& k
RewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME} -l [OR]
4 }. M# c& s0 v7 w3 T RewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME} -d) |$ ~/ G! b$ k( ~( l+ }
RewriteRule ^.*$ - [NC,L]9 }/ s6 `; q: y2 D* ]' q. |
RewriteRule ^.*$ /index.php [NC,L]
1 B( E: F( ]; y5 T* f8 O, R7 m4 [2 _% o) _* a2 m. K
(2)安装php的http模块9 a9 h. G' [  u% z% P
php发http请求的函数库找了好几个,发现http模块是用起来最简单的,不过需要你会linux操作哦,安装方法在这里http://php.net/manual/en/http.install.php/ R/ N  J/ f  w
ps:如果安装不上或没有vps,请把下面程序的http模块的函数换成phpcurl等http lib5 D& n# n5 I- t0 `& r$ W* L
$ P/ @, q0 w7 ^% T% n' g8 E0 J
3.index.php的代码:  j# @$ N. x: g: }1 s
& R  u' d7 H2 S2 V( h. Q

; t  ~& Q3 F4 J+ D0 H+ G7 l$host = $_SERVER['HTTP_HOST'];
2 D, `0 B- o# h- v7 @//这里把假站的域名替换成原始网站的,用于生成原始url
( Y, @9 e: ?- g$host = str_ireplace('fake.com', "true.com", $host);
: f. G1 G4 q1 ?& V8 d$toUrl = sprintf("http://%s%s", $host,$_SERVER['REQUEST_URI']);; g$ N" K$ w/ B: l3 J; N
5 i% X% q' A) n: h) m
$script_name = $_SERVER['SCRIPT_NAME'];0 M2 Z# ]4 y8 K7 e% e: |5 Y) C- c
$arr = explode(".", $script_name);
3 U3 G+ U2 d8 e# x' r7 p( H$endName = $arr[count($arr) - 1];
8 c/ y% H: m  K  ?) k
. M% j' c  d& C/ T$ H# M4 U- l
3 s2 ]/ ~% X4 o& [6 t//这些后缀结尾的url直接返回302
) I5 |! v/ f, q$ z$STATIC_END_NAME = array('css','xml','rss','gif','jpg','jpeg','js','axd','atom',8 C$ W% R4 z( y" T. R
                'mml','txt','jad','htc',4 J# h2 F9 h$ S* t+ C8 E+ q/ [
                'png','tif','tiff','wbmp','ico','jng','bmp','svg',+ I3 t' C* n3 T% z* z# x
                'jar','war','ear','hqx','doc','pdf','ps','eps','ai',
! d2 @* Y' X0 }5 p& I                'rtf', 'xls', 'ppt', 'wmlc', 'xhtml', 'cco', 'jardiff',
# _2 I) [& F4 |  N' _/ G                'jnlp', 'run', 'pl', 'pm', 'prc', 'pdb', 'rar', 'rpm',
6 s0 O6 ^: I; L! F' X+ n* N                'sea', 'swf', 'sit', 'tcl', 'tk', 'der', 'der', 'crt',
" ~" {( v+ _- J! i5 e+ t; i/ x- G                'xpi', 'zip', 'bin', 'exe', 'dll' ,'deb', 'dmg', 'eot',
( R. ?7 E! Y0 k9 G                'iso', 'img', 'msi', 'msp', 'msm' ,'mid', 'midi', 'kar',
2 D$ R1 N( A1 V8 U7 ^* c2 Z) N                'mp3', 'ra', '3gpp', '3gp', 'mpeg', 'mpg', 'mov', 'flv',) g5 ]$ C0 G0 H! e  _2 A/ Y( R
                'mng', 'asx', 'asf', 'wmv', 'avi');5 \3 I% _, R1 V& f9 k

4 ]* o& q$ E( W) s; U& yif(in_array($endName ,$STATIC_END_NAME))
6 J; W9 O" @' E+ z& ^: c1 o{
" S. `' w" P3 b! j7 b        $headerStr = sprintf("Location: %s", $toUrl);+ v, `1 q$ W; ^
        header( $headerStr, true, 302);7 Y" X9 P/ L! |3 [- T/ d
        exit;* p8 `! g$ G/ s% z% i* l1 h. K
}& _, q; ~8 b" W- x) k8 Y9 E2 L

' N! M- a+ [% s! s% |5 }4 `+ m//一个简单的cache* T7 V# w' y  f- C/ j2 g" C3 c
function GetFromCache( $url)0 i7 g9 t$ _* @3 R+ _8 z# v% o
{
( B+ F9 r( C- K" l    $current_dir = dirname(__FILE__);
( N" I2 `4 ]6 {    $cache_dir = $current_dir . "/cache/";
. d" E7 Y+ T& }/ r2 d4 _/ [8 C# F    if( !is_dir( $cache_dir))
7 M5 j7 `/ H4 f/ r    {
* @+ Y7 A" a- F4 b1 j2 b0 e2 {- o4 C
        mkdir($cache_dir);* g/ V4 L% Q. q$ s9 ?3 P: r9 K
    }- y, ]: Y( T5 [) t8 m* V6 E: C; x

: C2 ]6 Q9 z% C    $cache_file = $cache_dir . md5($url);
3 A" [( Z1 b8 K4 c    if(file_exists( $cache_file))
$ A: Y: {5 o7 q0 G2 u. R0 d    {
$ Q4 E3 Z4 k! q0 o/ V2 `        $html = file_get_contents( $cache_file);/ O) N4 N* r. }6 g2 F# b
        if($html == false)  b0 s* j# B+ v  T" e5 X( R
        {
9 ^7 @, u: F: W) `) X* R            $html = "";+ ]8 J. M+ {$ \: n) A! ^1 ~
        }) u! A) i- K; ~0 z! W( O
    }else
  w3 D/ s' F' A0 U8 v! w    {: _: \. a& ^& q/ k3 a9 [6 O4 c
        //访问原始网站: g( u( x$ a3 t
        $data = http_get($url ,array('redirect' => 5, 'timeout' => 10), $http_info );
# k7 |; t  p( g5 v! P" {        $message = http_parse_message($data);
+ y6 _3 W. ]: H) ~; i- R
6 E! T( }7 K# b* a- }        $html = trim($message->body);
# L) @* B2 x! @+ I" ]" E: C+ [6 x' D/ h
        file_put_contents( $cache_file, $html);
1 u/ }0 _7 p! h3 h8 f" l    }
" E, C1 ]8 e9 \
" p4 \3 ?  G# L& k. o* O$ w    return $html;
' C3 i9 ~# c( q7 R3 s& F, l8 _}- g8 ]  K* m1 q! L) n: k; N
( ^5 s4 @1 b. B
$html = GetFromCache( $toUrl );
8 @, X5 `7 _* W2 z* \8 y  H/ q. ~% n6 T7 x
+ C: t1 [* z! x2 i2 s* B/ Z# o
$html = str_replace("circleid.com", "circleid.us", $html);" m# c, B+ Q* a
. F8 k2 `5 |$ _6 _
$html = preg_replace('/<meta name=.*>/', "", $html);
) O# N1 J% n7 P; v" H. q7 n5 N- Y4 }% ~$ V5 M
8 T: V& L# Z3 S; u- q- e
//注释的这两句是用phpquery操作
6 e9 @1 N% X0 L7 t) b( D//$body = htmlqp($body)->find('#header')->remove()->html();+ X9 U8 ^2 C* Y
//$html = htmlqp($html)->find('#header')->remove()->document->saveHTML();
5 e% g2 l* |7 Y' b7 ?) e) I
7 n5 c7 L' ^2 l/ X1 T$script = <<<EOD
* M0 A3 a7 i" k6 O" u<script>
0 {* f' R1 F! ?/ k7 m$(document).ready(function() {/ c' @9 z- U3 ], C' C' E* L/ _4 z
                $("#footer").remove();) v# R8 E6 i7 b) D6 \! z: F' e
6 Q: M+ G6 n' y2 E! Z
});+ z2 b# k, V: }' s2 y  R/ a' f" y

. q5 ^6 e0 j0 ]# s) y; K</script>
6 o  d. v0 [! S. b1 f( G2 _+ O4 N" g: i" c: r8 @! U' F
EOD;- n& V/ k4 K' {# ~1 v
/ e* ?" ?# D6 o% w) A
echo($html . $script);
, _# K. l2 f( D/ |# j9 b/ L
# W( R1 l2 U9 j7 ?7 _) L- `  B3 N' Q4 T6 L/ M8 M& d
三、最后
1 a3 [) s8 {3 p5 Q: R% W& m1.总之,这个程序还很简陋,没有处理post和cookie参数,也没有配置管理模块,距离大洲的程序差距有一个大洲那么大,仅适合稍微懂点程序又有点好奇心的新手玩玩* l# K2 k! S! v* C# {# V
2.最后当然是希望大家不令赐分啦,您的论坛币是我继续分享的动力,哈哈
( p! K1 d  U( Z8 N7 C$ h6 l0 n* Z7 Z& z4 E2 N) Q  R

评分

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

主题

641

广告币

1245

积分

高级会员

Rank: 4

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

使用道具 举报

33

主题

57

广告币

309

积分

初级会员

Rank: 2

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

使用道具 举报

21

主题

1027

广告币

2438

积分

论坛嘉宾

积分
2438
发表于 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 1 }7 `4 Q- s# x2 X! d
随便找一个proxy代码 功能以去掉 什么都齐全了。。。
" y/ ]8 g4 @3 K# J% k
是的,其实就是个web proxy,重要的是替换模块的创意和玩法。
4 K4 v  U! w% t我觉得大洲最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,让浏览器直接去原网站拉取。
0 p9 H! ^' v* d& ^

+ K: b( b+ v. g$ P5 U% m源网站如果有防盗链的,就不行了。
* i* S4 Y9 g" X8 y, v. R
危害性3 z" o( S' G6 {' y! j! ~

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

使用道具 举报

44

主题

770

广告币

1422

积分

高级会员

Rank: 4

积分
1422
发表于 2013-5-23 06:42:39 | 显示全部楼层
没看懂,楼主你抓取的html是永久保存在服务器硬盘吗?还是用户访问每次都抓或者缓存?
) ~9 I$ F# \7 i1 F/ n4 j0 C2 y抓来的页面模板要重新设计吗?觉得最后还是要能赚钱。伪原创?
回复 支持 反对

使用道具 举报

110

主题

520

广告币

1180

积分

中级会员

Rank: 3Rank: 3

积分
1180

社区QQ达人

发表于 2013-5-23 09:11:53 | 显示全部楼层
一个NGINX就搞定了 效率还高4 @. d' U' z' k( h: T# e/ v. H
简单的替换有相应模块
回复 支持 反对

使用道具 举报

4

主题

1080

广告币

1122

积分

中级会员

Rank: 3Rank: 3

积分
1122
发表于 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 ( ^# z9 r9 `4 ~9 y: h
没看懂,楼主你抓取的html是永久保存在服务器硬盘吗?还是用户访问每次都抓或者缓存?6 ^/ o) T3 f; \  E1 n
抓来的页面模板要重 ...
$ g+ F* d  _8 \9 D' K
这个代码里的cache主要是做demo,是存在硬盘里的,实际使用中你完全可以用memcache或数据库代替,cache的过期策略也可以自己控制
回复 支持 反对

使用道具 举报

1

主题

750

广告币

689

积分

中级会员

Rank: 3Rank: 3

积分
689

社区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, 2024-12-22 18:41 , Processed in 0.057108 second(s), 18 queries , Gzip On, MemCache On.

Copyright © 2001-2023, AdvertCN

Proudly Operating in Hong Kong.

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