首页
社区
课程
招聘
[原创][firefly][第一阶段◇第一题]答案提交
发表于: 2008-10-1 19:55 2746

[原创][firefly][第一阶段◇第一题]答案提交

2008-10-1 19:55
2746

          看雪论坛.腾讯公司2008软件安全竞赛

            [第一阶段◇第一题] 答题说明

        firefly
        08.10.1



-----+++++-----
1) 增加输出表
-----+++++-----

   我选择导入表之后文件偏移0x700(RVA为0x2100)处的空白位置来构造导出表,导入表的
数据如下所示

  00000700  00 00 00 00 C2 95 A2 48 00 00 00 00 40 21 00 00  ....聲....@!..
  00000710  01 00 00 00 01 00 00 00 01 00 00 00 28 21 00 00  .........(!..
  00000720  2C 21 00 00 30 21 00 00 00 11 00 00 4A 21 00 00  ,!..0!.....J!..
  00000730  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  00000740  70 65 64 69 79 2E 64 6C 6C 00 4F 70 65 6E 55 72  pediy.dll.OpenUr
  00000750  6C 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00  lA..............

其中设置OpenUrlA函数的RVA为0x1100。

    然后,用stud_pe查看pediy.dll的输出表的数据目录在偏移为0x148,修改数据目录,
将其偏移设置为0x2100,大小设置为0x54,如下所示:

00000140  00 00 00 00 10 00 00 00 00 21 00 00 54 00 00 00  ........!..T...

-----+++++-----
2) 增加导入函数
-----+++++-----

   由于要调用IE浏览器打开http://bbs.pediy.com,需要用到ShellExecute函数,因此
要为pediy.dll增加导入函数。为了方便期间,先用LoadPE增加导入函数,这样就多了一
个区段。为了能加分,手工移动这个区段到文件偏移0x770(RVA 0x2170)处,如下所示

  00000C00  73 68 65 6C 6C 33 32 2E 64 6C 6C 00 00 00 53 68  shell32.dll...Sh
  00000C10  65 6C 6C 45 78 65 63 75 74 65 41 00 C0 05 00 00  ellExecuteA.?a}
  00000C20  00 00 00 00 5C 20 00 00 00 00 00 00 00 00 00 00  ....\ ..........
  00000C30  72 20 00 00 0C 20 00 00 50 20 00 00 00 00 00 00  r ... ..P ......
  00000C40  00 00 00 00 9C 20 00 00 00 20 00 00 1C 50 00 00  ....?... ..P..
  00000C50  00 00 00 00 00 00 00 00 00 50 00 00 1C 50 00 00  .........P..P..

    由于偏移地址变了,需要将部分地址修改成如下所示:

  00000770  73 68 65 6C 6C 33 32 2E 64 6C 6C 00 00 00 53 68  shell32.dll...Sh
  00000780  65 6C 6C 45 78 65 63 75 74 65 41 00 7C 21 00 00  ellExecuteA.?a}
  00000790  00 00 00 00 5C 20 00 00 00 00 00 00 00 00 00 00  ....\ ..........
  000007A0  72 20 00 00 0C 20 00 00 50 20 00 00 00 00 00 00  r ... ..P ......
  000007B0  00 00 00 00 9C 20 00 00 00 20 00 00 8C 21 00 00  ....?... ..?..
  000007C0  00 00 00 00 00 00 00 00 70 21 00 00 8C 21 00 00  ........p!..?..

    最后更新导入表的入口地址。

-----+++++-----
3) 增加代码
-----+++++-----

   首先把ShellExecuteA用的参数添加到.data段,文件偏移为0x900(RVA 0x3100)处,如下
所示:

  003F3100  6F 70 65 6E 00 00 00 00 68 74 74 70 3A 2F 2F 62  open....http://b
  003F3110  62 73 2E 70 65 64 69 79 2E 63 6F 6D 00 00 00 00  bs.pediy.com....

    为了尽可能保持小的代码体积,不在程序里进行自定位,写好代码后修改程序的重定位表。
增加的代码如下所示。

  003F1100 >/$  33C0          xor     eax, eax
  003F1102  |.  50            push    eax                              ; /IsShown => 0
  003F1103  |.  50            push    eax                              ; |DefDir => NULL
  003F1104  |.  50            push    eax                              ; |Parameters => NULL
  003F1105  |.  68 08313F00   push    003F3108                         ; |FileName = "http://bbs.pediy.com"
  003F110A  |.  68 00313F00   push    003F3100                         ; |Operation = "open"
  003F110F  |.  50            push    eax                              ; |hWnd => NULL
  003F1110  |.  FF15 8C213F00 call    dword ptr [<&shell32.ShellExecut>; \ShellExecuteA
  003F1116  \.  C3            retn

-----+++++-----
4) 修改重定位表
-----+++++-----

    注意到添加的代码中RVA 0x1106,0x110B,0x1112需要重定位,因此在重定位表中追加数据,
修改后的重定位表如下所示:

  003F4000  00 10 00 00 26 00 00 00 03 30 08 30 10 30 2F 30  ...&...000/0
  003F4010  34 30 83 30 8E 30 96 30 9F 30 BE 30 C5 30 06 31  40??????1
  003F4020  0B 31 12 31 00 00 00 00 00 00 00 00 00 00 00 00  11............

    然后修改重定位表的大小。

---------++++++++++----------
5) 修改PE各区段的Virtual size
---------++++++++++----------

    由于添加了新的代码和数据,需要修改PE各区段的Virtual size。

    这样就修改完成了。由于直接增加导入表,所使用的函数在Win2k中也能使用,因此
不需要针对2K平台做修改。



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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 264
活跃值: (30)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
2
RVA:1100
OpenUrlA函数大小=23 字节
附件提交次数=1
得分=min[1.0,(13/23)]×100-(1-1)×5=56.5
2008-10-2 01:20
0
游客
登录 | 注册 方可回帖
返回
//