Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux安全 > » 正文

免杀之源文件定位-Map文件利用

来源: 未知 分享至:
方法就是Map文件映射。转自网络 留自参考

   本文假定已经定位到特征码。

svchost.dll 000038AA_00000002 100044AA
svchost.dll 00005F98_00000002


第一步设置VC编译环境生成Map文件。
在 VC 中,点击菜单“Project -> Settings”选项页(或按下 Alt+F7),选择 C/C++ 选项卡,并在最下面的 Project Options 里面输入:/Zd ,然后要点击 Link 选项卡,选中“Generate mapfile”复选框,并在最下面的 Project Options 里面输入:/mapinfo:lines,表示生成 MAP 文件时,加入行信息。
设置完成。

第二步编译VC工程,设置活动工程编译即可,这个不用说明。这个步骤完成后,在release(或debug)目录,多了一个.map文件(比如svchost.map)。

第三步打开map文件(用UE或文本编辑器打开都行),形式如下:

(begin)
Timestamp is 488fcef2 (Wed Jul 30 10:16:18 2008)

Preferred load address is 10000000
---------------------------------------------------------------------------1----(为方便说明,happywrw添加)
Start       Length     Name                Class
0001:00000000 00010a50H .text                CODE
0001:00010a50 00000485H .text$x                 CODE
0002:00000000 000004c8H .idata$5             DATA
......
0003:00000010 00000004H .CRT$XIZ             DATA
0003:00000020 00001a50H .data                DATA
0003:00001a70 00000688H .bss                    DATA
0004:00000000 000000a8H .rsrc$01             DATA
0004:000000b0 00000cf0H .rsrc$02             DATA

----------------------------------------------------------------------------2---(为方便说明,happywrw添加)
   Address       Publics by Value              Rva+Base     Lib:Object

0001:00000000    ??0CAudio@@QAE@XZ       10001000 f Audio.obj
0001:000000d0    ??_GCAudio@@UAEPAXI@Z    100010d0 f i Audio.obj
0001:000000d0    ??_ECAudio@@UAEPAXI@Z    100010d0 f i Audio.obj
0001:000000f0    ??1CAudio@@UAE@XZ       100010f0 f Audio.obj
0001:000001e0    ?getRecordBuffer@CAudio@@QAEPAEPAK@Z 100011e0 f Audio.obj
0001:00000240    ?playBuffer@CAudio@@QAE_NPAEK@Z 10001240 f Audio.obj
0001:000002c0    ?InitializeWaveIn@CAudio@@AAE_NXZ 100012c0 f Audio.obj
   ......
0001:00003310    ?SendToken@CFileManager@@AAEHE@Z 10004310 f FileManager.obj
0001:00003320    ?UploadToRemote@CFileManager@@AAE_NPAE@Z 10004320 f FileManager.obj
0001:00003440    ?FixedUploadList@CFileManager@@AAE_NPBD@Z 10004440 f FileManager.obj
0001:00003670    ?StopTransfer@CFileManager@@AAEXXZ 10004670 f FileManager.obj
0001:00003730    ?CreateLocalRecvFile@CFileManager@@AAEXPAE@Z 10004730 f FileManager.obj
(end)


嘿嘿,要学东西就要有耐心,我写都写出来了,你看还费力嘛,关键是免费学金手指呢,^_^

我们看下,定位svchost.dll 的第一个特征码内存地址为:100044AA,在第2块中,我们可以找到RVA+BASE与之很接近的是
0001:00003440    ?FixedUploadList@CFileManager@@AAE_NPBD@Z 10004440 f FileManager.obj
这样我们可以定位到FileManager.cpp中的FixedUploadList函数,是不是范围缩小了?
下面我们再缩小代码行
利用这个公式:特征码行偏移 = 特征码地址(Crash Address)- 基地址(ImageBase Address)- 0x1000
看起来好像很难,其实很简单,我们将100044AA去掉内存基址10000000,再减1000,因为PE很多从1000开始,可以得到代码偏移地址为34AA。
到第3块中找对应的代码行。
偏移地址34AA在(551 0001:0000349e 552 0001:000034b8 )中间,也就是551行和552行中间,我们到源程序中查找第551行:
       wsprintf(lpszFilter, "%s%s*.*", lpPathName, lpszSlash);
这样就定位出源代码了,要怎么修改就怎么修改它就可以了。


Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史