经过该云网路验证客服容许的情况下,我们注册并购买了测试软件位,并将一个未免杀的exe可执行文件上传到了云端加密系统,接下来我对该验证的免费加密系统进行了简单的剖析。
0x00 文件剖析
加密类型
从该云端系统下载加密完毕后的程序后,发现文件的容积显著减小7倍左右。从官网的介绍上来看,虚拟引擎应当借鉴了VMP3.X,因为我的调试环境中,3.X以下的可以直接过滤掉。
代码保护比较PE信息
通过Exeinfo PE文件可以很清楚地看见该加密后程序的PE信息:
文件PE信息
区段信息
经过加密后,区段基本处于不可读阶段,所以我这儿还是决定选择了动态调试,希望还能通过运行查看是否还能揭秘和区段
0x01 猜想验证方法
由于该验证使用了,并且对于VM虚拟机和都有检查,这让我想起了曾经剖析过的一款倒闭的验证:
如果视频未能播放,点击这儿试试
当时这款验证也是使用了VMP,不过验证的地址是固定的,特征保持不变,并且在通常的验证上存在逻辑问题,可以在某处将直接置1,即可跳过无条件跳过验证,并且释放源文件。
我猜想这次验证所使用的方式也是大同小异,不过特点可能不会不同。
劣质剖析图
0x02 动态调试
配置好OD后,运行该验证,成功解码基址,并且得到了解码后文件的完整数据段,由此成功否认了我里面的推测,这种一键加验证的相当于就是套了个验证壳,只要过掉登入验证后,就不会有其他脉搏验证。
寻找验证CALL
对于这些自写验证壳的验证弹窗,通常不会调用,而是自写一个信息框提示窗口,常用bp指令为 或 ,通过在这两个地址下断点,在单步回到验证。
单步来到验证壳段后,尝试搜索Unicode和ASCII关键字符,结果如下:
中文字符
从这儿可以获知,该验证是由易语言(EasyLanguage)编写,并且使用VMP引擎变异虚拟加密。
在断点后,我们点击登录按键,成功断下,并且进行单步跟踪,并且在处断点跳转,最终跟踪到了验证部份:
验证部份
为了验证猜测正确,我们在该脑部断点,并且重新点击登录,结果成功断下,我们再度进行单步跟踪,查看解码后的数据结果。
单步跟踪后,可以发觉程序获取了本机的外网ip和网段:
在一个关键偏斜CALL,出现了延后,并且返回了登陆的明文状态码,可以很明晰地获知该CALL为验证登陆,寄存器和数据地址中也可以很明晰地看见返回的内容:
Json的相应相应内容
所以这儿又给出了一种方式:通过截取数据包,修改返回的JSON相应内容,达到登陆疗效
JSON内容
JSON参数判定状态
通过对内容的解析,程序获取到各个参数所对应的值,并且作出判定,判断寄存器是否为0,不为0则跳,为了通过验证我们自动置零或则该指令:
验证思路
这里通过判定寄存器是否为0可以看出,其实是对应的值,所以可以通过更改显存中code的值达到通过验证的目的,从而证明截包更改返回数据登陆的可行性。
0x03 验证成功
由于显存随机分配,所以难以定位到地址,该验证也仅为1.0版本,目前已将小建议发送给了验证的作者,希望还能对验证进行加固修补,下图为显存补丁后的情况: