阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

手机号码,快捷登录

老司机
查看: 2919|回复: 11

使用BOCHS逆向XP---换版发帖

[复制链接]

该用户从未签到

发表于 2009-11-18 11:28:46 | 显示全部楼层 |阅读模式
貌似在 源码---二次开发 发的贴不算入每日贴,郁闷中,只好把发过的帖子又发到这里来了

使用BOCHS安装XP,安装比较漫长,大约要9个小时左右,但是启动很快的,约2分钟,比我没安装前想象的快多了.注意虚拟硬盘需要至少2G的空间,硬盘空间多的,尽量留大些,有兴趣的可以试下,以后有时间会发些BOCHS反汇编XP启动过程的代码.尽请各位关注...

[ 本帖最后由 cxdzxc 于 2009-11-19 09:30 编辑 ]
BOCHS_XP.jpg
楼主热帖
启用邀请码注册,提高发帖质量,建设交流社区

该用户从未签到

 楼主| 发表于 2009-11-18 11:39:09 | 显示全部楼层

现在反汇编可以开始了

我使用的是BOCHS2.4.2版本,首先进入BOCHS目录,找到bochsrc.bxrc,右键点击之,选择Debugger,进入调试模式,然后START进入,机器暂停在FFFF0H处,输入b 0x7c00 回车,再输入c命令,机器自动停在0X7C00处了,现在反汇编可以开始了
启用邀请码注册,提高发帖质量,建设交流社区

该用户从未签到

 楼主| 发表于 2009-11-18 12:01:00 | 显示全部楼层

反汇编第1步

<bochs:3> u /200 0x7c00
00007c00: (                    ): xor ax, ax                ; 33c0    ;AX清0
00007c02: (                    ): mov ss, ax                ; 8ed0 ;使堆栈段段值为0
00007c04: (                    ): mov sp, 0x7c00            ; bc007c  ;使SP指向0X7C00
00007c07: (                    ): sti                       ; fb      ;开放中断
00007c08: (                    ): push ax                   ; 50  ;将0值压入堆栈中
00007c09: (                    ): pop es                    ; 07 ;使ES段值为0
00007c0a: (                    ): push ax                   ; 50 ;将0值压入堆栈中
00007c0b: (                    ): pop ds                    ; 1f  ;使DS段值为0
00007c0c: (                    ): cld                       ; fc       ;设定串操作方向标记
00007c0d: (                    ): mov si, 0x7c1b            ; be1b7c ;设置串操作源地址为DS:0x7c1b
00007c10: (                    ): mov di, 0x061b            ; bf1b06 ; ;设置串操作目标地址为ES:0x061b
00007c13: (                    ): push ax                   ; 50 ; ;将0值压入堆栈中,为后面的retf远返回准备段值
00007c14: (                    ): push di                   ; 57  ;压入DI,,为后面的retf远返回准备偏移入口
00007c15: (                    ): mov cx, 0x01e5            ; b9e501 ;设定串操作计数值
00007c18: (                    ): rep movsb byte ptr es:[di], byte ptr ds:[si] ; f3a4 ;这里进行数据搬移串操作
00007c1a: (                    ): retf                      ; cb  ;跳转到代码搬移后的地址0000:0x061b 执行代码

[ 本帖最后由 cxdzxc 于 2009-11-18 14:59 编辑 ]
启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    开心
    2011-11-21 23:55
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2009-11-18 21:31:23 | 显示全部楼层
    需要很详细的安装步骤才行

    暂时看不懂。
    启用邀请码注册,提高发帖质量,建设交流社区

    该用户从未签到

     楼主| 发表于 2009-11-19 09:38:13 | 显示全部楼层

    都没什么人看,哎,真没劲....

    都没什么人看,哎,真没劲....
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    无聊
    2016-11-18 14:47
  • 签到天数: 170 天

    [LV.7]常住居民III

    发表于 2009-11-19 11:52:40 | 显示全部楼层
    以为看不懂,太高深的东西,当时学汇编的时候就懵懵懂懂的
    启用邀请码注册,提高发帖质量,建设交流社区

    该用户从未签到

    发表于 2009-11-19 13:25:33 | 显示全部楼层
    先顶一下!





    Signature--------------------------------------------------------------------------------------------------------------------
    Nothing is impossible for a willing heart.
    ugg bailey button
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    奋斗
    2016-11-17 14:52
  • 签到天数: 108 天

    [LV.6]常住居民II

    发表于 2009-11-21 16:12:24 | 显示全部楼层
    楼主,放心,继续,我支持你~~
    启用邀请码注册,提高发帖质量,建设交流社区

    该用户从未签到

     楼主| 发表于 2009-11-21 18:44:20 | 显示全部楼层

    反汇编第1.1步

    0000061b: (                    ): mov bp, 0x07be            ; bdbe07 ;7BE处是MBR的数据区,是BOOTINDICATOR,准备读取07be处的引导区标志
    0000061e: (                    ): mov cl, 0x04              ; b104   ;可以在4个分区的任意一个分区启动,所以这里设定检测次数为4
    00000620: (                    ): cmp byte ptr ss:[bp], ch  ; 386e00 ;CH=00,SS:[BP]=XX的不确定值
    00000623: (                    ): jl .+0x0009               ; 7c09 ;如果SS:[BP]最高位为1则表示找到一个启动有效分区,并跳转到062e,查看其它分区还有没有重复的启
    动标记
    00000625: (                    ): jnz .+0x0013              ; 7513 ;如果标志不为0,并且最高位也无效,则跳转到063a执行错误提示
    00000627: (                    ): add bp, 0x0010            ; 83c510 ;检查下一个分区的引导标志
    0000062a: (                    ): loop .+0xfff4             ; e2f4 ;跳到0620处循环
    0000062c: (                    ): int 0x18                  ; cd18 ;没有启动分区则调用INT18H显示出错信息,如果CMOS中设置了其他启动媒体,则尝试从其它媒体启动

    0000062e: (                    ): mov si, bp                ; 8bf5 ;使SI也指向当前分区的引导标志记录位置
    00000630: (                    ): add si, 0x0010            ; 83c610 ;指向下一个分区的引导标志记录位置
    00000633: (                    ): dec cx                    ; 49 ;循环次数减1,当DEC的结果为0时,会置位TF标志寄存器的ZR标志,影响后面JZ指令的执行
    00000634: (                    ): jz .+0x0019               ; 7419 ;如果后面的3个分区都检测完成,则CX会被减到0,同时ZR标志被置有效,程序将跳转到064d执行
    00000636: (                    ): cmp byte ptr ds:[si], ch  ; 382c ;继续判断下一个分区的引导标志,这里0才是合法的标记,表示不存在第2个启动分区了
    00000638: (                    ): jz .+0xfff6               ; 74f6 ;如果标志为0则跳转到0630,表示暂未发现重复的启动标志,返回进行下一个判断循环

    [ 本帖最后由 cxdzxc 于 2009-11-22 09:15 编辑 ]
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    奋斗
    2022-10-31 21:02
  • 签到天数: 437 天

    [LV.9]以坛为家II

    发表于 2009-11-21 19:09:19 | 显示全部楼层
    哪里转的???这么面熟!!!PEDIY??
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表