首页
社区
课程
招聘
[已解决]DLL自身抹链后如何对原有的自身函数调用?或者说DLL可以自身进行抹链吗?
发表于: 2014-8-21 00:44 8382

[已解决]DLL自身抹链后如何对原有的自身函数调用?或者说DLL可以自身进行抹链吗?

2014-8-21 00:44
8382
int i_hide=0;
void S()
{
        AfxMessageBox("HH");
}
typedef void (*fShowMe)(void);
void ShowMe()
{
       
        if (i_hide==0)
        {
                i_hide=1;
                fShowMe pfShowMe =&S;

                molian(::GetModuleHandle("TestHd.dll"));   //抹除自己的痕迹

                fShowMe();
        }
}

这是DLL内的函数,如果去掉 molian ()这个抹链函数的话 可以直接调用 S() 但是加上抹链函数后 调用就无效了 。
通过别人写好的源码,看到了他就是抹链前记下来函数地址,抹链后调用成功,但他是EXE进行的操作。
我想知道,DLL本身可以进行抹链(断链)的操作吗? 如果可以,抹链后DLL如何继续工作下去呢?

刚才看了下 DLL 自身运行抹链操作后 整个流程都不再继续执行了...

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (23)
雪    币: 23
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
无法真正的隐藏起来,只能断开Module相关信息,函数地址永远存在。
2014-8-21 00:51
0
雪    币: 433
活跃值: (1910)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
3
额 我知道 这个抹链只是在XUETR里看不到模块信息了 但是我想知道这种抹链的操作可以让DLL自身来完成吗?
我这样写了之后 DLL的确看不到了 但是DLL本身无法继续工作了
2014-8-21 00:56
0
雪    币: 23
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
可以在断链前用GetProcAddress的方法先拿到函数地址,然后定义函数指针,就可以了。
2014-8-21 00:58
0
雪    币: 433
活跃值: (1910)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
嗯 谢谢了 我去试试
2014-8-21 01:23
0
雪    币: 433
活跃值: (1910)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
6
不对 有个问题啊 GetProcessAdd获取的都是DLL公开的函数 难道我要把所有的DLL函数都公开吗?
2014-8-21 01:32
0
雪    币: 433
活跃值: (1910)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
7
试过了 还是不可以。。
2014-8-21 01:48
0
雪    币: 23
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
那他是怎么调用成功的呢?。。。。。
2014-8-21 02:32
0
雪    币: 433
活跃值: (1910)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
9
嗯 解决了 如果必须插入DLL的话 我这里有个蠢蠢的办法

假设DLL A 和DLL B
DLL A 的内容:
载入DLL B
获取DLL B的启动函数
对DLL B进行抹链
调用DLL B的启动函数
卸载DLL A

手动注入DLL A 即可 DLL A 被卸载后 DLL B就会“消失” 但是功能依旧存在。
2014-8-21 03:44
0
雪    币: 23
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
。。。。这种办法也有一种名称,在PE里叫,由引用所产生的导入项。理论上说的过去。
但我还是坚持认为,你引用函数地址后,再隐藏DLL比较靠谱。既然能实现就贡喜一下,另外好奇的问下,为什么要隐藏DLL呢?难道你要注入的东西有检测?
2014-8-21 06:36
0
雪    币: 433
活跃值: (1910)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
11
游戏会扫特征0 0
2014-8-21 07:08
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
在DLLMain里面 用memoryLoad的方式加载自己 再return FALSE
2014-8-21 07:28
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
13
抹链是指PEB里那个结构吗?那种隐藏模块的方法。隐藏后不会对函数调用产生影响。
你的问题可能是因为MFC,你用WIN32写个DLL测试。
2014-8-21 09:28
0
雪    币: 23
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
找到问题了,你没导出地址啊,那肯定不行的。
2014-8-21 11:34
0
雪    币: 3
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
楼主我想问这样之后无法定位特征码了对嘛?我是否可以理解用这个之后注入DLL就不会被追封了
2014-8-21 11:39
0
雪    币: 23
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
逐内存搜索,马上显原型。
2014-8-21 11:41
0
雪    币: 433
活跃值: (1910)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
17
要看游戏力度了 11这样照样过不去 还要再写点
2014-8-21 12:41
0
雪    币: 433
活跃值: (1910)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
18
不是的 单纯抹掉PEB xuetr都能找出来的
2014-8-21 12:43
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
19
ReloadAndRun,居然没人关注你这句话,真是杯具
2014-8-21 13:38
0
雪    币: 433
活跃值: (1910)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
20
可能是MFC的DLL 原因 进行抹链后 抹链的下一条语句不会执行...
2014-8-21 13:54
0
雪    币: 5207
活跃值: (3452)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
抹链一点用都没有。
2014-8-21 14:26
0
雪    币: 23
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
你就做一个最简单的DLL,一个功能,然后一定要导出,不导出无法拿到指针的,确认一下,拿到指针再隐身,应该就可以了。
2014-8-21 14:36
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
23
还是教主NB
2014-8-21 14:49
0
雪    币: 433
活跃值: (1910)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
24
其实就是14年的内存的DLL    只不过当时存在的问题现在依然存在..比如有些资源没办法加载
2018-2-19 22:24
0
游客
登录 | 注册 方可回帖
返回
//