阅读:6298回复:28
NTLDR的源程序有没有?
逆向有人搞过吗 :)
|
|
|
沙发#
发布于:2005-04-08 22:49
可以发到我邮箱吗?谢谢
我也一直很想知道NTLDR的实现细节。 Leonsoft@163.com |
|
|
板凳#
发布于:2005-03-21 09:59
reegees谢谢你发的代码,不过之前我已经搞到了。大家研究出成果一起讨论一下。
|
|
|
地板#
发布于:2005-03-18 08:39
ok,这个空间可以吗?呵呵,到时候znsoft别对咱们产生意见啊 只要大家能出好精品,我觉得跟tiamo聊过DLL注入的问题,真是长进不少 |
|
|
地下室#
发布于:2005-03-17 17:23
人家已经开始分包了,准备传送到我的邮箱里,我接收完后会分发给大家的
|
|
5楼#
发布于:2005-03-17 17:01
[quote]这个空间根本就打不开!!!! 刚才还好好的,现在我也打不开了 [/quote] 现在可以了 ftp://www.zndev.com/ |
|
|
6楼#
发布于:2005-03-17 16:55
这个空间根本就打不开!!!! 刚才还好好的,现在我也打不开了 |
|
|
7楼#
发布于:2005-03-17 16:32
Microsoft’s early 32-bit development tools often included a descendent of the 5.10 series, usually called \"MASM386.EXE\". The latest was labeled \"5.NT.02\" and responds as @Version=510. It\'s really primitive when compared to MASM 6.x.
|
|
8楼#
发布于:2005-03-17 16:27
这个空间根本就打不开!!!!
|
|
9楼#
发布于:2005-03-17 16:04
ok,这个空间可以吗?呵呵,到时候znsoft别对咱们产生意见啊
|
|
10楼#
发布于:2005-03-17 15:44
masm386是什么是MASM5.0吗?? 我刚更新的masm32v8中的masm是6.14版的,masm386是什么 我没有nt4的src,我只有个win2k的,win2k src中没有ntldr,不知能不能这样编译点别的东东出来。 reegees说“昨天有位朋友愿意把nt4 src给我,不过需要一个空间上传,不知有没有”,借znsoft的宝地再用用, ftp://soft:mysoft@www.zndev.com |
|
|
11楼#
发布于:2005-03-17 14:39
masm386是什么是MASM5.0吗??
|
|
|
12楼#
发布于:2005-03-17 10:04
还有一点忘了说了先用DDK对SDKTools目录下的文件进行编译生成masm386等工具。
|
|
|
13楼#
发布于:2005-03-17 09:59
需要用masm386和cl16.exe,设置好source编译,还有目录最好是C:\\nt
|
|
|
14楼#
发布于:2005-03-17 09:51
不知道,昨天我还在想这个问题,就算我有完整的ntldr源代码,我怎样编译出来??我希望高手能给予解释.
|
|
15楼#
发布于:2005-03-17 08:54
如何编译原代码里的NTLDR??
|
|
|
16楼#
发布于:2005-03-17 08:22
呵呵,我的bochs也是老出问题,根本就装不完全,所以就这么将就这用呢,到后面调用系统内核部分我就完蛋了,刚好ntldr能完整运行.
这是我第一次搞反汇编,有很多地方请各位高手多多指教. 现在我也在找nt4的原码,希望看到ntldr的代码,反汇编分析太累了,再说分析到后面,有些地址你根本就不知道那什么鬼东西. 昨天有位朋友愿意把nt4 src给我,不过需要一个空间上传,不知有没有. |
|
17楼#
发布于:2005-03-16 19:04
强啊,兄弟。我觉得反向太麻烦所以直接研究源代码。经验谈不上,还是在分析中。我用Bochs装Win2k总出问题。
|
|
|
18楼#
发布于:2005-03-15 13:32
现在只整理出来下面这一部分,第一次写东西也是第一次搞反汇编,请见谅:
在这篇分析的文挡中我并没有对ntldr进行全面的分析,只是动态调试的进行了分析。 请看反汇编后的代码: jmp 0x1c6 这是第一句,上来就是一个跳转 mov bx,0x2ac0 shr bx,0x4 mov ax,cs add ax,bx mov ss,ax mov sp,0x1528 push dx mov ds,ax mov es,ax 以上是对SS、DS、ES各段寄存器进行初始化,从中可以看出0x2ac即是代码段的大小,而CS=0x2000,所以SS=DS=ES=0x22ac,注意此时没有对FS段寄存器进行初始化。 movzx edx,ax shl edx,0x4 add edx,0x1dd0 mov [0xcbe],edx xor bp,bp movzx ebp,bp mov esp,sp mov word ptr [0x15bc],ds call 0x1a44 在此跟进 enter 0x1c,0x0 建立堆栈桢 push si mov al,ss[bp+04] bp+04=0x80并不清楚这是什么数据,可能是BIOS留下的。 mov byte ptr [0x15c4],al call 0x22cc 在此跟进 enter 0x14,0x0 sub bx,bx mov es,bx mov bx,0x410 mov [bp-14],bx mov [bp-12],es and byte ptr es:[bx],0xcf byte ptr es:[bx],0x20 注意,在0x00410处存储的是由BIOS建立的“设备编码表“,and和or这两条语句用来打开某个设备。“设备编码表”的资料自行查找,在此不于给出,这段代码的意思即:将初始化显示方式表置为80列表文本方式(认为是彩色/图形适配器) mov [bp-10],0x10 dx call 0x1a44 ebp Size(1c) esp=0x1506 si call 0x22cc ebp ebp=0x1500Size(14)esp=0x14ec 0x301 0x1202 0x10 0x0 0x410 ss ax esp=0x14e8 call 0x272 ebp di si ds es esp=0x14dc mov [bp-0c],0x1202 mov[bp-0a],0x301 lea ax,ss:[bp-10] call 0x272 在此个跟进 enter 0x0,0x0 push di push si push ds push es les di,[bp+04] di=0x14f0指向ss:0x14e8 mov ax,es:[di] ax=0x10 可能是个什么标志 sub ax,0x10 jnb 0x28c 高于或等于跳 shl ax,0x1 (0x28c) cmp ax,0x14 nop jb 0x29c 低于或等于跳 mov bx,ax mov ax,word ptr cs:[bx+030c] ax=0x2e4 push es push di push ax mov ax,es:[di+04] mov bx,es:[di+06] mov cx,es:[di+08] mov dx,es:[di+0a] mov si,es:[di+0c] mov es,es:[di+0e] ret 技术跳转 int10的地址就是0x2e4 int 0x10 对于这个中断调用不是太熟悉,参数不明,可能是用来获取“视频子系统[配置”的信息,如果哪位高手有相关资料请与我联系 jmp 0x2bf pop di pop es pushf 标志进栈 进栈前eflags=0x293 pop word ptr es:[di+02] 将标志出栈 [di+2]=ss:0x14f2 在以上的操作中(除了int10操作不知道以外)并没有对该地址进行读写操作,可能是以前或者有BIOS赋值 出栈后eflags的值没有改变,这段代码的意思不明白,请高手赐教 mov es:[di+04],ax mov es:[di+06],bx mov es:[di+08],cx mov es:[di+0a],dx mov es:[di+0c],si mov es:[di+0e],es pop es pop ds pop si pop di leave ret call 0x272返回:该函数的作用不是太明确,第一,int10功能调用不明,第二,对标志寄存器的操作不明。 ad sp,0x4 mov [bp-10],0x10 mov [bp-0c],0x3 lea ax,[bp-10] push ss push ax call 0x272 在调用int10 的时候,其参数有了改变,所以这一次的功能调用可能是“读取光标的位置” add sp,0x4 mov [bp-10],0x10 mov [bp-0c],0x2000 sub ax,ax mov [bp-0a],ax mov [bp-06],ax lea ax,[bp-10] push ss push ax call 0x272 在这个调用中因为不知道int10 ah=20,所以连猜都猜不出来了 add sp,0x4 mov [bp-10],0x10 mov [bp-0c],0x0a20 mov [bp-0a],0x0 mov [bp-08],0x1 lea ax,[bp-10] push ss push ax call 0x272 在当前光标处写字符?? call 0x2786 在此跟进 enter 0x8,0x0 mov [bp-08],0x0 mov [bp-06],0xB800 mov [bp-02],0x720 07为属性“normal”,2为空格 mov [bp-04],0x7d0 计数器,循环2000次 mov es,[bp-06] mov ax,[bp-02] (0x27a1) mov bx,[bp-08] add word ptr [bp-08],0x2 mov es:[bx],ax es:[bx]显卡内存的起始地址 dec word ptr [bp-04] jne 0x27a1 这段代码是将显卡的内存地址从es:[bx]到es:[0x07d0]全部用0x720填充 sub ax,ax mov word ptr [0x1dc0],ax mov word ptr [0x1dbe],ax mov ax,word ptr [0x1dba] mov dx,[0x1dbc] mov word ptr [0x1db6],ax mov [0x1db8],dx 这几个地址不太清楚(可能是跟user_private_area和UTF-8 format character 有关,瞎蒙的:―) ) leave ret 返回 leave ret 到此call 0x22cc函数返回 总结:该过程调用的功能:该函数的主要功能是对显示设备的操作,包括打开设备编码表中的显示设备、调用了四次call 0x272函数(该函数调用了BIOS中断int 10,每次调用其实现的功能都不一样,不过估计都是对屏幕的初始化具体功能不清楚,int10 参数不常见)、最后call 0x2786(该函数的主要功能是初始化屏幕,为显示窗口打基础,即Pop-up windows functions。其寸取了几个内存地址,意义不明) 请老大给点意见先,谢谢赐教. |
|
19楼#
发布于:2005-03-15 13:05
哦?是吗?不知道已经分析到那里了,我只分析到了计算扩展内存的那里,后面有些地址就是不明白存储的是什么东西,咳,已经搁置好长时间了,我们可以交流一下吗??
|
|
上一页
下一页