环境信息
系统信息:Windows 10 、Thankpad T430I
涉及工具:x64dbg
测试程序:g1uj49us.exe(Thankpad T430I Bios update)
安装后释放的文件,默认安装驱动的程序是WINUPTP.exe
因
最近入手了一款Thankpad T430I 笔记本,想升级到最新的Bios(2019)但因电池原因(显示255%,软件获取不到电池信息),官方的升级程序检测不到电池导致无法升级。
果
网上搜索文章有说运行的时候加入 -sp参数可跳过电池检测,但测试发现此方法不适合g1uj49us,还有说通过winflash64 BIOS文件直接升级,开始的文章未涉及BIOS文件格式,理解错误导致测试失败
我执行了如下命令:
| 1 | WinFlash64 ``/64bit/tpnflhlp``.sys
|
| --- | --------------------------------------- |
很显然运行失败了。
继续搜索相关文章,在这篇文章下得到了思路:
https://superuser.com/questions/1569417/how-to-update-lenovo-bios-on-a-t460-without-battery
On Lenovo ThinkPad X230i was enough to copy BIOS (.FL1) and ECP (.FL2) files to parent folder, where WinFlash64.exe is located then run cmd.exe as administrator and enter command:
cd \
WinFlash64.exe /file \$01D3000.FL1
注意到,当执行WINUPTP.exe 选择Update ThinkPad BIOS
点击Next后会在当前目录释放些文件
看到了升级需要的文件
| 1 | \$01D2000.FL1
|
| --- | ----------------- |
升级成功后的截图
逆向分析
测试结果说明,无电池也可升级成功(也没有BIOS电池),故想运行升级程序绕过这个检测
关键信息:
程序会将检测结果以弹窗的形式返回
弹窗后点击暂停
在栈找关键信息,鼠标滚轮下滑
// call调用函数的时候会将地址压入栈中,接着跳转到相关的地址,故可根据栈地址找相关的函数调用
看到了一些显示,继续寻找这个弹窗来自那里
| 1 | 00EFE454 003EC655 ``return
to winuptp.003EC655 from ???
|
| --- | ---------------------------------------------------------------------- |
双击进入
上方call下断点
重新运行测试
运行后,弹窗
重新运行,看到有个判断执行此地址
让跳转不成立,程序异常退出
栈分析看到有几个返回,依次进入查看
0055E57C 007ED0AA return to winuptp.007ED0AA from winuptp.007EC60F
0055E598 007E30E9 return to winuptp.007E30E9 from winuptp.007ED07B
看到了OK字样
继续寻找看到了这串字符串:"AC adapter/Battery check...."
在入口点下断点(push ebp 常为函数入口点)
断下
正常,跳转执行(ZF = 1)
修改ZF值,使其不执行(ZF = 0)
// je/jz根据CMP比较结果进行跳转,若ZF=1 就会跳转
运行
已可成功升级,绕过了电池检测
备注:安全考虑,若条件允许升级的时候还是满足条件的好,避免升级出现故障。
此篇文章到此结束,有缘再见
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论