恢复AxGlyph损坏数据[零基础小白向;Procmon/WinHex基础应用]
本帖最后由 ThomasvH 于 2019-11-15 03:48 编辑0,前言:
这个真的是小白向的分析,仅涉及到一点点逆向的知识,完全在基础的地方打转,第一次发技术贴,请管理过审吧……。
为什么要写这个?说实话论坛上高技术的帖子不少,但是作为基础给小白看的文章很少,尤其是许多抽象的技术没有具体案例的支撑,会让新手难以下手,分析时没又动力和目的性,所以这个是真的真的小白向的,给各位完全在不会技术的地面上的各位提供的一个小小的帮助和启发。
用到的软件:
AxGlyph(要分析的东西)
Procmon
WinHex
1,事情起因
当某一次使用Axglyph的时候,保存文件至“收藏夹”,软件突然卡顿,无响应,于是手动终结进程。再一次打开软件后,发现收藏夹界面出现问题。
收藏夹无法打开,卡顿数十秒后,显示内存不足
我画了很多电路图在里面啊!这个不能就这样沉了!必须修复!
2,初步分析思路:
首先应该进行的是文件的总体分析第一步:使用Procmon检测,发现在打开收藏夹后疯狂访问用户数据中的SL.lis文件
(涂黑的是我自己用户名,之后也是)我的妈呀,这个文件大小厉害了……
第二步,找到相关目录下面的文件
观察1,文件大小异常,应当出现了损坏;
观察2,可以发现,上面的gxx就是Alglyph的收藏源文件。重命名为.agx,发现至少我的收藏有数据。至少源文件有了。
但是怎么能就这样终结了呢!按照名字和结构推测,SL.lis应当是收藏夹组织目录的文件,那么应该可以修复。
第三步:使用WinHex观察文件。
这种软件不可能加密数据(何苦呢),因此观察数据应当可以得出结论。
观察1,列表文件出现了大量重复字段,应该是在重新写列表的时候出现了失误进入了死循环。
观察2:发现其中有规律可循。
收藏内容中大概有这样的结构:
FF EF FF[收藏名称] 0A 00 [收藏名称对应文件名.gxx(根目录下面的名字)]
也就是说我重复收藏的字段去除了之后可以修复?
修复后,可以读取部分列表,但是打开的时候会出现这样的警告
看来是我想得太简单:应该是关键字段以外的数据(例如文件信息)和内容对不上,导致警告。为了修复这个警告,我必须要研究这个文件的具体结构。
3,数据结构分析与重编写
第零步:先回忆一下:之前使用软件的时候,收藏夹下面可以建立一级分类目录,分类目录下面就是各自的收藏项。也就是有一个二级结构,列表文件应当也遵循这个定义。
第一步:观察分析建立了一个新的收藏夹(旧的备份出来),然后再添加一个条目。将两次的SL.lis拿出来,观察变化。
发现会有如下的字段:
[分类目录定义]:FF EF FF [分类目录名称]
[收藏项定义]:FF EF FF [收藏名称] 0A 00 [收藏对应文件名.gxx(系统根目录下面的名字)]
排除掉这一部分,剩下的一些字段才是我们感兴趣的
02 00 0000 , 03 00 00 00(上图红色框选)该是小端书写的32位无符号数字。那么这些数字又有怎样的意义呢?
这个数字比较小,猜测应该是对应各数量统计,报错应该是统计数据和实际读取数据不一样,所以要修改这个项目。那么他们又会有怎样的结构关系呢?
在纸上扒拉了一会儿,思路清晰了起来:整个文件的数据结构是:
[分类目录数量]
[分类目录1定义1] [分类目录1收藏项数量] [收藏项1定义] [收藏项2定义]…
[分类目录2定义1] [分类目录2收藏项数量] [收藏项1定义] [收藏项2定义]…
………
给小白的备注:1,这个排版只为直观,文件中是连续的。
2,数字占32位,字符占16位,不要随便搞掉结尾的 00
至此分析到达了结尾,我们应该进行数据修复了。
第二步:修复
实际上分析就是主体了,修复只是照葫芦画瓢。
把损坏的文件重新统计一遍,发现有两个地方要改:
丢了一个目录,[分类目录数量]要减一,
最后一个分类目录只剩两个了(之后就是胡乱重复),前面[分类目录5收藏项数量]该改为02 00 00 00
收藏夹活过来了!(丢了一堆文件,还好源文件在,可以重新导入)
4,总结:
对于分析,
实际上这种分析全都是观察,只要用对工具(Procmon观察操作,WinHex观察文件结构)。算是一点逆向吧,非常基础。
对于软件开发者,
1,应当加入循环检测的强制中断,要不你一个文本文档居然给我写了五个G,太过分了。
2,这里加入回滚机制更好。在任何操作的时候记录(备份)流程,直到操作成功后再清空备份,如果软件因为意外或者逻辑失误而中断,在下一次打开软件的时候,检测到软件意外退出(检测方式可以参照Windows意外退出的检测方式),自动回滚到操作之前。
2019.11.14补充
因为文件再次损坏,已经发现了AxGlyph这个软件的问题根源,故障可以稳定复现。测试版本V1.60.
程序里面,将某一标签拖动到另一个标签上的左半部分,会将收藏标签移动到此标签前面,当将某一标签拖动到另一个标签上的右半部分,会将收藏标签移动到此标签后面。
当我们将一个相邻的标签希望向前面移动一位,但是错误地将其拖到前面一位标签的右半部分就会出现大量重复书写!
推测是用了递归的函数来交换顺序,但是出现了逻辑的故障。
已经反馈开发者。
同时也上传了文件包,SL.lis的几个副本,供练习观察,练习WinHex的使用能力。如果有Axglyph也可以自己尝试修改一下数据观察现象。
https://www.lanzouj.com/i7d79ri
SL.lis 随意建立的文件。
SL-副本.lis 上面那个文件添加了一个项,发生了变化的新文件。
SL-ERR.lis 一个会引发警告的文件,数据不正确。
2019.11.15补充
开发者反应速度快,在一个小时内就给出了回复,附上了修正后的安装包。在此需要给这个开发组点个赞。
吊死在网上 发表于 2019-12-5 20:06
的确,我看了一下,不到40块,应该支持一下的,不过据说只能安装一台电脑,不知是否真的?
确实是,这个软件的激活码绑定的是本机的各种硬件数值,换了电脑则则激活码会发生变化。因此一个激活码对应一个硬件。
我就买了,反正最近是不可能换电脑的了{:1_890:}
(偷偷说一句,实际上可能有那种你想要的版本不过那个需要你自己去看了) ThomasvH 发表于 2019-12-5 23:28
确实是,这个软件的激活码绑定的是本机的各种硬件数值,换了电脑则则激活码会发生变化。因此一个激活码对 ...
是呢,哎,算啦,其实也无所谓,一般用visio多,只不过visio这个软件太重了,不如这个轻,感觉比较方便 感谢楼主分享 太棒了,很好理解{:17_1073:} 过来学习 太有帮助了谢谢 谢谢分享。。
哈哈,为了拿回文件,楼主真是拼了。。 图片盗链了吧,都无法显示,上传本地吧。 前来学习一下这个,收藏备用吧。 谢谢版主 alexpang2018 发表于 2019-11-13 12:32
谢谢版主
哈哈,数据真的是无价的。毕竟是集合时间和心血的东西,是不想丢掉的