虽然已经是一两年前就已经烂大街的技术了,不过我还是随便提一下吧。
前几个月遇到了某公司的聚安全SDK,这个安全套件核心的so本身实际上是一个zip,解压后里面才是真实的so。
使用IDA打开直接提示The SHT entry size is invalid.
我使用010 editor的ELF模版直接做了解析,发现ELF Header好像是错的。
对shnum字段修改为0即可完成简单的修复。
e_shstrndx = e_shnum -1
e_shnum = (file_size – e_shoff) / sizeof(Elf32_Shdr) //Elf32_Shdr的定义是40
实际上linker并不关心shnum是多少,包括section节,根本就没被加载到内存中
现在除了使用vm技术的so,其他的办法好像对付dump都没什么用。
在linker的.init和.init_array处下断点,在这个地方把整个so dump下来,在修复一下elf的header,这个so基本上就展开了。
然而很不幸,这家sdk就是vm技术的,也可能是用AliLLVM混淆过的,看了只感觉辣眼睛。
像我这种懒人,如果实在懒得修导出表,直接双开对比就知道函数名是什么了。