Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > 汇编语言 > Delphi下构建无导入表程序-使用:hash获取API,k32Base等
【标  题】:Delphi下构建无导入表程序-使用:hash获取API,k32Base等
【关键字】:Delphi,hash,API,k32Base
【来  源】:http://blog.csdn.net/iiprogram/archive/2006/05/11/723151.aspx

Delphi下构建无导入表程序-使用:hash获取API,k32Base等

Your Ad Here //Start~~~
《Delphi实现无导入表程序》
初学编程,请勿奸笑:P
首先感谢,一些认识不认识的前辈高人的资料.谢谢~

前提假设您已经有了一定的PE Virus的知识.
好了~先简单的说说无导入表程序的几点基本的构成
1.GetkernelBase(获取kernel32.dll的基址)
由于我们是无导入表的程序所以,所有API函数都是依靠内存搜索完成的,
想必大家已经知道EXE载入到内存中ESP保存ExitThread函数地址
ExitThread函数是在kernel32.dll 模块中的,所以证明EXE载入的时候就已经加载
了kernel32.dll模块,于是我们的工作就是确定kernel32.dll的基址。

这里我使用"PEB获取地址kernel32.dll基址"的方法(简单嘛。。Delphi调试这种程序很麻烦的~所以使用这个。。)

以下是代码:

[Ctrl+A 全部选择]
基址获取到了剩下的就是需要确定我们需要的两个重要的函数
"GetProcAddress"和"LoadLibraryA"两个函数~有了这两个函数我们就可以
获取到我们需要的任何函数了..

2.自构建"GetProcAddress"函数
上面我们已经获取到k32的基址了~但是问题是我们还需要一些其他函数来完成我们程序
的功能,首先我们回顾一下~前辈们写的API搜索函数,为了减少程序体积和保护程序自身
他们基本上都是使用hash值来搜索模块的导入表的,这样我们就可以自己构建一个API搜索
函数了。直接贴代码好了~其实Delphi版本的API搜索函数许多前辈都写过
Aming,老王,liumazi等等~

以下是代码:

[Ctrl+A 全部选择]
好了~此函数就可以帮我们,循环对比ProcessCRC参数中给出的API的hash值
然后发挥这个函数的地址,我这里使用的是Crc32算法~
上面的PE的数据结构可以从Windows中Copy出来


以下是代码:

[Ctrl+A 全部选择]
这个是计算一个数据的Crc32数值--返回是10进制的~可以自己改变成16进制

好了现在我们已经有了GetProcAddress函数了~好像还少一个??
前面我们提到过需要两个函数~GetProcAddress有了·k32的基址也有了
这样我们就可以搜索出LoadLibraryA的地址....
好了完成前面的代码

以下是代码:

[Ctrl+A 全部选择]

好了现在我们两个函数都有了~现在我们的任务已经完成一半了!
(为什么是一半??因为Delphi非等同于VC和XXXASM,他不能够自己构建PE结构)
准确的说~即使你写一个只有一条begin end.的程序~编译器编译的时候还是会连接N多
的API函数~进来....
为了完成任务,我们这里就使用了Nico Bendlin前辈的miniEXE的模板...
自己打造了一个无导入表的程序...
这里需要我们自己编译system.pas和SysInit.pas单元

以下是代码:

[Ctrl+A 全部选择]
System.pas单元代码

以下是代码:

[Ctrl+A 全部选择]

主程序代码

以下是代码:

[Ctrl+A 全部选择]

到此程序基本上完成了~测试了Win2k,XP,2k3都可以正常运行
(实在找不到Win9x测试了~~不好意思)
compression engine:【上一篇】
单片机与PC机电话远程通信系统:【下一篇】
【相关文章】
  • API拦截原理分析
  • Delphi 's news-DevCo Name Rush
  • [转]DELPHI程序的调试与异常处理
  • Delphi中使用ActiveX的一些心得
  • 在DELPHI中编程生成ACCESS数据库文件并创建指向此连接的ODBC数据源
  • [转]Delphi中资源文件使用详解
  • 在DELPHI中动态创建控件以及控件的事件
  • 在Delphi程序中使用正则表达式
  • 在DELPHI中根据事件指针调用事件
  • Delphi中的加密算法(MD5,MD4,MD3...)
  • 【随机文章】
  • C++学习日志二
  • VB中让窗体始终处于最前面
  • 如何使用CCO
  • 同步synchronized方法和代码块
  • 修改 IDA边界线插件
  • 3D Desktop
  • Windows Update实用技巧二则
  • Linux 网络安全和优化
  • 家庭联网 别让“小东西”坏大事
  • 技术人员走过的路
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.