Windows 下的逆向分析-实战1
环境信息系统信息:Windows 10 、Thankpad T430I
涉及工具:x64dbg
测试程序:g1uj49us.exe(Thankpad T430I Bios update)
安装后释放的文件,默认安装驱动的程序是WINUPTP.exe
因
最近入手了一款Thankpad T430I 笔记本,想升级到最新的Bios(2019)但因电池原因(显示255%,软件获取不到电池信息),官方的升级程序检测不到电池导致无法升级。
果
网上搜索文章有说运行的时候加入 -sp参数可跳过电池检测,但测试发现此方法不适合g1uj49us,还有说通过winflash64 BIOS文件直接升级,开始的文章未涉及BIOS文件格式,理解错误导致测试失败
我执行了如下命令:
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 <path/to/WinFlash64.exe>
> WinFlash64.exe /file $01D3000.FL1
注意到,当执行WINUPTP.exe 选择Update ThinkPad BIOS
点击Next后会在当前目录释放些文件
看到了升级需要的文件
$01D2000.FL1
升级成功后的截图
逆向分析
测试结果说明,无电池也可升级成功(也没有BIOS电池),故想运行升级程序绕过这个检测
关键信息:
程序会将检测结果以弹窗的形式返回
弹窗后点击暂停
在栈找关键信息,鼠标滚轮下滑
// call调用函数的时候会将地址压入栈中,接着跳转到相关的地址,故可根据栈地址找相关的函数调用
看到了一些显示,继续寻找这个弹窗来自那里
00EFE454003EC655return to winuptp.003EC655 from ???
双击进入
上方call下断点
重新运行测试
运行后,弹窗
重新运行,看到有个判断执行此地址
让跳转不成立,程序异常退出
栈分析看到有几个返回,依次进入查看
0055E57C007ED0AAreturn to winuptp.007ED0AA from winuptp.007EC60F
0055E598007E30E9return to winuptp.007E30E9 from winuptp.007ED07B
看到了OK字样
继续寻找看到了这串字符串:"AC adapter/Battery check...."
在入口点下断点(push ebp常为函数入口点)
断下
正常,跳转执行(ZF = 1)
修改ZF值,使其不执行(ZF = 0)
// je/jz根据CMP比较结果进行跳转,若ZF=1 就会跳转
运行
已可成功升级,绕过了电池检测
备注:安全考虑,若条件允许升级的时候还是满足条件的好,避免升级出现故障。
此篇文章到此结束,有缘再见
厉害啊,看不太懂,多谢分享 666,求带 分析很好,图文并茂,感谢分享,收藏学习 学习了 感谢大佬 图文并茂,感谢大佬分享,收藏学习{:lol:} 进来学习一下思路,感谢分享 来眼熟 在那边 都看不到你了 这也太牛了吧{:funk:} 刷BIOS以前CIH时代可以狠活呀,不懂的拿电脑城去一百五刷一次。。
页:
[1]