梦幻的彼岸 发表于 2022-10-20 17:52:15

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 就会跳转

运行

已可成功升级,绕过了电池检测

备注:安全考虑,若条件允许升级的时候还是满足条件的好,避免升级出现故障。
此篇文章到此结束,有缘再见









乐活 发表于 2022-10-20 20:22:04

厉害啊,看不太懂,多谢分享

wgz001 发表于 2022-10-21 08:39:45

666,求带

qian15 发表于 2022-10-21 08:40:01

分析很好,图文并茂,感谢分享,收藏学习

VIMIN 发表于 2022-10-21 08:42:19

学习了 感谢大佬

hnlysyj008 发表于 2022-10-21 09:30:02

图文并茂,感谢大佬分享,收藏学习{:lol:}

GentleQuan 发表于 2022-10-21 09:58:28

进来学习一下思路,感谢分享

黑色夜心情 发表于 2022-10-21 15:03:29

来眼熟 在那边 都看不到你了

chinasmu 发表于 2022-10-26 08:17:31

这也太牛了吧{:funk:}

m2m 发表于 2022-10-30 10:47:25

刷BIOS以前CIH时代可以狠活呀,不懂的拿电脑城去一百五刷一次。。
页: [1]
查看完整版本: Windows 下的逆向分析-实战1