首页
社区
课程
招聘
关于加壳时处理 TLS 的讨论
发表于: 2005-3-30 17:56 15172

关于加壳时处理 TLS 的讨论

2005-3-30 17:56
15172

最近学习 yoda 1.2 ,  发现 Thread Local Storage(TLS)部分处理不太明白,  yoda 只是简单地把IMAGE_TLS_DIRECTORY32 复制到其他地方,  加壳后好象也没什么问题.

IMAGE_TLS_DIRECTORY32 STRUCT
    StartAddressOfRawData   dd    ?
    EndAddressOfRawData     dd    ?
    AddressOfIndex          dd     ?
    AddressOfCallBacks      dd     ?
    SizeOfZeroFill          dd    ?
    Characteristics         dd     ?
IMAGE_TLS_DIRECTORY32 ENDS

后来我在 yoda 的基础上 加了 aPlib,  问题就出来了,  程序不能运行了, 调试后发现问题就出在  TLS 上, 看来仅仅把IMAGE_TLS_DIRECTORY32 复制一份是不够的, 加壳时要完美处理TLS 好象比较困难, 不知各位写壳高手有什么好的办法?  还好, 用到 TLS 的程序好象不多.

下面是我的实验过程
附件:tls.zip

五. 从上面可见,  Tls 数据初试化和 TLS回调函数都在 OEP 之前进行,  如果程序加壳, 壳的 Loader 这时还没有起作用,   代码和 IAT 都没有解密,  要执行 回调函数肯定出错.

还要注意,  IMAGE_TLS_DIRECTORY32 的数据都是 VA, 不是 RVA,   还涉及到重定位的问题.

不过, 有TLS 回调函数的程序不多,  壳只要简单地复制  IMAGE_TLS_DIRECTORY32 就可以了.


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (21)
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
EXECryptor
2005-3-30 17:59
0
雪    币: 398
活跃值: (1078)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
3
试试我的程序 test2.exe?
2005-3-30 18:02
0
雪    币: 47147
活跃值: (20445)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
最初由 simonzh2000 发布
还好, 用到 TLS 的程序好象不多.


Delphi程序都有吧。

一般情况复制到其他地方好像没问题。
如何要处理也想听听高人的建议。
2005-3-30 18:25
0
雪    币: 47147
活跃值: (20445)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
5
最初由 simonzh2000 发布
试试我的程序 test2.exe?


用“复制到别一地方,再修改目录表指针处理方式”没问题。
是不是你将其压缩了?不能压缩的。
2005-3-30 18:29
0
雪    币: 392
活跃值: (909)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
6
没有问题啊,我的处理跟yoda一样啊
2005-3-30 18:33
0
雪    币: 398
活跃值: (1078)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
7
to kaxue:  那 18h 字节我当然没压缩.
Delphi 真正用到 TLS 的不多.  一般都是建立一个结构, 没有实际内容. 如果真正用了 Tls,  你说的处理方法就不够了.

to cyclotron: yoda 的处理本来就是不完善的.

请各位仔细看我的文章.

不过, test2.exe 是我 PEDiy 出来的, 怎么用 complier 生成我也不清楚.
2005-3-30 19:45
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
支持
2005-3-30 19:54
0
雪    币: 159
活跃值: (339)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
9
好文章...顶..
2005-3-30 19:56
0
雪    币: 254
活跃值: (126)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
10
实际程序我还没有见过有callback函数的

对于本来没有callback函数的程序,加壳后的AddressOfCallBacks应该为空或指向的内容为空,除非象execryptor那样有意去利用它作些loader的工作;如果指向一个有数据的地方,这里如果不是自己设计好的代码就很容易出错
2005-3-30 20:34
0
雪    币: 161
活跃值: (231)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
强贴必留名
2005-3-31 17:27
0
雪    币: 266
活跃值: (191)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
好文,刚注意都这个问题!
2005-4-1 12:37
0
雪    币: 260
活跃值: (162)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
TLS 是PE文件中最先取得执行权限的地方,不过壳用的多了,懂得分析的人也会多起来
2005-4-1 14:38
0
雪    币: 260
活跃值: (162)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
呵呵  hexer对这个技术领会的应该最深
2005-4-1 14:39
0
雪    币: 258
活跃值: (230)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
15
TLS中的static数据始终被进程中主线程或其他共享线程所监听,交互操作,,,
TLS中的static数据可以进行多态处理吧,,,,,如何强劲处理,,,???
小第先做沙发哈,,,学习,,

2005-4-1 16:44
0
雪    币: 371
活跃值: (790)
能力值: ( LV12,RANK:570 )
在线值:
发帖
回帖
粉丝
16
29a第8期就有讲TLS的利用:)
2005-4-1 16:46
0
雪    币: 161
活跃值: (231)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
病毒如何利用TLS进行攻击,想法第一,但对加壳好象没什么用
2005-4-1 16:59
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
18
tls proxy
2005-4-3 09:36
0
雪    币: 398
活跃值: (1078)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
19
最初由 forgot 发布
tls proxy


原来 “Writing your own packer” 考虑了我的问题, 并做了处理。 谁有这个壳的代码, 学习学习?
2005-4-4 23:54
0
雪    币: 230
活跃值: (101)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
20
最初由 simonzh2000 发布


原来 “Writing your own packer” 考虑了我的问题, 并做了处理。 谁有这个壳的代码, 学习学习?


我有这个代码,但好象也有问题,对delphi的exe加壳后,系统提示“不是有效的win32程序“

你有什么好的办法吗?
2005-12-12 13:18
0
雪    币: 398
活跃值: (1078)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
21
最初由 dogwang 发布


我有这个代码,但好象也有问题,对delphi的exe加壳后,系统提示“不是有效的win32程序“

你有什么好的办法吗?


你的代码是哪里下载的, 能发一份给我吗?
2005-12-13 10:41
0
雪    币: 230
活跃值: (101)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
22
最初由 simonzh2000 发布


你的代码是哪里下载的, 能发一份给我吗?


当然可以,但我怎么给你呀?站内短信给我的mail吧(不知道能不能用),也希望你能帮我解决delphi的问题呢,呵呵!
2005-12-14 15:26
0
游客
登录 | 注册 方可回帖
返回
//