|
发表于 2010-1-25 02:22:20
|显示全部楼层
【文章标题】: PE学习之手动添加TLS表
【文章作者】: 下面湿了
【下载地址】: 自己搜索下载
【保护方式】: MASM
【编写语言】: ASM
【使用工具】: C32ASM+OD
【操作平台】: XP SP3
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
最近学习PE,听了Nooby大牛的一席教诲,真是听君一席话,胜读十年书!PE又很难理解,我对TLS表,很有兴趣,于是研究了很久
才摸到了一点门路,于是有了此文。
首先,我们今天的目标就是,给一个没有TLS表的程序,手动添加一个TLS表,由于程序是一个Hello World,于是,我们要
让程序在提示hello World之前,再提示一个 Helo TLS。好我们开始,
这里特别感谢楼下Nooby的教程。
下载 (15.21 KB)
2009-2-24 18:50
首先查看PE图解,找到 TLS Table 在Offest 170h,占位8字节,前4位是TLS Table地址,后4位是大小,找一个空地,
先看一下区段数据,我想把TLS放入data段里面,把data区段的属性VOffset=3000,ROffset=A00,Size=200记下
,用C32ASM导入程序,来到A00,我就选择这一块把B00开始,那么B00-A00=100,加上Voffeset=00003100,于是我们在Roffeset170h处
填写00130000
IMAGE_TLS_DIRECTORY32的结构,如下所示:
IMAGE_TLS_DIRECTORY32 STRUCT
StartAddressOfRawData dd ?//0
EndAddressOfRawData dd ?//0
AddressOfIndex dd ?//指向一个空地
AddressOfCallBacks dd ?//回调地址
SizeOfZeroFill dd ?//0
Characteristics dd ?//0
IMAGE_TLS_DIRECTORY32 ENDS
这里解释一下
StartAddressofRawData为TLS数据起始的地址
EndAddressOfRawData为结束的地址
AddressOfIndex是TLS索引的地址
AddressOfCallBacks指向一组以NULL结尾的IMAGE_TLS_CALLBACK函数的地址数组
以上都为地址,这里使用的是VA,而不是RVA了。当修改时这是要注意的地方。
SizeOfZeroFill表明填充TLS变量区域的大小
Characteristics用作保留,可能用作TLS标志。
所以我们先用源程序用OD载入看看,
由于填充Tls Table需要虚拟地址,所以我们这儿必须填写OD载入后看到的地址,上面的表中,AddressOfIndex何
AddressOfCallBacks不可为0,其他填0就OK了。我在OD找了00403040(index),00403050(callback)这两块地方,返回C32,于是在B00处填写
00 00 00 00 00 00 00 00 40 30 40 00 50 30 40 00 00 00 00 00 00 00 00 00
好了,到这里我们距离成功还差一点了,看定义
AddressOfCallBacks是一个回调地址,在该地址出应该填写一个虚拟的回调地址
所以,我们在00403050处应该填写一个回调地址,我们再找一个空地00401050来写详细的callback function,好,我们用C32反载入修改好的程序,
我们ctrl+G来到00403050处,文件地址是00000A50,我们在此打入50104000,
00401050的相对文件地址是00000650,我们在650处修改为90c3
[local]5[/local]
就是 nop retn,
下载 (23.3 KB)
2009-2-24 18:50
然后搜索hello world,在下面的空地上打入Hello TLS,保存。
保存后,我们用OD载入,来到00401050处,好,开始汇编。
pushad
pushfd
push 0x00
push 0x0040300C ; ASCII "Hi"
push 0x00403013 ; ASCII "Hello TLS"
push 0x00
call dword ptr [0x00402008] ; user32.MessageBoxA
popfd
popad
ret
然后保存吧。
保存后运行一下试试看,是不是启动何退出的时候都会出现Hello Tls 啊?
--------------------------------------------------------------------------------
【版权声明】: 本文原创于UnPackcN技术论坛, 转载请注明作者并保持文章的完整, 谢谢! |
|