之前搜索伪造网页的博客时,发现相关内容较少,即使有,大部分也只是将代码罗列上去,不仅缺少图片链接,也缺少伪造思路。于是写下这篇博客,一起交流学习。
官方注册界面与伪造页面对比


两者的区别在于我所伪造的页面背景颜色偏淡,没能与官方页面达成一致。
伪造过程
在官网右键点击“查看网页代码”,打开网页代码

将网页代码复制到自己新建的HTML中进行测试,发现直接复制源代码的网页缺少排版。

通过观察官网代码我们可以看到,其将网页排版的css另存到其他文件中。

我们一个个打开链接地址,将每一个css存放到本地。

然后将我们自己所建的网页对应的css链接进行修改

再次打开网页,发现排版已经完毕,但是没有图片。

起初,一开始我的想法是利用截图工具将官网图片截取下来,再放到自己的网页中,以达到混淆视听的功能。但是这样所贴到网页的图片往往大小都不对。究其原因,是图片像素与网页放置图片大小无法匹配。这种方法不仅容易出现与原网页明显的不同,而且十分繁琐,极大地加剧了工作量。于是我们换一种思路。利用浏览器插件。
这是火狐浏览器的一款插件,它可以帮助我们直接爬下网页中的图片,十分方便快捷。

我们提取官网图片,全选,然后下载下来。
通过观察原网页,我们知道在填写手机号一栏,是有手机图片的。我们分析源代码。发现它调用了一个名为“mobile_ico”的图标,这个图标,应该就是手机图标。
但我们不知道该图标的链接存放在哪里,于是我们打开四个css文件,利用查找功能,一个个地查找。
最后,我们在patch_regitster.css文件中找到了该图标链接。我们将其链接地址改为我们下载的图片的链接地址。


保存代码,刷新伪造网页进行检查。发现手机图标已经出现。

其他内容也可如法炮制。我发现,利用IA插件下载下来的图片名与原链接的图片名是一致的,因此,为了节省工作量,减少对网页代码的分析,我们可以直接在css文件中搜索下载的图片名,直接进行修改。
修改完成页面如图

细节处理
从表面上看,到这里为止,网页伪造已经结束了。但是还存在着一个问题——官网有服务器与网页实时交互。
在我们点击文本框时,会有提示出现。这一点是我们所伪造网页缺乏的。

经过查找资料发现,我们需要用AJAX语言与ASP语言构造后台实现。
AJAX环境搭建可以参考该博客文档
https://www.cnblogs.com/technicist/p/12730501.html
在搭建好环境后,我尝试编写一个输入提示网页。代码如下:
html网页代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script>
function showHint(str)
{
var xmlhttp;
if (str.length==0)
{
document.getElementById("txtHint").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","test.asp?q="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>
<h3>在输入框中尝试输入字母 a:</h3>
<form action="">
输入姓名: <input type="text" id="txt1" onkeyup="showHint(this.value)" />
</form>
<p>提示信息: <span id="txtHint"></span></p>
</body>
</html>
ASP代码如下
<%
response.expires=-1
dim a(30)
'用名字来填充数组
a(1)="Anna"
a(2)="Brittany"
a(3)="Cinderella"
a(4)="Diana"
a(5)="Eva"
a(6)="Fiona"
a(7)="Gunda"
a(8)="Hege"
a(9)="Inga"
a(10)="Johanna"
'获得来自 URL 的 q 参数
q=ucase(request.querystring("q"))
'如果 q 大于 0,则查找数组中的所有提示
if len(q)>0 then
hint=""
for i=1 to 30
if q=ucase(mid(a(i),1,len(q))) then
if hint="" then
hint=a(i)
else
hint=hint & " , " & a(i)
end if
end if
next
end if
'如果未找到提示,则输出 "no suggestion"
'否则输出正确的值
if hint="" then
response.write("no suggestion")
else
response.write(hint)
end if
%>
如果运行正确的话,输入字符应该会有相应名字的提示出现。但我在调试中出现了如下问题:
在输入字母a后,会将ASP源码全部输出。

按照以往出现这种情况的经验来看,应该是环境没有搭好。于是我换用PHP语言书写,发现出现同样问题。
到此时,我还不死心,换用win10的虚拟机搭建环境调试,发现结果是一致的。
从网上查取资料也没能找到相关解决方案,于是我只好作罢。
伪造了一个不完美的网页。

1586

被折叠的 条评论
为什么被折叠?



