新样本
又是资源解密类型的样本,看看ida

哦?64位的样本,罕见。
根据提示,寻找加密内容

84是最大的,长度为6AB。
断一下loadResource,检查长度为6AB的资源读入。由于手比较快,没有记录下来。
ida跟随,得到程序包装的loadRes+resSize+malloc+memcpy一套组合拳

获取v5,然后断v5的内存。

读写命中,ida跟随。

这个子函数,有点像解密函数?
啊?就结束了?有点突然啊
不急着惊喜,先检查一下解密后输出的是啥,确定一下先

本来想着先跳到解密后的内容,再查看输出到哪里的,结果是原地输出。

最底下存在一些指针数据,但一起打包输出好了。
解密是原地输出的,直接把那块内存整段打出来就是
data.bin(1,792 字节)。它属于明文载荷,不放在这里,在仓库的加密容器里:h31-resource-restore。
懒得看了,直接丢ai,然后才发现这流程简单得很,根本不需要给ai分析,还可能因为ai泄露相关信息。
好消息:下载是正常的,101kb
坏消息:解密后不是一个pe文件,是一段shellcode,无法使用f5分析。

一个64位的程序居然下载了一个32位的shellcode(因为右边的代码执行到0009就会报错了,而且异常杂乱。)
然后左边的shellcode存在大量的数据,只有少量代码,可能还要接着解密。
解密相关
第一步解密密钥:A2875F380C85A4268928FBF8757C270C
第二步ps脚本密钥到shellcode的密钥是这个: $k_b64 = “wqxFlosWJ4+C/zJFPOuo+TsjUNtRJl+2Eqef7OP4kJ0=” $iv_b64 = “QC+ioLNFD72DhX8D9aA5fQ==”
回顾

此事在《9带脚本的安装包逆向》中亦有记载
解密的密钥从何处来
A2875F380C85A4268928FBF8757C270C

断头顶,找free
指针:0x14001E4BC->0x0000000002224940=str
断下指针malloc获得内存区域,断内存区域找到copy函数

往前一个堆栈寻找。
使用硬件断点直接深入到最底层寻找,返回到用户代码,找到目标循环。

重要函数:000000014000FB10,传入的参数是这样的:



也就是说,把这部分内容变成了,ascii大写。
因此还得查a1的来源。

找到关键函数sub_14000F68C
传入参数:
a1:0000000002311DA4->(如下图所示,多框选了两个,只到10)

a2:000000000014FDD8->0x40
a3:0x8

以及辅助函数sub_14000EE20如下:

或者改成:
调用了辅助函数sub_14000EE20,调用参数:
a1:0000000000B61DA4,1-ef-fe-1,上面图片有了不再赘述,没有任何修改。
a2:如图所示。

另外,a2其实就是a1+24,完整的截图是这样的:
