我个人有个想法,是否可以直接在read current bios file的后面直接跳转到刷bios的位置?因为按照现在的修改,貌似的read current bios这步可以跳过去了,那么在oem check之前就实现跳转到开刷的步骤,不知道是否可行?不过我的od实在糟糕,看不懂那一段是开刷的代码。。
read current bios是有三处,三处我都修改过jmp,可以进入oem check,说明在read current bios这个步骤的验证是跳过了。。现在我卡在oem check这个上面,oemcheck只有一个位置,所以按照顺序代码执行的话,那么应该是在oem check后面有一个call 出发了验证。。。
但是我找了好像找不到与read current bios步骤中有同样的call 或者jz之类的地址。。。
另外,我OD看过winflash32.exe关于三次read current bios位置的跳转和oem check位置的跳转,他们跳转的地址都不相同,call的函数位置也不相同(read current bios的三个call位置是一样的,oem check的call是另外一个位置,我对od理解不深,只能理解为地址位置)。那么这与我的猜测又有出入,就是他们的检测处错误后,跳转到的位置是不一样,那么为什么提示的错误是一样的?有一种可能,他们各自调到检测错误的位置后,又分别归到一个最终的输出错误信息位置。。。
汇编语言真心看不到,如果是C或者vb的语句,可能就是if goto之类的,还好懂些。。
我现在的思路:
1)如果能确定哪一句是跳转到检测错误的代码?那么根据这个代码位置到对应的位置检查,
1.1:如果对应的位置没有任何其他代码操作,只是简单再次跳转到错误信息输出,那么继续跟踪到错误信息输出位置(该位置肯定是让程序结束exit),修改错误信息输出位置,让它call刷写bios的函数。
1.2:如果对应位置还有其他的代码功能,然后再调到错误信息输出位置,那么应该是在对应位置先调用刷写bios的函数,并且禁止其跳转到错误信息输出位置(如果是这种,那么最起码有两种,一种是read current bios出现的,一种是oem check 出现的,或者有四种,每种read current bios都有不同的跳转位置)
3)如果进入dos,它还会进行再次验证?这个验证的执行代码是来源哪个?
3.1、如果是来源修改过的winflash,那么我们如果windows下能验证,那么在dos下也一定能验证,就是要把三个read current bios全部修改,防止其中一个是在dos界面的验证功能。那么后续的刷写也应该是没有问题;
3.2、如果这个验证来源于现有主板或bios中的某个验证机制,那么这个就陷入了死循环,就无解了。因为你要跳过这个验证,要确保现有主板的bios没有验证功能,而需要主板跳过验证功能,那又需要修改过的bios,这又是我们正需要做的,所以如果是这种情况,那么就没有办法了。我上面帖子中所说的那段引用就是针对这个问题。