事件:
开发人员提供好开发的软件(如软件是下发的),需要适配读卡器,软件功能需要两种读卡器,需要两种卡种类型,硬件如:德卡,华旭等。本次遇到的解决问题发现,两个读卡器放自己硬件配饰的dll是可以独立读卡的,替换时发现他们共有一个ssse32.dll的文件。就是硬件读卡器的设备文件。
过程:
1、用dll to c(dll2c)反编译了ssse32.dll文件,发现文件的确不兼容的依据,某一ssse32.dll再次依赖下层的dll(非系统层的dll)。
2、利用eXeScope、deps等工具查看硬件提供的硬件文件的dll依赖顺序。靠经验查看
3、思路,如果有条件查看相关源代码,看看都可以调用哪个文件来执行ssse32.dll,本次无法借鉴源码。
4、由于设备医保读卡器,发现有个yibao.dll,医保都可以配送一个单机读卡软件。足各删除dll,形成文件的最少运行。
5、尝试了把医保读卡器文件放到下层目录(子目录),软件配合调用动态库路径,由于是PB开发,未果。
6、还尝试了使用查看工具PEiD、Die工具尝试是否有加壳,用ollydbg查看相关汇报执行。
思路:
1、在程序调用时更换ssse32.dll,无源码,执行力难,且有的环境开机就加载dll了;
2、反编译两个ssse32.dll,重新生成新的一个ssse32.dll,合并要求反编译技术、汇编开发等技术;
3、找到调用ssse32.dll的上层文件,把上层文件里面调用的ssse32.dll改名。
解决:
按照思路中的1、2难度高,可行性高的方法还是思路3。先找到exe和ssse32.dll中间的文件yibao.dll,再次反编译,看ollydbg汇报执行,细节不谈,未果。
何不用winhex直接查看,果然在yibao.dll 中找到ssse32.dll,修改成ssse33.dll,目录下把医保提供的ssse32.dll改成ssse33.dll复制到软件根目录。切记winhex修改文件数据不要加长,会影响结构。保持长度一样即可。故障技术上解决。