首页
社区
课程
招聘
[原创][第一阶段◇第三题]看雪论坛.腾讯公司2008软件安全技术竞赛
发表于: 2008-10-8 17:26 2794

[原创][第一阶段◇第三题]看雪论坛.腾讯公司2008软件安全技术竞赛

2008-10-8 17:26
2794
1.出错函数
出错的函数是:_snwprintf
出错地址:00420D81  |.  E8 7CE0FEFF   call    <__snwprintf                0040ee02 f   libcmt:snwprint.ob>
用OD载入后,导入map文件。
找到button点击函数地址:00420D20  TestFloa.?OnBnClickedBtnCrash@CTestFloatDlg@@QAEXXZ 00420d20 f   TestFloatDlg.obj
然后点击button,单步跟踪。定位到出错函数地址。

2.出错原因
程序采用静态库方式进行编译,编译好后加过壳,然后在脱掉的。
由于在脱壳时,破坏了库函数代码,造成出错。

3.修复办法
给exe文件加入一个输入表
msvcrt.dll 的 _snwprintf 函数
然后在代码空白处加上
00420DC1   > \FF15 18B04300 call    dword ptr [<&msvcrt._snwprintf>] ; \_snwprintf
00420DC7   .^ EB BD         jmp     short 00420D86

修改 00420D81  的代码为
00420D81   . /EB 3E         jmp     short 00420DC1


然后保存即可。
上传已经修复的文件,见附件。

科锐学子:沙金

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 136
活跃值: (20)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
2
重新提交,上次提交作废。

1.出错函数
出错的函数是:_snwprintf
出错地址:00420D81  |.  E8 7CE0FEFF   call    <__snwprintf                0040ee02 f   libcmt:snwprint.ob>
用OD载入后,导入map文件。
找到button点击函数地址:00420D20  TestFloa.?OnBnClickedBtnCrash@CTestFloatDlg@@QAEXXZ 00420d20 f   TestFloatDlg.obj
然后点击button,单步跟踪。定位到出错函数地址。

2.出错原因
.text:0040F618 83 3D 5C 40 42 00+                cmp     ds:off_42405C, 0
.text:0040F61F 74 1A                             jz      short loc_40F63B
.text:0040F621 68 5C 40 42 00                    push    offset off_42405C
.text:0040F626 E8 65 67 00 00                    call    __IsNonwritableInCurrentImage
.text:0040F62B 85 C0                             test    eax, eax
.text:0040F62D 59                                pop     ecx
.text:0040F62E 74 0B                             jz      short loc_40F63B
.text:0040F630 FF 74 24 04                      push    [esp+arg_0]
.text:0040F634 FF 15 5C 40 42 00                 call    ds:off_42405C

代码里有判断.rdata是否有执行权限。
使用loadPE查看,本exe的.rdata只有读和写的权限,没有执行权限。

3.修复办法
使用loadpe,修改.rdata权限为 执行和读取
上传的附件:
2008-10-9 00:37
0
雪    币: 264
活跃值: (30)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
3
结果提交时间 12 小时 37 分钟
结果提交时间长度 = 757 分钟
结果提交次数 = 2
结果提交为根本原因
得分 = [(2880 - 757)/2880]^1/5 x 1.0 x 100 - (2 -1 ) x 5 = 89.08
2008-10-9 12:52
0
游客
登录 | 注册 方可回帖
返回
//