你是一名企业工程师,在供热期中,操作员发现工程系统管理员:flag的密码忘记了,请你通过工程文件找出系统管理员的密码。
- 题目附件: 组态工程密码破解
- flag: woshimimahahaha
确定工程文件
➜ 组态工程密码破解 file question_1530838530_8rgZirKl8O0wP0Hy.PCZ
question_1530838530_8rgZirKl8O0wP0Hy.PCZ: Zip archive data, at least v2.0 to extract
首先可以看到虽然后缀是一个PCZ,但是其实是一个压缩包,解压发现存在密码。但这种题目真的是让我们把这个压缩包里面解开然后去翻文件么?我觉得未必,因此去搜了一下PCZ这个东西是啥:发现这好像是一个叫“力控”组态软件的工程(说实在的搞了两三个月工控了我还是不知道组态是啥意思),找到了一个示例工程:DataServer_master.PCZ,下载之后观察压缩包的目录结构基本可以确定题目给的就是这玩意。
力控组态软件
于是去下力控组态软件,打开工程需要破解,免费的只能打开64点的工程(我也不知道这个点是啥),反正打开题目的工程就闪退,破解版才可以。网上能找到的主要版本是6.0和7.1,折腾了一下午才把这玩意打开,各种报错,最后用win7和力控7才把工程打开,软件与补丁如下:
反正是一顿瞎安才在win7下安好,具体怎么安的已经记不得了。打开软件界面选择“恢复”打开PCZ文件,然后选中gulu1工程点击“开发”,提示未授权,点击忽略,进入一个烧锅炉的工程如下:
翻了翻翻到个用户管理,发现里面有个flag用户:
所以估计flag就是flag用户的密码了
IDA动态调试获取密码
这里因为是一个密码输入框,所以可以修改,但是无法查看与复制,所以有两种思路:
- 新建一个用户与密码,挂上调试器后,搜索内存观察是否连续存放,如果是连续存放即可找flag用户,密码应该在其周围
- 直接在flag的原有密码上拼接一个特征字符串,直接搜索内存中这个特征字符串,密码就在这个字符串前面
经过测试,第一种方法不太稳定,一会能找到flag一会不能的,所以采取第二种方法:
首先找到目标进程draw.exe,然后用IDA的动态调试挂起:
IDA会将程序断在某处,点击运行,此时可以在flag的密码字段后续接上一个特征字符串,这里我拼接的是xuan:
然后在IDA中点击暂停按钮,选择工具栏中的search->sequence of bytes,内容填写:00 78 00 75 00 61 00 6e(因为是unicode字符串,搜索ascii无果)
搜到一条结果,如下:
debug233:0B9A3265 db 0
0B9A3240 13 00 00 00 01 00 00 00 77 00 6F 00 73 00 68 00 ........w.o.s.h.
0B9A3250 69 00 6D 00 69 00 6D 00 61 00 68 00 61 00 68 00 i.m.i.m.a.h.a.h.
0B9A3260 61 00 68 00 61 00 78 00 75 00 61 00 6E 00 00 00 a.h.a.x.u.a.n...
故flag为:woshimimahahaha
星号密码查看器
经过学长的提示,说有个星号密码查看器查看器,一步搞定,如图:
但是啥原理呢?