怎么让别人看不到自己的网页代码?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么让别人看不到自己的网页代码?相关的知识,希望对你有一定的参考价值。
怎么让别人看不到自己的网页代码?
也就是不让别人查看自己的源文件
或者看了源文件不显示主要的内容代码
网页制作者经常遇到精心制作的javascript特效被别人抄袭,而自己对此却无可奈何的情况。面对这一困扰,有没有方法可以解决呢?使用ASP、JSP等服务器端编程技术可以实现对网页源代码的保护,但目前国内网站所提供的免费个人主页空间一般都不提供对服务器端编程的支持,所以对于这些用户,要禁止访问者查看网页源代码就只能在客户端编程上下工夫了。
查看源代码的方式
要禁止访问者查看网页源代码,我们首先要了解一下查看源代码的方式(以IE 5.0为例)。一是右键菜单方式; 二是窗口菜单栏查看方式,即选择"查看"*"源文件"方式。要彻底禁止访问者查看网页源代码,就必须屏蔽这2种查看源代码的方式。
屏蔽右键菜单查看方式
现在,很多网页采用如下代码屏蔽右键菜单:
< Script Language=javascript>
function Click()
if(event.button==2)alert
('版权所有(C)2001 XXX工作室');
document.onmousedown=Click;
< /Script>
实际上"button"有8个属性值(即0~7),"button==2"只是表示按下鼠标右键,所以上述代码实际上只能限制点击鼠标右键的情况,至于其他5种方式,如同时按左右键、中间键、左和中间键、右和中间键和按所有键的情况就不能限制了。所以在弹出版权信息提示窗口后(如图3所示),按"确定"按钮仍然会出现快捷菜单。针对这种情况,其实只要将"event.button==2"改为"event.button!=1"就可以做到无论用何种鼠标点击方式,均不出现右键菜单了。
不过即使进行上述修改后,也并不能彻底禁止右键菜单的出现。用户只要在页面上按下右键,出现版权信息提示窗口后,不松开右键(即继续保持按下状态),再将鼠标指针移动到版权信息提示窗口的"确定"按钮上,同时按下左键,然后再松开鼠标左键,提示窗口即消失。此时再松开鼠标右键,右键菜单弹出,这样就又可以查看网页源文件了。
那么有没有办法彻底禁止右键快捷菜单的出现呢?其实只要将上述代码做如下修改即可。
< Script Language=javascript>
function Click()
alert('版权所有(C)2001 XXX工作室');
window.event.returnValue=false;
document.oncontextmenu=Click;
< /Script>
这样无论采取什么方式点击鼠标,都不会再出现快捷菜单了。不过值得注意的是,如果访问者直接在浏览器地址栏中键入"javascript:alert(document.oncontextmenu='')",就可以解除对右键菜单的屏蔽。对这类访问者怎样防范呢?其实,把地址栏隐藏掉就可以了,具体方法见本文介绍的"屏蔽窗口菜单栏查看方式"。
屏蔽窗口菜单栏查看方式
制作过网页的朋友都知道,对新打开窗口的各种属性可以进行控制,具体包括控制菜单栏、滚动条及地址栏是否可见等。如果把父窗口关闭,并将新打开窗口的菜单栏和地址栏隐藏,不就可以屏蔽窗口菜单栏查看方式了吗?实现代码如下:
< Head>
< Object id=closes type="application/x-oleobject"
classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
< Param name="Command" value="Close">
< /Object>
< /Head>
< Body>
< Script Language=javascript>
closes.Click()
window.open("XXX.htm","","menubar=no,location=no,
scrollbars=yes,resizable=yes")
< /Script>
< /Body>
这种方法的原理就是首先将自己网站的首页制作成index.htm形式,把首页设计成一个过渡页。然后将自己的真正主页制作成default.htm形式(具体实现过程见本文所附源代码)。这样访问者无论如何也无法查看网页源代码了。这不仅仅保护了您的版权,也为进一步开发提供了保障。通过此方法,您可以结合Cookie技术,真正做到限制用户浏览网页,从而避免主页资料被非法访问者访问。
附:源代码清单
index.htm
< Head>
< Object id=closes type="application/x-oleobject" classid="clsid:
adb880a6-d8ff-11cf-9377-00aa003b7a11">
< Param name="Command" value="Close">
< /Object>
< /Head>
< Body>
< Script Language=javascript>
closes.Click()
window.open("defalut.htm","","menubar=no,location=no,
scrollbars=yes,resizable=yes")
< /Script>
< /Body>
default.htm
< html>
< Head>
< Script Language=javascript>
function Click()
alert('版权所有(C)2001 XXX工作室');
window.event.returnValue=false;
document.oncontextmenu=Click;
< /Script>
< /Head>
< Body>
... ...
< /Body>
< /Html>
网上找的,虽然不能全部禁止吧,但是也能凑活着用了 参考技术A 你就不发布出去呀,自己用呀 别人怎么也看不到自己的网页代码本回答被提问者采纳
让别人的程序按自己的意愿运行
小白:小程,你知道有些iOS程序是没人性的吗?老是不按我的意愿来运行!
小程:我怎么知道你的意愿就是有人性的?
本文解决一个问题:修改别人的二进制程序并运行起来。
让别人的程序按你的意愿来运行,文明一点的做法就是拿到源码后加上自己的修改再生成新的程序并安装。
小白:哇,这句话好长,你能一口气说完吗?
但是,很多情况下我们是没有源码的,那怎么办呢?
一个办法是把程序的指令或者数据改掉;另一个办法是让程序执行到自已的代码上,再把流程或内存值给改掉。最终,让程序按自己的想法来运作。
小白:还能让程序执行到自己的代码?这不就是乾坤大挪移吗?
小程:这叫注入!
小白:那赶紧讲注入吧。
小程:不!我先讲硬改。
如何改掉程序的指令呢?
这里从iOS上的程序入手,举一个例子来说明。
这是一个会“过期”的程序,显示主页面的代码是这样的:
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
UIAlertController* alertvc = nil;
int expire = 1;
if (expire) {
alertvc = [UIAlertController alertControllerWithTitle:nil message:@"过期了!" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* cancel = [UIAlertAction actionWithTitle:@"算了" style:UIAlertActionStyleCancel handler:nil];
[alertvc addAction:cancel];
}
else {
alertvc = [UIAlertController alertControllerWithTitle:nil message:@"欢迎回来" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* ok = [UIAlertAction actionWithTitle:@"太客气了" style:UIAlertActionStyleDefault handler:nil];
[alertvc addAction:ok];
}
[self presentViewController:alertvc animated:YES completion:nil];
}
运行后会弹出一个框,可能是“欢迎回来”,也可能是“过期了”。
为了真实模拟,先把这个demo弄出一个ipa包,再来安装(而不是直接用xcode安装到手机),这个ipa包就是修改目标。
ipa是一个压缩包,里面包括了执行程序、配置文件、图片等资源。
如果是从itunes下载的app,则可以这样拿到ipa包:
这时,要对ipa做重签名才能通过第三方工具安装到越狱手机。
小白:小程,什么是重签名?
小程:简单来说,签名就是允许这个app以什么方式安装。上传到aapstore的app都是以发布证书来签名,允许通过itunes或appstore来安装,但不允许用第三方的工具比pp助手、itools之类的工具来安装。而这里的重签名,指的是用开发证书来签名,允许通过第三方工具来安装。
小白:咦?我为什么要通过第三方工具来安装?用appstore不是好好的吗?
小程:但是,如果想修改代码再运行,就只能通过第三方工具,难道你修改代码后还上传给aapstore吗?
小白:也对。那就是说,只有通过appstore下载的ipa才需要重签名了?如果原本就是第三方工具安装的ipa就不需要重签名了?
小程:是的。而且,很多第三方工具都提供自已的app库,这些app都是重签名了的。
小白:那重签名后,再次修改过的app,要不要重签名?
小程:实践证明,这时不需要再签名。
为了清除“修改了程序却不能安装”的障碍,这里介绍一下重签名的操作。
(一)重签名的准备
(1)mobileprovision文件
重签名需要用到描述文件即provision文件,并保证keychain里面有对应的证书。
可以创建证书与provision,再安装到keychain。或者让别人发一个p12文件与对应的provision,再双击安装。
(2)plist文件
重签名时要使用一个entitlements.plist 文件,可以直接找一个这样的文件来修改,保证get-task-allow字段为true即可。
也可以plistbuddy工具来生成一个plist:
/usr/libexec/PlistBuddy -x -c "print :Entitlements " /dev/stdin <<< $(security cms -D -i xxx.app/embedded.mobileprovision) > entitlements.plist
/usr/libexec/PlistBuddy -c ‘Set :get-task-allow true‘ entitlements.plist
xxx.app换成目标app,并且要cd到目标ipa的Payload目录再进行操作
(二)重签名
使用codesigh进行签名:
cp "xxx.mobileprovision" "Payload/xxx.app/embedded.mobileprovision"
--使用mobileprovision文件,覆盖app原有的(没有也照样拷贝过去)
/usr/bin/codesign -f -s "iPhone Developer: xxx (yyy)" --entitlements "Payload/entitlements.plist" "Payload/xxx.app"
--注意entitlements.plist要准备好
在codesign指定证书时,证书的名字(带括号、空格之类的),最好到keychain里面找到这个证书,然后右键在“简介”里面拷贝过去,避免“找不到”的提示。
把Payload压缩成ipa,注意不是Payload的上一级目录!
这个ipa安装到越狱手机后,跑起来是这样的:
小白:这么可恶!这个框太不友好了!
要去掉这个框,先要分析一下代码。
把ipa包解压,再进到xx.app内,找到执行文件,分析这个文件,这里用hopper来分析。
小白:hopper是什么东东?
小程:是分析二进制代码的倚天剑!
小白:有屠龙刀吗?
小程:有,ida是也!
小白:好可怕,亮剑吧!
启动hopper,小程的版本是这样的:
可以看到,弹框的代码是:
想要去掉弹框,可以选择不同的办法,比如把调用alertview的代码改成nop,比如把比较的值改掉不让它进过期的分支,比如把跳转指令“取反”地改一下......
小白:nop是什么?
小白:nooperation,空指令,什么都不做的,但占指令执行时间。
小白:我也想什么都nop!
这里演示把跳转指令改掉的办法。
先确定跳转的地方:
cbz,表示为0就跳转,而且是跳转到非过期的分支。也就是说,现在不是0,没有跳转。所以,修改的办法就是改为“不为0就跳转”。
把光标放在cbz命令行上,再切换至十六进制的表示页面:
可以看到cbz对应的十六进制是这样的(两个字节):
cbz即是:62 06 00 34
而cbnz(不是0就跳转)是:62 06 00 35
所以,修改为cbnz,就是这样:
保存为另一个执行文件:
把修改后的执行文件覆盖掉原文件,再把Payload目录打包,重命名为.ipa文件,再用第三方工具安装到手机(不需要重签名)。
最终,过期的提示消失了,看到了另一个提示:
小白:Oh Yeah!
总结一下,关键流程是,用hopper定位到目标代码的位置,并通过hopper修改保存。同时,应该注意ipa的重签名等常规的知识。“硬改”的办法,对汇编技能的要求较高,相对而言,如果只是想在iOS平台控制目标程序的运作,hook会是一个更有想象力的选择。
以上是关于怎么让别人看不到自己的网页代码?的主要内容,如果未能解决你的问题,请参考以下文章
浏览器的网页我想写一个js脚本控制他,怎么让这个别人的网页执行我写好的js脚本?
我学习了HTML DIV+CSS 怎么样熟悉它们了?是看别人设计的代码还是自己用HTML DIV+CSS建设网页了?