首页
社区
课程
招聘
[原创]Boneasher 答题
发表于: 2007-8-28 22:04 7989

[原创]Boneasher 答题

2007-8-28 22:04
7989
第二阶段第一题

简要分析:
1。首先发现程序会读取test.txt的内容进行处理
2。test.txt开始的2个DWORD会当成64位整数(记为d1)参与一个乘法和mod运算
并且当其结果满足(26-x)x-156 >0是会有一个内存拷贝动作,进一步分析发现x=13的时候会有溢出且刚好能覆盖返回地址
3。上面的64位运算即 x = d1 * ( 78CC02A869948F1B ) % 5BE6FF82A5164785
考虑到截位则
x = (d1* 78CC02A869948F1B %10000000000000000) % 5BE6FF82A5164785
等价于
(d1* 78CC02A869948F1B %10000000000000000) = x 或者 5BE6FF82A5164785 + x + 2*5BE6FF82A5164785+x
4。分别对上面三种情况用欧几里德算法得到d1可以为 7590C53F8AD397F7 , 704DA9F23D6365D6或者6B0A8EA4EFF333B5
5。尝试之后发现用6B0A8EA4EFF333B5可以使溢出代码长度较小。

溢出代码构造:
返回地址选为 4005C0,运行后跳到保存文件内容的地方继续运行,中间插入修改Failed!为OK!的代码以及一些堆栈修复代码,然后返回到400383继续运行。

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 200
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
前面那个帖怎么锁了?
2007-8-28 22:04
0
雪    币: 200
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
第二阶段第一题

简要分析:
1。首先发现程序会读取test.txt的内容进行处理
2。test.txt开始的2个DWORD会当成64位整数(记为d1)参与一个乘法和mod运算
并且当其结果满足(26-x)x-156 >0是会有一个内存拷贝动作,进一步分析发现x=13的时候会有溢出且刚好能覆盖返回地址
3。上面的64位运算即 x = d1 * ( 78CC02A869948F1B ) % 5BE6FF82A5164785
考虑到截位则
x = (d1* 78CC02A869948F1B %10000000000000000) % 5BE6FF82A5164785
等价于
(d1* 78CC02A869948F1B %10000000000000000) = x 或者 5BE6FF82A5164785 + x  或者 2*5BE6FF82A5164785+x
4。分别对上面三种情况用欧几里德算法得到d1可以为 7590C53F8AD397F7 , 704DA9F23D6365D6或者6B0A8EA4EFF333B5
5。尝试之后发现用 6B0A8EA4EFF333B5 可以使溢出代码长度较小。

溢出代码构造:
返回地址选为 4005C0,运行后跳到保存文件内容的地方继续运行,中间插入修改Failed!为OK!的代码以及一些堆栈修复代码,然后返回到400383继续运行。
2007-8-28 22:06
0
雪    币: 200
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
晕,突然发现标题没有改。更新了一下
上传的附件:
2007-8-28 22:13
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
5
验证通过~~
2007-8-28 22:40
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
6
128.08244625043529759470366857644
2007-9-2 21:17
0
游客
登录 | 注册 方可回帖
返回
//