前提
- 重写只针对win和mac
- 手上有多份同版本IDA(目前确实有)
目前发现的需要重写的点
- 每个procs/目录下面的processor,在LPH导出符号后面都有一串binary:
- mac上相同位置处的内容是_ident_tag,内容为NO SUCH TAG,似乎就是IDA的身份证
- 链接顺序调整:针对于pc.dll、pc64.dll、ida.dll、ida64.dll、ida.exe、ida64.exe做了特殊处理
- hexrays中带有license信息:每个dll文件中自带license id、license name信息
- 文件时间戳
- (mac) build uuid
思路
- 观察:
- 导入表:需要换
- 代码段:天生自带可重定位的属性
- 问题:IDA把rdata段合到了text里面
- 代码段的分布:导入表结构和导入函数名 - 函数 - Unwind信息 - 字符串/常量数据表 - RTTI信息 - ExceptionDir
- win和mac上均有重定位表,因此text段中的所有指针均是已知的
- data段:未明
- 变量数据段:思考应如何变异
- 主思路:通过数据段进行对象文件分割
- 比对:忽略重定位的数据,则其他数据可进行对应
- 重写数据段:按照比对得到的边界进行随机顺序变换
- 重写代码段
- 实验:
- 数据段匹配: