PeDoll - 如何编写PeDoll脚本

API hook

在常用脚本的脚本编写手册中,包含了PeDoll所有支持 hook 的API,如果想要监视某一个API函数,只需要编写:

hook + 该API的函数名 //大小写敏感

例如:我们想知道这个程序是否对文件进行的操作(假设不考虑更底层API调用),只需要对CreateFileACreateFileW 进行监视就可以了,脚本代码如下:

hook CreateFileA
hook CreateFileW

binary hook

PeDoll 支持对二进制代码的直接hook,这对于一些自定义函数的hook尤为有效。 注意:在进行 binary hook 时你必须使用其他工具知晓该处代码的栈结构并且你需要在脚本中去平衡堆栈,其代码格式为:

binary 需要hook的二进制代码16进制序列

执行完成后出栈字节数 ESPEBP 的解释方式执行结束后 EAX 的值 例如:我们知道易语言字符串比较函数的特征为 8B5424048B4C240885D2750D,因为是调用者清理堆栈(cdecl call),所以其出栈字节数为 0 ,在 ESP+4ESP+8 偏移处是字符串指针。当执行结束后 EAX0 是表示比对匹配,因此其代码可以写为:

binary 8B5424048B4C240885D2750D 0 S4S8 0

其中:

  • S4 表示 String at ESP+4
  • S8 表示 String at ESP+8

当然,假如要解释为数字,就可以写为 D4D8 ,表示 Decimal at ESP+4 ,其中 S8 表示 Decimal at ESP+8

同理:

  • B4 表示 String at EBP+4
  • B8 表示 String at EBP+8
  • E4 表示 Decimal at EBP+4
  • E8 表示 Decimal at EBP+8

API过滤及断点

CreateFileA 为例,查看脚本编写手册如下说明:

API CreateFileA
Regular
1 CREATEFILEA
2 <UNKNOW\|CREATE\|OPEN\|RESET>
3 <var lpFileName>

其中: - 1 表示这个函数名,注意它是大写的

  • 2 表示它的三个参数,UNKNOW 表示未知操作,CREATE 表示创建,OPEN 表示打开,RESET 表示复位
  • 3 表示这个函数将操作的文件

如果我们需要对这个函数进行监视,当他 打开一个 名叫 123.txt 时进行断点,那么代码可以这样写:

  hook CreateFileA
  FILTER_START //过滤器开始,如果需要设置断点,这个代码一定要先写
  CREATEFILEA <OPEN> <123.txt> QUERY SHOW

其中,QUERY 表示断点询问,当然 QUERY 还可以写成 REJECT 表示直接拒绝该函数操作,或者 TERMINATE 表示直接结束程序,如果不写或写为 PASS 表示默认放行。 另外,参数中还支持其它比较运算符,包括(+ 包含、= 全等、> 大于、< 小于、& 与、! 非),例如:

CREATEFILEA <OPEN> <*> QUERY SHOW //表示打开任意文件时下断点
CREATEFILEA <OPEN> <*123> QUERY SHOW //表示打开的文件包含123字符时断点
CONNECT <192.168.1.1> <>1000> QUERY SHOW //表示当客户端连接192.168.1.1的端口大于1000时断点
CONNECT <192.168.1.1> <!1000> QUERY SHOW //表示当客户端连接192.168.1.1的端口不等于1000时断点
//...以此类推
转载请务必保留本文链接和注明内容来源,并自负版权等法律责任。
一网盟 » PeDoll - 如何编写PeDoll脚本

发表回复

分享是种美德,好人一生平安

立即查看 了解详情