-
-
[原创]比赛第一阶段第一题DIY"pediy.dll"
-
2008-10-7 00:07 6008
-
我这里有两种方法,主要是因为题目要求不太清楚,我怕理解有误,故全面考虑之。
第一种理解是:只能打开网址“http://bbs.pediy.com”,而且OpenUrlA应该是无参数的函数。
也就是说无论使用何种“Test”主程序测试这个“pediy.dll”都应该运行成功而且只打开“http://bbs.pediy.com”页面。
第二种理解是:只要能打开页面“http://bbs.pediy.com”即可。
第一种方法
按要求增加输出表和输出函数OpenUrlA,我选择在导入表的后面一片空白处,文件偏移6B0开始:
前四个字段不重要,都默认置为0,nName字段是指向文件名的RVA,我把“pediy.dll”存储在了文件偏移6E0处(RVA=2000-600+6E0=000020E0),因此这个字段值就是:000020E0;nBase可以默认置为0,NumberOfFunctioins和NumberOfNames都设置为1;后面是三个表的RVA,我把函数地址表选在偏移6F0处,把函数名表放在700处,把函数序号表放在710处。函数地址表的内容先不填写,因为还没有打造好OpenUrlA函数;由于导出的只有一个函数,我把名字填充在偏移720处,直接把RVA 00002120填写到函数名地址表中。还有一个序号表,就预留着空间就行了。
现在打造OpenUrlA函数,我把函数代码放在RVA:10CE处,代码如下(大小为12字节):
(此时可以将输出表结构中偏移为6F0处的函数地址表的内容填写为000010CE)
现在再看看代码,因为“pediy.dll”中没有ShellExecuteExA函数,所以还需要为其增加这个函数,直接使用PeEditor即可快速完成。
因为“pediy.dll”的ImageBase为400000,所以打造代码时首先应考虑“以400000为基址”,最后再进行重定位操作。要求是打开一个网页,最容易想到API ShellExecuteA,但是由于这个函数参数太多,打造代码时势必占用太多空间。跟踪下发现ShellExecuteA最终是要调用函数ShellExecuteExA的。而ShellExecuteExA只需要一个参数lpExecInfo,指向SHELLEXECUTEINFO结构,如果把这个结构填写完毕,直接把地址压栈调用ShellExecuteExA即可。而SHELLEXECUTEINFO结构的打造也相当简单,只要第一个字段为0000003C(cbSize),第二个字段为00001500(fMask),第五个字段lpFile为串“http://bbs.pediy.com”的地址即可。
如下,把这些信息放在“.data”节表中:
最后要解决重定位信息,这在dll文件里是必须的。
原本的重定位信息为:
在OpenUrlA函数体内有2处需要重定位:10CF和10D5处。另外令人恼火的就是SHELLEXECUTEINFO结构了,因为结构体中还需要地址,而且也要进行重定位。我不得不将串“http://bbs.pediy.com”所在的节表“.data”当做“代码”来处理,让Windows完成这个重定位过程。只要将所在节表的特征值增加上“可执行代码属性”即可。
最终的重定位信息修改为:
具体改写内容:
测试代码:
procedure OpenUrlA;stdcall;external 'pediy.dll';
//……
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenUrlA;
end;
第二种方法
输出表结构的构造同上,这次为“pediy.dll”新增导入函数ShellExecuteA ,OpenUrlA代码打造为(大小为7字节):
重定位信息修改为(大小仍未20,因为这次只新添一个重定位信息,刚好填补原来对齐用的空间):
参数让测试程序填写,测试代码:
procedure OpenUrlA(p1,p2,p3,p4,p5,p6:DWORD);stdcall;external 'pediy.dll';
//……
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenUrlA(0,0,DWORD(PCHAR('http://bbs.pediy.com')),0,0,0);
end;
不足之处:两种方法都使用工具为“pediy.dll”新增导入函数,使得文件大小稍有增大。
第一种理解是:只能打开网址“http://bbs.pediy.com”,而且OpenUrlA应该是无参数的函数。
也就是说无论使用何种“Test”主程序测试这个“pediy.dll”都应该运行成功而且只打开“http://bbs.pediy.com”页面。
第二种理解是:只要能打开页面“http://bbs.pediy.com”即可。
第一种方法
按要求增加输出表和输出函数OpenUrlA,我选择在导入表的后面一片空白处,文件偏移6B0开始:
前四个字段不重要,都默认置为0,nName字段是指向文件名的RVA,我把“pediy.dll”存储在了文件偏移6E0处(RVA=2000-600+6E0=000020E0),因此这个字段值就是:000020E0;nBase可以默认置为0,NumberOfFunctioins和NumberOfNames都设置为1;后面是三个表的RVA,我把函数地址表选在偏移6F0处,把函数名表放在700处,把函数序号表放在710处。函数地址表的内容先不填写,因为还没有打造好OpenUrlA函数;由于导出的只有一个函数,我把名字填充在偏移720处,直接把RVA 00002120填写到函数名地址表中。还有一个序号表,就预留着空间就行了。
现在打造OpenUrlA函数,我把函数代码放在RVA:10CE处,代码如下(大小为12字节):
(此时可以将输出表结构中偏移为6F0处的函数地址表的内容填写为000010CE)
现在再看看代码,因为“pediy.dll”中没有ShellExecuteExA函数,所以还需要为其增加这个函数,直接使用PeEditor即可快速完成。
因为“pediy.dll”的ImageBase为400000,所以打造代码时首先应考虑“以400000为基址”,最后再进行重定位操作。要求是打开一个网页,最容易想到API ShellExecuteA,但是由于这个函数参数太多,打造代码时势必占用太多空间。跟踪下发现ShellExecuteA最终是要调用函数ShellExecuteExA的。而ShellExecuteExA只需要一个参数lpExecInfo,指向SHELLEXECUTEINFO结构,如果把这个结构填写完毕,直接把地址压栈调用ShellExecuteExA即可。而SHELLEXECUTEINFO结构的打造也相当简单,只要第一个字段为0000003C(cbSize),第二个字段为00001500(fMask),第五个字段lpFile为串“http://bbs.pediy.com”的地址即可。
如下,把这些信息放在“.data”节表中:
最后要解决重定位信息,这在dll文件里是必须的。
原本的重定位信息为:
在OpenUrlA函数体内有2处需要重定位:10CF和10D5处。另外令人恼火的就是SHELLEXECUTEINFO结构了,因为结构体中还需要地址,而且也要进行重定位。我不得不将串“http://bbs.pediy.com”所在的节表“.data”当做“代码”来处理,让Windows完成这个重定位过程。只要将所在节表的特征值增加上“可执行代码属性”即可。
最终的重定位信息修改为:
具体改写内容:
测试代码:
procedure OpenUrlA;stdcall;external 'pediy.dll';
//……
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenUrlA;
end;
第二种方法
输出表结构的构造同上,这次为“pediy.dll”新增导入函数ShellExecuteA ,OpenUrlA代码打造为(大小为7字节):
重定位信息修改为(大小仍未20,因为这次只新添一个重定位信息,刚好填补原来对齐用的空间):
参数让测试程序填写,测试代码:
procedure OpenUrlA(p1,p2,p3,p4,p5,p6:DWORD);stdcall;external 'pediy.dll';
//……
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenUrlA(0,0,DWORD(PCHAR('http://bbs.pediy.com')),0,0,0);
end;
不足之处:两种方法都使用工具为“pediy.dll”新增导入函数,使得文件大小稍有增大。
by sing
2008-10-3
2008-10-3
赞赏
他的文章
谁下载
bstzxy
kanxue
forgot
hxhsy
nbw
海风月影
xingbing
LOCKLOSE
linhanshi
ghostkim
jskew
Boneasher
wer412
kuang110
fanli
luocong
大唐飞侠
1day
kyc
Kuuga_CRCR_001
rooky2000
sscheng
无奈
xzchina
peaceclub
eunt
mosker
lnn1123
执着我一生
xingcr
hahar
shoooo
nba2005
jjnet
manbug
kingwu
zrhai
ycool
zhuwg
appleangel
lsm
inraining
cxhcxh
来来去去
likunkun
luzhmu
herx
Intelfan
xiaodai
chaogui
jinyh
amour
rongge
十三语
pathletboy
五德转移
caierhuan
流行咒
testttt
Lancia
coaco
ediee
siming
dttom
WuShg
书平
netwind
峰回路转
keenjoy
haifengjl
AEVE
earlor
BENBiRD
沙金
Bughoho
LULU
okyzx
FoGhost
壹只老虎
pcasa
幻云
seamoon
rocketming
gnuser
AXIxuqing
sudami
无聊仔
dtcser
xihuanxue
suncaiyw
人间无味
funlxd
xxdoc
bzhkl
basherone
xysmzp
金华
doghib
安摧
谁下载
bstzxy
kanxue
forgot
hxhsy
nbw
海风月影
xingbing
LOCKLOSE
linhanshi
ghostkim
jskew
Boneasher
wer412
kuang110
fanli
luocong
大唐飞侠
1day
kyc
Kuuga_CRCR_001
rooky2000
sscheng
无奈
xzchina
peaceclub
eunt
mosker
lnn1123
执着我一生
xingcr
hahar
shoooo
nba2005
jjnet
manbug
kingwu
zrhai
ycool
zhuwg
appleangel
lsm
inraining
cxhcxh
来来去去
likunkun
luzhmu
herx
Intelfan
xiaodai
chaogui
jinyh
amour
rongge
十三语
pathletboy
五德转移
caierhuan
流行咒
testttt
Lancia
coaco
ediee
siming
dttom
WuShg
书平
netwind
峰回路转
keenjoy
haifengjl
AEVE
earlor
BENBiRD
沙金
Bughoho
LULU
okyzx
FoGhost
壹只老虎
pcasa
幻云
seamoon
rocketming
gnuser
AXIxuqing
sudami
无聊仔
dtcser
xihuanxue
suncaiyw
人间无味
funlxd
xxdoc
bzhkl
basherone
xysmzp
金华
doghib
安摧
谁下载
bstzxy
kanxue
forgot
hxhsy
nbw
海风月影
xingbing
LOCKLOSE
linhanshi
ghostkim
jskew
Boneasher
wer412
kuang110
fanli
luocong
大唐飞侠
1day
kyc
Kuuga_CRCR_001
rooky2000
sscheng
无奈
xzchina
peaceclub
eunt
mosker
lnn1123
执着我一生
xingcr
hahar
shoooo
nba2005
jjnet
manbug
kingwu
zrhai
ycool
zhuwg
appleangel
lsm
inraining
cxhcxh
来来去去
likunkun
luzhmu
herx
Intelfan
xiaodai
chaogui
jinyh
amour
rongge
十三语
pathletboy
五德转移
caierhuan
流行咒
testttt
Lancia
coaco
ediee
siming
dttom
WuShg
书平
netwind
峰回路转
keenjoy
haifengjl
AEVE
earlor
BENBiRD
沙金
Bughoho
LULU
okyzx
FoGhost
壹只老虎
pcasa
幻云
seamoon
rocketming
gnuser
AXIxuqing
sudami
无聊仔
dtcser
xihuanxue
suncaiyw
人间无味
funlxd
xxdoc
bzhkl
basherone
xysmzp
金华
doghib
安摧
谁下载
bstzxy
kanxue
forgot
hxhsy
nbw
海风月影
xingbing
LOCKLOSE
linhanshi
ghostkim
jskew
Boneasher
wer412
kuang110
fanli
luocong
大唐飞侠
1day
kyc
Kuuga_CRCR_001
rooky2000
sscheng
无奈
xzchina
peaceclub
eunt
mosker
lnn1123
执着我一生
xingcr
hahar
shoooo
nba2005
jjnet
manbug
kingwu
zrhai
ycool
zhuwg
appleangel
lsm
inraining
cxhcxh
来来去去
likunkun
luzhmu
herx
Intelfan
xiaodai
chaogui
jinyh
amour
rongge
十三语
pathletboy
五德转移
caierhuan
流行咒
testttt
Lancia
coaco
ediee
siming
dttom
WuShg
书平
netwind
峰回路转
keenjoy
haifengjl
AEVE
earlor
BENBiRD
沙金
Bughoho
LULU
okyzx
FoGhost
壹只老虎
pcasa
幻云
seamoon
rocketming
gnuser
AXIxuqing
sudami
无聊仔
dtcser
xihuanxue
suncaiyw
人间无味
funlxd
xxdoc
bzhkl
basherone
xysmzp
金华
doghib
安摧
谁下载
bstzxy
kanxue
forgot
hxhsy
nbw
海风月影
xingbing
LOCKLOSE
linhanshi
ghostkim
jskew
Boneasher
wer412
kuang110
fanli
luocong
大唐飞侠
1day
kyc
Kuuga_CRCR_001
rooky2000
sscheng
无奈
xzchina
peaceclub
eunt
mosker
lnn1123
执着我一生
xingcr
hahar
shoooo
nba2005
jjnet
manbug
kingwu
zrhai
ycool
zhuwg
appleangel
lsm
inraining
cxhcxh
来来去去
likunkun
luzhmu
herx
Intelfan
xiaodai
chaogui
jinyh
amour
rongge
十三语
pathletboy
五德转移
caierhuan
流行咒
testttt
Lancia
coaco
ediee
siming
dttom
WuShg
书平
netwind
峰回路转
keenjoy
haifengjl
AEVE
earlor
BENBiRD
沙金
Bughoho
LULU
okyzx
FoGhost
壹只老虎
pcasa
幻云
seamoon
rocketming
gnuser
AXIxuqing
sudami
无聊仔
dtcser
xihuanxue
suncaiyw
人间无味
funlxd
xxdoc
bzhkl
basherone
xysmzp
金华
doghib
安摧
谁下载
bstzxy
kanxue
forgot
hxhsy
nbw
海风月影
xingbing
LOCKLOSE
linhanshi
ghostkim
jskew
Boneasher
wer412
kuang110
fanli
luocong
大唐飞侠
1day
kyc
Kuuga_CRCR_001
rooky2000
sscheng
无奈
xzchina
peaceclub
eunt
mosker
lnn1123
执着我一生
xingcr
hahar
shoooo
nba2005
jjnet
manbug
kingwu
zrhai
ycool
zhuwg
appleangel
lsm
inraining
cxhcxh
来来去去
likunkun
luzhmu
herx
Intelfan
xiaodai
chaogui
jinyh
amour
rongge
十三语
pathletboy
五德转移
caierhuan
流行咒
testttt
Lancia
coaco
ediee
siming
dttom
WuShg
书平
netwind
峰回路转
keenjoy
haifengjl
AEVE
earlor
BENBiRD
沙金
Bughoho
LULU
okyzx
FoGhost
壹只老虎
pcasa
幻云
seamoon
rocketming
gnuser
AXIxuqing
sudami
无聊仔
dtcser
xihuanxue
suncaiyw
人间无味
funlxd
xxdoc
bzhkl
basherone
xysmzp
金华
doghib
安摧
谁下载
bstzxy
kanxue
forgot
hxhsy
nbw
海风月影
xingbing
LOCKLOSE
linhanshi
ghostkim
jskew
Boneasher
wer412
kuang110
fanli
luocong
大唐飞侠
1day
kyc
Kuuga_CRCR_001
rooky2000
sscheng
无奈
xzchina
peaceclub
eunt
mosker
lnn1123
执着我一生
xingcr
hahar
shoooo
nba2005
jjnet
manbug
kingwu
zrhai
ycool
zhuwg
appleangel
lsm
inraining
cxhcxh
来来去去
likunkun
luzhmu
herx
Intelfan
xiaodai
chaogui
jinyh
amour
rongge
十三语
pathletboy
五德转移
caierhuan
流行咒
testttt
Lancia
coaco
ediee
siming
dttom
WuShg
书平
netwind
峰回路转
keenjoy
haifengjl
AEVE
earlor
BENBiRD
沙金
Bughoho
LULU
okyzx
FoGhost
壹只老虎
pcasa
幻云
seamoon
rocketming
gnuser
AXIxuqing
sudami
无聊仔
dtcser
xihuanxue
suncaiyw
人间无味
funlxd
xxdoc
bzhkl
basherone
xysmzp
金华
doghib
安摧
谁下载
bstzxy
kanxue
forgot
hxhsy
nbw
海风月影
xingbing
LOCKLOSE
linhanshi
ghostkim
jskew
jhshbwd
Boneasher
wer412
kuang110
fanli
luocong
大唐飞侠
1day
kyc
Kuuga_CRCR_001
rooky2000
sscheng
无奈
xzchina
peaceclub
eunt
mosker
lnn1123
执着我一生
xingcr
hahar
shoooo
nba2005
jjnet
manbug
kingwu
zrhai
ycool
zhuwg
appleangel
lsm
inraining
cxhcxh
来来去去
likunkun
luzhmu
herx
Intelfan
xiaodai
chaogui
jinyh
amour
rongge
十三语
pathletboy
五德转移
caierhuan
流行咒
testttt
Lancia
coaco
ediee
siming
dttom
WuShg
书平
netwind
峰回路转
keenjoy
haifengjl
AEVE
earlor
BENBiRD
沙金
Bughoho
LULU
okyzx
FoGhost
壹只老虎
pcasa
幻云
seamoon
rocketming
gnuser
AXIxuqing
sudami
无聊仔
dtcser
xihuanxue
suncaiyw
人间无味
funlxd
xxdoc
bzhkl
basherone
xysmzp
金华
doghib
谁下载
bstzxy
kanxue
forgot
hxhsy
nbw
海风月影
xingbing
LOCKLOSE
linhanshi
ghostkim
jskew
jhshbwd
Boneasher
wer412
kuang110
fanli
luocong
大唐飞侠
1day
kyc
Kuuga_CRCR_001
rooky2000
sscheng
无奈
xzchina
peaceclub
eunt
mosker
lnn1123
执着我一生
xingcr
hahar
shoooo
nba2005
jjnet
manbug
kingwu
zrhai
ycool
zhuwg
appleangel
lsm
inraining
cxhcxh
来来去去
likunkun
luzhmu
herx
Intelfan
xiaodai
chaogui
jinyh
amour
rongge
十三语
pathletboy
五德转移
caierhuan
流行咒
testttt
Lancia
coaco
ediee
siming
dttom
WuShg
书平
netwind
峰回路转
keenjoy
haifengjl
AEVE
earlor
BENBiRD
沙金
Bughoho
LULU
okyzx
FoGhost
壹只老虎
pcasa
幻云
seamoon
rocketming
gnuser
AXIxuqing
sudami
无聊仔
dtcser
xihuanxue
suncaiyw
人间无味
funlxd
xxdoc
bzhkl
basherone
xysmzp
金华
doghib
看原图