剩下就是跟踪调用DOS 中断 INT 21H显示字符串这条线索 , 下面是详细的过程 。
用 DOS INT 21H 显示字符串的过程大概是这样:
把以$为结束符的字符串的地址放到寄存器DS:DX里 , 把寄存器AH设为09, 09是DOS INT 21H功能号 , 用于显示DS:DX存放的地址的内容 , 最后调用 INT 21H , 这样DOS就会在当前光标的位置显示这个字符串 。
因此 , 我们只需用debug把 README.EXE 加载到内存后搜索哪里有 MOV AH,09 和 INT 21H 这两条指令 , 这样就能比较容易找到输出字符串的地方 。
当然了 , 如果程序里大量使用INT 21H输出字符串 , 那就会搜索很多条结果出来 , 这时就要先搜索 “Please input password:” 和 “Invalied password!” 这两个字符串在内存里面的地址 , 然后搜出加载这些字符串地址到DS:DX的代码 , 这样可以缩小跟踪分析的范围 。
DOS 的 debug 的 s 命令可以用16进制或 ASC码 搜索内存 , 而我们不大可能记得 INT 21H 这条汇编指令对应的X86 CPU的机器指令 , 因此可以用 debug 的汇编功能先输入INT 21H , 然后反汇编看这条指令对应的机器指令 。
使用debug的汇编和反汇编命令
这里可以看到 INT 21H 对应的x86 CPU 机器指令用16进制表示是 CD21 , MOV AH,09 对应的机器指令是B409 。
有了这些准备 , 就可以开始用debug破解这个程序了 , 先用debug加载 README.EXE , 然后用 r 指令查看当前的寄存器 , 其中
CS=121F
IP=0100
这表示CS寄存器的内容是 121F IP 寄存器为0100 , 这表明 README.EXE 的代码段被加载到段地址为121F , 偏移地址为0100 这个地方 , 如果不清楚这里的意思的话 , 可以查资料去了解一下 intel x86 CPU 在16位实模式下内存寻址方式 。
在这里 , 只需要记得README.EXE的代码就在这个区域里面 , 先重点对这个区域搜索 。对于一些大型的DOS程序 , 程序和数据可能会分布在多个段里 , 这样就不能只搜索一个段了 。
分别输入搜指令
-s 121F:0100 FFFF B4 09-s121F:0100 FFFF CD 10
使用debug的搜功能
符合条件的地址会被列出来 , 根据搜索的结果可以看到 ,
在 121F:01B8 和 121F:01F3 这两个地方有机器码B409(MOV AH,09) , 而121F:01BD和121F:01F8有机器码 CD10(INT 21H) , 这两组地址(121F:01B8和121F:01BD , 121F:01F3和121F:01F8)靠得很近 , 这是很关键的线索 , 根据这个信息可以初步判断121F:01BD和121F:01F8这两个地方的代码调用了DOS 21H显示字符串 。
这时可以用 debug 的 u 命令反汇编代码看一下 。
用debug的反汇编和内存查看功能
-u 121F:01F3从反汇编的结果可以看到 , 这个确实是一段调用DOS 21H显示字符串的代码 , 要显示的字符串的段偏移地址是 0263 , 在显示完这字符串之后 , 就调用 INT 21的4C号(MOV AH , 4C 和 INT21H)功能退出了程序 。
没有看到操作DS寄存器的内容 , 这有可能是数据可以代码都在同一个段里(121F)
上图中用 debug d指令查看了121F:0263地址内容 , 看到了这块内存保存字符串“Invalied password!” 。
到这里 , 就开始有点接近目标了 , 这里就是校验密码失败后退出程序的地方 , 再往上一点代码 , 应该就是密码校验的地方 , 在被那就有可能找到密码存放的地方 。
这时就需要一点一点对121F:01F3(B409 MOV AH,09)前面的地址进行反汇编 , 由于intel x86 CPU的指令不是定长的 , 因此选定的反汇编起始地址不对可能会得到不正确的指令 。
用debug反汇编 121F:01CE处的代码
用 u 命令一直往前反汇编 , 在 121F:01CE 这个地方可以看到调用了DOS 21H的07号功能 , 这段代码是读取键盘输入的内容到寄存器AL , 然后将AL的内容和 0xF0 这16进制数进行XOR运算结果保存到AL , 最后把寄存器AL的内容保存到寄存器 SI 指向的内存地址 。
- 上海去西安高铁卧铺多少钱一张,上海到西安火车票最低价是多少
- vivo最新款千元机 vivo iqoo手机怎么样
- 免费又好用的清理软件使用方法 清理垃圾软件最好用的是哪一个
- 手机电视同屏最简单方法 手机怎么投屏电视上看电影
- 野生胡子鲶喜欢吃什么,钓鲶鱼用什么鱼钩最好 还有饵料 我要在野外钓
- 网络游戏属于什么五行,互联网到底五行属啥
- 走路是最好的长寿药,但这样走等于慢性自杀,你天天在做
- 癌症晚期应不应该继续治疗?肿瘤专家:不治疗就是最好的治疗!
- 北京到阜新高铁票价,阜新到北京多少钱路费火车车次最便宜的价格给一个
- 我来分享diskgenius找回分区的操作教程 我来分享积累的最佳句
