首页
社区
课程
招聘
[原创]第四题,论坛ID:xsjs
发表于: 2008-11-27 00:45 1899

[原创]第四题,论坛ID:xsjs

2008-11-27 00:45
1899
详细的分析说明见附件.第一次参加,不知道要不要在这里说明,干脆就放附件里面了.评委多照顾啊!

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 7325
活跃值: (3803)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
2
文件太多,我只看最后的成品

sys加载直接蓝屏
exe通过
dll用到了40xxxx的未重定位的数据,不通过

40分
2008-11-27 09:42
0
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我在虚拟机和物理机器上都成功了,是不是加载错文件了?
成品是final目录里面的成品.exe啊
2008-11-27 12:32
0
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
可能是我文件太多了,评委老师注意到哪个是成品吧.我直接传单独的成品吧.
上传的附件:
2008-11-27 12:37
0
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
003C071D   .  8D0D 05104000 lea     ecx, dword ptr [401005]
003C0723   .  8D1D C0114000 lea     ebx, dword ptr [4011C0]
003C0729   .  2BD9          sub     ebx, ecx
003C072B   .  03D8          add     ebx, eax
003C072D   .  53            push    ebx
003C072E   .  8D1D 94104000 lea     ebx, dword ptr [401094]

您说的40XXXX的数据不是用,您注意看,两个LEA后面是一个SUB,是用来算偏移量的,加上上面CALL获得的真实地址用于重定位字符串的.如果说DLL中这么引用是有问题的,那么我在EXE中也这么用了,是不是也有问题?我不太会用MASM直接写汇编源代码,所以只有用这种笨办法了.请评委老师再看看啊!
2008-11-27 12:43
0
雪    币: 7325
活跃值: (3803)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
6
dll我看错了,算通过
sys虚拟机下蓝屏了,xp sp3
蓝屏在
000104C1   .  F3:A6         repe    cmps byte ptr es:[edi], byte ptr [esi]
访问异常

70分
2008-11-27 13:38
0
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
谢谢评委!
驱动我也不知道怎么回事,我的就正常.
也许是我们的考虑不全吧.
我的是XP SP3,物理机器是CPU T2080双核的.
物理和虚拟机(虚拟单核CPU一个)都没蓝.都是正常显示一句
"Hi! I am xsjs, now you are running my program as a driver"
2008-11-27 14:01
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
8
while(addr>0x7fffffff){
                char *MZ=(char *)addr;
                if(MZ[0]=='M'&&MZ[1]=='Z'){
                        //DbgPrint("ntoskrnl.exe or ntkrnlpa.exe is based at %x",addr);
                        break;
                }
                addr=addr-0x1000;
        }

这个算法碰到无效页就会蓝屏

搜索函数算法貌似也有问题~
2008-11-27 16:42
0
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
是这样的,因为addr起始处为int 2eh对应的地址,从这里到ntoskrnl.exe的空间都是已经分配的,都属于ntoskrnl.exe.
如果出现页被置换出内存的话,我是这样考虑的:
当属于ntoskrnl.exe的某个页被置换出内存,而又需要执行这个页上的代码时,实际情况是不可能蓝屏的.也就是说此时产生缺页中断,中断例程会将页读入内存.
基于这样的考虑,我觉得在访问属于ntoskrnl.exe的空间时都不会出现蓝屏,因为这些内存都是分配过的,要么在物理内存中,要么在硬盘上.
我的实际测试过程也没有出现错误.
2008-11-27 19:20
0
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
如果一定要判断,除了IsMmvalable()我不知道其他的函数.但是我不能在PE文件头中引入这个函数,因为如果引入,就会导致程序作为exe执行时初始化失败.
2008-11-27 19:23
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
11
是这样的,因为addr起始处为int 2eh对应的地址,从这里到ntoskrnl.exe的空间都是已经分配的,都属于ntoskrnl.exe.
如果出现页被置换出内存的话,我是这样考虑的:
当属于ntoskrnl.exe的某个页被置换出内存,而又需要执行这个页上的代码时,实际情况是不可能蓝屏的.也就是说此时产生缺页中断,中断例程会将页读入内存.
基于这样的考虑,我觉得在访问属于ntoskrnl.exe的空间时都不会出现蓝屏,因为这些内存都是分配过的,要么在物理内存中,要么在硬盘上.
我的实际测试过程也没有出现错误.

====
某些版本的ntoskrnl体内会有多块无效内存,例如某些PAE版本的ntkrnlpa.exe
2008-11-27 19:44
0
雪    币: 7325
活跃值: (3803)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
12
这个题目不需要内存搜'MZ'的
2008-11-27 20:07
0
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
确实不知道会有这样的ntkrnlpa.exe,我也只是知道分舵处理机和单处理机的........谢谢Q评委!又学到一点!呵呵!
  我搜索MZ是找ntoskrnl.exe的文件头,然后定位DbgPrint().
  不知道其他选手怎么做的,在我的机器上,对应用程序引入ntorkrnl.exe就会初始化失败,具体是在加载hal.dll的时候,因为其DllMain()访问了"不该在ring3下访问的"数据.如果不引入ntorkrnl.exe,我就得手动定位ntoskrnl.exe并查找其中函数.
  我是这么想的.无论如何,驱动我写得不多,了解得也不多,驱动挂了就挂了吧.全当是学习吧.
  这次比赛确实是让我逼着自己学了很多东西,以前从来不直接用MASM写代码,这次写了;以前从没手动用代码处理过PE文件头,这次做了;以前很少关心ring0下的一些实现细节,这次也逼着自己去学了......
  但是这样的比赛不要太多了,做这个比赛可落了好多课程!......
  whatever,这样的比赛很吸引人!
2008-11-27 20:50
0
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
懂为什么不用搜索ntoskrnl.exe的加载基址了,今天发现ntdll.dll里面导出了DbgPrint();也就是说可以用int 2eh来调用DbgPrint ()的
2008-11-30 14:10
0
游客
登录 | 注册 方可回帖
返回
//