Skip to content

IndexBuffer膨胀混淆技术

IndexBuffer膨胀混淆技术,指的是对于使用了分开drawindexed 具体数值的Mod,在IndexBuffer中塞入一些干扰数据,由于使用DrawIndexed可以精确控制具体从IB文件中使用哪些数字列表来进行Draw,所以可以用避开塞入的干扰数据,只绘制正确的数据,此时就达到了膨胀IB文件大小的效果,也改变了IB文件中的UniqueVertexCount(所有具有唯一值的数字索引的总和)的数量,使得自动化Mod逆向中的根据IndexBuffer的Total UniqueVertexCount和ResourceVBList进行匹配的时候无法按照这个数值进行精确匹配,达到干扰自动化Mod逆向的效果。

解决方案1:

  • 实际操作过程中,先把能够精确匹配的放到一个列表,然后把不能精确匹配的放到剩余的列表,后续的步骤只对剩余的列表进行操作。
  • 根据ini中绘制的DrawIndexed的范围,截取出Index Buffer文件中对应的数字列表,统计出一个最大值,统计出一个UniqueVertexCount的总和
  • 在所有可能的ResourceVBList中,先过滤掉最大值小于上面统计的最大值的ResourceVBList,
  • 再过滤掉这些ResourceVBList的顶点数小于UniqueVertexCount的总和的,此时剩余的所有满足条件的ResourceVBList都作为一个可能出现的Mod类型参与后续的文件输出步骤。

解决方案2:

  • 使用手动逆向脚本,精确指定IB文件和Buffer文件,可直接绕过顶点数匹配问题。

CategoryBuffer膨胀混淆技术

CategoryBuffer混淆技术指的是,由于在3Dmigoto的Buffer文件中,读取Buffer文件是按照Stride读取的,然后传递到Shader之后,Shader只会读取自己定义的那部分stride而不会读取额外的stride,这样在生成Mod时就可以加入长度混淆,使得Mod逆向时使用的数据类型和在游戏中提取原模型时使用的数据类型不一致,达到干扰Mod逆向的效果。

解决方案1:

  • 先提取游戏原模型,得到正确的数据类型,在此基础上新增加入了额外若干TEXCOORD.xy的数据类型,使得stride能够匹配,从而能够正常逆向。

解决方案2:

  • 使用手动逆向脚本,和上面一样手搓一个额外的数据类型来逆向。