分类: |
  • 1

搜索引擎蜘蛛的工作原理

      在互联网发展初期,网站相对较少,信息查找比较容易。然而伴随互联网爆炸性的发展,普通网络用户想找到所需的资料简直如同大海捞针,这时为满足大众信息检索需求的专业搜索网站便应运而生。

       现代意义上搜索引擎的祖先,是1990年由蒙特利尔大学学生Alan Emtage发明的Archie。虽然当时World Wide Web还未出现,但网络中文件传输还是相当频繁的,而且由于大量的文件散布在各个分散的FTP主机中,查询起来非常不便,因此Alan Emtage想到了开发一个可以以文件名查找文件的系统,于是便有了Archie。

        Archie工作原理与现在的搜索引擎已经很接近,它依靠脚本程序自动搜索网上的文件,然后对有关信息进

查看更多...

Tags: 搜索引擎 蜘蛛 原理

分类:PHP教程 | 固定链接 | 评论: 0 | 查看次数: 9123

api hook和pe格式的关系

api hook技术的难点,并不在于hook技术,初学者借助于资料“照葫芦画瓢”能够很容易就掌握hook的基本使用技术。但是如何修改api函数的入口地址?这就需要学习pe可执行文件(.exe,.dll等)如何被系统映射到进程空间中,这就需要学习pe格式的基本知识。windows已经提供了很多数据结构struct帮助我们访问pe格式,借助它们,我们就不要自己计算格式的具体字节位置这些繁琐的细节。但是从api hook的实现来看,pe格式的访问部分仍然是整个编程实现中最复杂的一部分,对于经常crack的朋友不在此列。
假设我们已经了解了pe格式,那么我们在哪里修改api的函数入口点比较合适呢?这个就是输入符号表imported symbols table(间接)指向的输入符号地址。
   下面对于pe格式的介绍这一部分,对于没有接触过pe格式学习的朋友应该是看不太明白的,但我已经把精华部分提取出来了,学习了pe格式后再看这些就很容易了。

pe格式的基本组成
+-------------------+
    | DOS-stub          |    --DOS-头
    +-------------------+
    | file-header       |    --文件头
    +-------------------+
    | optional header   |    --可选头
    |- - - - - - - - - -|
    |                   |
    | data directories |    --(可选头尾的)数据目录
    |                   |
    +-------------------+
    |                   |
    | section headers   |     --节头
    |                   |
    +-------------------+
    |                   |
    | section 1        |     --节1
    |                   |
    +-------------------+
    |                   |
    | section 2        |     --节2
    |                   |
    +-------------------+
    |                   |
    | ...               |
    |                   |
    +-------------------+
    |                   |
    | section n        |     --节n
    |                   |
    +-------------------+
    在上图中,我们需要从“可选头”尾的“数据目录”数组中的第二个元素——输入符号表的位置,它是一个IMAGE_DATA_DIRECTORY结构,从它中的VirtualAddress地址,“顺藤摸瓜”找到api函数的入口地点。
    下图的简单说明如下:
OriginalFirstThunk 指向IMAGE_THUNK_DATA结构数组,为方便只画了数组的一个元素,AddressOfData 指向IMAGE_IMPORT_BY_NAME结构。
IMAGE_IMPORT_DESCRIPTOR数组:每个引入的dll文件都对应数组中的一个元素,以全0的元素(20个bytes的0)表示数组的结束
IMAGE_THUNK_DATA32数组:同一组的以全0的元素(4个bytes的0)表示数组的结束,每个元素对应一个 IMAGE_IMPORT_BY_NAME结构
IMAGE_IMPORT_BY_NAME:如..@Consts@initialization$qqrv. 表示
Unmangled Borland C++ Function: qualified function __fastcall Consts::initialization() 
 
    为了减少这个图的大小,不得已将汇编和c++的结构都用上了。这个图是输入符号表初始化的情形,此时两个IMAGE_THUNK_DATA结构数组的对应元素都指向同一个IMAGE_IMPORT_BY_NAME结构。
    程序加载到进程空间后,两个IMAGE_THUNK_DATA结构数组指向有所不同了。看下图: 


// 本文转自 C++Builder研究 - http://www.ccrun.com/article.asp?i=1036&d=cf6de2
始化的,“两个结构都指向同一个IMAGE_IMPORT_BY_NAME”,此时还没有api函数地址 


当PE文件准备执行时,前图已转换成上图。一个结构指向不变,另一个出现api函数地址

    如果PE文件从kernel32.dll中引入10个函数,那么IMAGE_IMPORT_DESCRIPTOR 结构的 Name1域包含指向字符串"kernel32.dll"的RVA,同时每个IMAGE_THUNK_DATA 数组有10个元素。(RVA是指相对地址,每一个可执行文件在加载到内存空间前,都以一个基址作为起点,其他地址以基址为准,均以相对地址表示。这样系统加载程序到不同的内存空间时,都可以方便的算出地址)
    上述这些结构可以在winnt.h头文件里查到。

查看更多...

Tags: pe 格式 汇编 导入表 api 原理 hook

分类:c/c++ | 固定链接 | 评论: 0 | 查看次数: 9583

asp生成伪静态的原理及方法

ASP动态页面转化成静态页面的好处,这里我就不说了,相信大家在网上了解的够多了。现在稍微讲解一下asp动态页面生成静态页面的原理。
其实asp生成静态页面的一个核心就是replace函数。只要知道replace的使用,那么对生成静态页面的方法也就掌握2/3了。废话少说,开始工作吧...
第一步:理解replace函数。
<%
dim str
str="你好!欢迎来到我的博客"
'现在把上面换成“你好!欢迎来到www.zeroplace.cn”;
str=replace(str,"第零空间",www.zeroplace.cn)
response.write(str)
%>
运行一下,现在大概知道replace函数的作用了。现在我们把思维开阔一点,如果我们把"你好!欢迎来到我的博客"这句话换成一个html页面的代码,把页面中的一些内容换成数据库中的内容,那不就实现了动态页面静态化了。有点迷糊吧....哈哈。没关系,举例。。。
第二步:创建静态页面模板
在dreamwear中创建一个html页面。随便输入一点内容。template.html

$content$

现在要实现第一步的替换,那么怎么把这个template.html页面中的代码赋值给str呢?这个应该怎么办?其实asp中有提供一个读取页面代码的方法(描述不是很规范),这个就是用fso。大家把这个下面这个代码记住就可以了。

 

fso读取 template.html 的方法
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set templates = fso.OpenTextFile(server.MapPath("template.html"))
str=templates.readall()'读出结果,赋值给str
set fso=nothing
set templates=nothing
这个时候就把template.html读到str了。怎么样,到这一步应该知道怎么去替换了吧?那么现在把articleTitle替换成"bonny的个人博客",把content替换成"本站提供网页制作,flash动画制作,平面设计服务,观注互联网前端技术!".
str=replace(str,"articleTitle","bonny的个人博客")
str=replace(str,"content","本站提供网页制作,flash动画制作,平面设计服务,观注互联网前端技术!")
做完替换之后,还有一个最重要的步骤,就是把str重新还原成一个html网页。当然了,不管是读取文件还是写出文件,都离不开fso。那么我们做如下的一些代码。假设新产生的页面设置为bo_index.html
fileName="bo_index.html"
Set createHtml = Server.CreateObject("Scripting.FileSystemObject")
Set htmlFile = createHtml.CreateTextFile(server.MapPath(fileName))
htmlFile.write(str)
set htmlFile=nothing
set createHtml=nothing
执行完上述代码后,去看看,你的硬盘上是不是多了一个bo_index.html.打开来看看她和template.html有什么区别?
第三步:总结。
asp产生静态页面首先要创建一个页面模板,(特别提示:模板中要被替换的内容最好用特殊符号,比如$界定开来,避免其他不能被替换的内容混淆。)
其次是要用fso读出这个模板。最后我们从数据库中查找出数据,替换掉模板中的内容并产生新的页面。
一个小技巧,在设定输出的文件名称的时候,我们未必就用bo_index.html,用bo_index.shtml也是可以的哦,大家试试看吧。

当然了,除了这个方法外。把模板文件的html代码保存到数据库中,从数据库中查找出来。


查看更多...

Tags: asp 原理

分类:PHP教程 | 固定链接 | 评论: 0 | 查看次数: 6963

apihook原理分析

跨进程[b]API Hook[/b](初稿)

什么是“跨进程 API Hook”?
众所周知Windows应用程序的各种系统功能是通过调用API函数来实现。API Hook就是给系统的API附加上一段小程序,它能监视甚至控制应用程序对API函数的调用。所谓跨进程也就是让自己的程序来控制别人程序的API调用了。

查看更多...

Tags: api 原理 分析 hook

分类:c/c++ | 固定链接 | 评论: 0 | 查看次数: 7404
  • 1