首页
社区
课程
招聘
[求助]注入的so中如何获取目标进程的bss段地址
发表于: 2017-1-9 19:56 4764

[求助]注入的so中如何获取目标进程的bss段地址

2017-1-9 19:56
4764
目标程序中的函数及变量均没有名字,目前函数已经可以通过code段地址偏移后成功调用,IDA调试时通过segments窗口能看到.bss段,但是/proc/xxx/maps中看不到.bss段,求助运行时如何获取到.bss段地址

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 148
活跃值: (298)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
load进去以后是没这个segment了
2017-1-10 09:16
0
雪    币: 1787
活跃值: (345)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
自己读磁盘上的文件,解析下section,获取下bss段的RVA,然后加上SO基址,就有了。
2017-1-10 11:23
0
雪    币: 241
活跃值: (236)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
BinaryReader br = new BinaryReader(new FileStream("filename", FileMode.Open));
int length = Convert.ToInt32(br.BaseStream.Length);
byte[] data = br.ReadBytes(length);
br.Close();
int e_shoff = System.BitConverter.ToInt32(data, 0x20);
int e_shnum = System.BitConverter.ToInt16(data, 0x30);
int dynstr_addr = 0;
int dynstr_len = 0;
for (int n = 0; n < e_shnum; n++)
{
	byte[] by = new byte[0x28];
	Array.ConstrainedCopy(data, e_shoff + 0x28 * n, by, 0, by.Length);
	if (by[0] == 0x01 && dynstr_addr == 0) //需要初始化table
	{
		dynstr_addr = System.BitConverter.ToInt32(by, 0x10);
		dynstr_len = System.BitConverter.ToInt32(by, 0x14);
		n = 0;
	}
	if (dynstr_addr == 0) continue;
	string section_name = GetByteString(data, dynstr_addr + System.BitConverter.ToInt16(by, 0x0));
	if (section_name.Contains("bss")) 
	{
		int bssaddr=System.BitConverter.ToInt32(by, 0x10) //这个就是你要的bss段地址!
		break;
	}
}


c#写的解析elf文件的代码 我把你用不到的部分都精简掉了 你拿去参考 转成c++的就可以用了
elf文件格式很简单的 网上很多资料 不是什么难事
2017-1-16 14:37
0
游客
登录 | 注册 方可回帖
返回