#1.修改虚拟机vmx配置,后面附加上
debugStub.listen.guest32 = "TRUE"
debugStub.hideBreakpoints = "TRUE"
bios.bootDelay = "12000"
bios.bootDelay = “12000” 表示12s延时等待IDA远程连接调试,默认端口为8832.
#2.因为IDA默认反汇编是32位,而MBR是16位汇编代码,所以需要调整
#3.在mbr载入内存处0x7c00处下断点
#4.调用int 13 42号磁盘读取功能读取0x20个扇区到0x8000处执行
#5.既然读取到内存执行,可以先把32个扇区的内存,每个扇区占用512字,32个扇区也就是0x4000字,先dump下来分析逻辑,idc脚本如下:
static main(void)
{
auto fp,begin,end,dexbyte;
fp =fopen("F:\dump.so","wb");
begin=0x8000;
end=0xb000;
for(dexbyte=begin;dexbyte<end;dexbyte++)
fputc(Byte(dexbyte),fp);
}
#6.查看输入页面
#7.静态分析dump.so,为了兼容数据,调整offset并Alt+s设置16位反汇编,找到提示错误密匙的相关字符串和相关判断逻辑
#8.通过寻找关键的调用找到判断点