经过和几位大佬的讨论某数vmp终于成了。

借用Nanda说的
检测流程极大改变了,虽然一些设计还是和原来相似,但是即使熟悉之前版本的逆向套路,也对本版本的逆向帮助不大。
Nanda文章链接https://mp.weixin.qq.com/s/i9PsUy29hb_MiLOnW4wvmQ
八位数组和四位动态数组不会讲的,佬们不用过于在意水文章
1、固定套路
和之前一样,同样是202-200
vm内部的代码最恶心的还是三目表达式吧
推荐学习菜老板的星球
处理下三目或者直接用哲哥
的AST框架进行简单还原
还原后的代码最起码好调试了。
call处下断点,注意下这几个值

2、VMP固定调试套路
1、打断点
2、找变量
3、向上追位置

1、声明全局变量mub_z
2、核心vmp逻辑在上图通过
[2];
进行慢速定位3、在vmp内
num_z+1
进行统计进入vmp次数4、确定变量,进行日志输出
日志两比较大,所以通过if判断来阶段性进行控制日志输出,不然电脑垃圾扛不住。
输出四个变量最后一个是控制数组的长度(上图
_$aZ._$gR
),我们用来确定第几次进入vmp(vmp无限套娃式,可以通过这个值简单知道它对的堆栈,很重要哦)
3、定位跟踪
通过hook cookie 可以定位到最短ck的生成位置。大概在 num_z
>1300+的位置
不上图了,咱讲道理。
这几步比较简单,可以知道数组是用过160位的数组生成的,他家传统,玩数组。
就这么一步一步的往上跟吧。没了
4、你猜是啥
经典的四位数组通过上几代的经验,大佬们还是可以根据经验猜的。往大胆了猜就行。
八位数组怎么玩,确实很难理顺,既然搞不定,那就搞定它。
控制[0,1,2,3,4,5,6,7]
变成[x,x,x,x,x,x,x,x]
的过程
需要从开始进入这个vmp流程的数组(上图_$aZ._$gR
)说起
[50,56,13,2,23,0,56,13,3,33,3,47,63,23,39,57,14,62,13,33,2,33,3,33,3,56,30,13,3,24,43,23,33,2,60,46,20,33,2,23,0,22,77,33,2,40,46,8,55,56,30,33,2,23,0,57,47,63,23,59,57,35,62,33,33,2,23,1,22,78,33,2,40,46,9,55,56,30,33,2,23,0,33,2,23,1,57,33,2,40,46,10,0,56,30,29,14,33,2,23,1,22,79,33,2,40,46,10,55,56,30,23,0,56,13,3,33,3,47,63,23,39,57,14,62,51,33,2,33,3,57,23,0,14,62,12,33,2,33,3,33,2,33,3,57,104,56,30,33,2,33,3,57,47,63,23,40,57,35,62,11,33,2,33,3,47,63,23,40,57,56,30,13,3,24,43,61,33,2,37]
他是固定的。他就是用来生成八位数组的过程
1、从这里去分析进入它下一步套娃的vmp的数组从哪里来
从哪里来到哪里去
,建议多搞几份样本进行分析,每次都有新发现
2、分析这些数组中的每一个值控制的逻辑是干嘛的
(如 37是结束当前vmp
,56是替换数组前两位的值
and so on
)
3、每次在每个vmp跳转的过程中,他们共享的变量是怎么进行传递的
提醒 全局搜[265]
断住 argument就是八位数组刚开始生成进行修成正果的时候。
网友评论