代码保护软件VMProtect学习笔记——Handle块优化与壳模板初始化(三)

VMProtect是一种很可靠的工具,可以保护应用程序代码免受分析和破解,但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下,才能实现最好的效果。

【下载VMProtect最新试用版】

第四章:Handle块优化与壳模板初始化 

根据前面符合Jmp Handle满足条件的Number_1作为循环因子

代码保护软件VMProtect学习笔记——Handle块优化与壳模板初始化(三)

  1. 经过前面筛选Number_1=0XCC,一般HandleX与ESI_Matching_Array都是一一对应,大小都是0xCC
    代码保护软件VMProtect学习笔记——Handle块优化与壳模板初始化(三)
  2. 只是设置的基本的Mod信息跟VmpOpcode=0x23
  3. new出来的struct_VmFunctionAddr结构只是设置了助记符=0xB
  4. 强行扩充到0xFF大小,不足的new struc_SavePartDisasmFunData和struct_VmFunctionAddr结构,具体作用不明
将不符合条件的struc_SaveAllDisasmFunData和struc_SavePartDisasmFunData1从数组中删除

代码保护软件VMProtect学习笔记——Handle块优化与壳模板初始化(三)

  1. 专门找ESIResults[X] == 0的
  2. ESIResults[X]与v7->Esi_Addr[4 * X]一一对应
  3. 找到VmpOpcode值是:0~9、0xC则退出,符合条件的基本上是:Jmp VMDispatcher找到后把该数组元素删除
  4. 清零v7->Esi_Addr[4 * X] = 0
  5. 看了一圈基本上是把整个HandleX解析信息的都删除,jmp XXXX标志结束
  6. 未被删除的如下:
    代码保护软件VMProtect学习笔记——Handle块优化与壳模板初始化(三)

总结

  1. ESIResults[X]与v7->Esi_Addr[4 * X]一一对应
  2. ESIResults[X]==0,那么取对应的v7->Esi_Addr[4 * X]数组内容(struc_SaveAllDisasmFunData结构体)
  3. struc_SaveAllDisasmFunData与struc_SavePartDisasmFunData1数组里删除该HandleX信息
  4. 判断到jmp XXXX为结束点,也就是整个Handle解析的信息都清除掉
    代码保护软件VMProtect学习笔记——Handle块优化与壳模板初始化(三)
  5. ESIResults[X]==0就是不使用的了
随机数填充struct_VmpOpcodePY_80结构

代码保护软件VMProtect学习笔记——Handle块优化与壳模板初始化(三)

sub_49FB90函数分析:

代码保护软件VMProtect学习笔记——Handle块优化与壳模板初始化(三) 代码保护软件VMProtect学习笔记——Handle块优化与壳模板初始化(三)

sub_49F958函数分析:

代码保护软件VMProtect学习笔记——Handle块优化与壳模板初始化(三) 代码保护软件VMProtect学习笔记——Handle块优化与壳模板初始化(三)

  1. 通过随机数取word_4EE0D8数组的下标,符合条件的跳到赋值的地方
  2. 退出条件是:要Add添加几组元素由Constant(参数2)决定,外加一句RandInt(1),百分之50%几率再来一次
    代码保护软件VMProtect学习笔记——Handle块优化与壳模板初始化(三)
  3. 它们使用的结构如下:
    代码保护软件VMProtect学习笔记——Handle块优化与壳模板初始化(三)

总结

  1. 变形总结对照
    RandomWord_4EE0EC是对add al,bl的变形
    RandomWord_4EE0D8是对add bl,al的变形
    代码保护软件VMProtect学习笔记——Handle块优化与壳模板初始化(三)
  2. 填充这些数据到底怎么使用br>
  3. struc_47数据使用。我们发现执行完毕后一共有6组 代码保护软件VMProtect学习笔记——Handle块优化与壳模板初始化(三)
    • 第一组:
      struc_47->RandomWord_4EE0D8=0x29 ->inc
      struc_47->AddrRandomBuff=0x1
    • 第二组:
      struc_47->struc_47->RandomWord_4EE0D8=0x43 ->rol
      struc_47->struc_47->AddrRandomBuff=0x5
    • 第三组:
      struc_47->struc_47->RandomWord_4EE0D8=0x5C ->not
      struc_47->AddrRandomBuff=0x5
    • 第四组:
      struc_47->RandomWord_4EE0D8=0x34 ->sub
      struc_47->AddrRandomBuff=0xB0
    • 第五组:
      struc_47->struc_47->RandomWord_4EE0D8=0x5C ->not
      struc_47->AddrRandomBuff=0x0
    • 第六组:
      struc_47->RandomWord_4EE0D8=0x05 ->xor
      struc_47->struc_47->AddrRandomBuff=0x7A

    刚好对应以下6句,因为1、3、5是单操作数所以struc_47->AddrRandomBuff不使用 代码保护软件VMProtect学习笔记——Handle块优化与壳模板初始化(三)

  4. struct_VmpOpcodePY_80->RandomWord_4EE0EC使用
    • 第一种RandomWord_4EE0EC=0x4,注意看405069跟40507B这两句是add 代码保护软件VMProtect学习笔记——Handle块优化与壳模板初始化(三)
    • 第二种RandomWord_4EE0EC=0x34,注意看405069跟40507B这两句是sub 代码保护软件VMProtect学习笔记——Handle块优化与壳模板初始化(三)
    • 第三种RandomWord_4EE0EC=0x5,注意看405069跟40507B这两句是xor 代码保护软件VMProtect学习笔记——Handle块优化与壳模板初始化(三)

—  未完待续  —


VMProtect正版授权专享在线订购特享超低价格!还不赶紧加入你的订购清单/span>>>更多详情可点击咨询购买
标签:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年3月6日
下一篇 2020年3月6日

相关推荐

发表回复

登录后才能评论