近期有幸接识了一个国外的某办公软件app,文档是hwp格式,类似于word,也能用密码加密文档,对其加密作了初步探索,分享重在解密心得过程,不在于取得推算密码。
初看之下发现是一个典型的C++代码,应该是windows代码移置到移动app中的,虚函数比较多,因此流程的查看比较麻烦,先是动态调试,有一定的反调试功能,但都比较弱,很容易解决,后面跟踪发觉这个office文档中元素种类很多,读写文件操作也都封装在VTable中,跟踪有点让人眼花。通过断点fopen找到了hwp文件打开的位置:
0036C68C:openHwp()
可以看出,初始就构造了3个C++对象。
继续下去,跟踪了一下其文件结构,大致结构是一个Head,然后后面有多个body,每个body的偏移计算都不一样,有的偏移计算要好几个偏移寻址才能得到真实的偏移,看来如果要完整理清其格式真是一个体力活。同时可以看出多数body都没有使用加密,偿试从此开始跟踪查看加密数据块,但2天后没有结果,其偏移计算太多且各种的不一样。幸好我目标不在文件结构,这种解决方式退出。
第一条路比较麻烦,随之开始主要转静态逆向看看,想看看路径上的C++对象有多少,便开始一个一个的还原C