【小小变形虫也要飞上云端】
参差多态实乃幸福本源 - 罗素
变形是一个'古老'的技术,可以让程序的每个拷贝都与众不同,主要由一些讨厌被分析的程序采用,比如躲避aver特征码扫码的病毒之类,但传统的变形有几个问题无法绕开:
1.程序本身需要携带变形引擎
2.每次基于变形后的程序再变形,程序会越变越大
如果我们把变形引擎和原始程序放到服务器上,每次获得副本都是基于原始程序进行变形后的程序,就避免了上述问题。
同时由于变形引擎在服务器端,随时可以对其变形模板进行升级和扩充(用户可以使用自定义变形模板规则,也可以进行共享)。
################################
【于是】
...有了一个提供混淆变形的在线服务,当前支持:
指令集: intel x86 (32 bits)
文件格式: 1. COFF (.obj) 注: 编译时不可用/GL
2. Binary (二进制代码)
内测 地址:http://unest.org/trial.php
################################
【使用方法】
以obj格式为例:
1:编译前,定义需要混淆的函数段(可多个)
#pragma code_seg(".code$unest_here")
void CHelloworldDlg::OnOK()
{
...
CDialog::OnOK();
}
#pragma code_seg ()
2:编译完成后将obj文件上传并混淆处理
3:将混淆 后的obj 下载,link 完成可执行文件
二进制格式:
二进制默认是全部进行混淆操作的,只需 在设置输入框处将目标段名从默认的unest_here 改为 unest_binary 即可,如下
默认:
==SectionConfig==
@name unest_here
...
修改为
==SectionConfig==
@name unest_binary
################################
【注1】:配置部分一般无须修改,如果混淆目标是一个共用全局内存(类似内存锁机制)的子线程(多线程)函数,可以增加一行 @protect thread_memory ,来保护内存读写
【注2】:如要处理代码与数据混合的段,可用 定义出 保护区域,下例:
偏移 代码
;保护开始
153: call @f
158: db 'MessageBox',0h
;保护结束
169: pop eax
设置输入框处增加:
==PreprocessConfig==
@protect_section 153 16 // 偏移153 ,长度 16字节 (10进制表示)
==/PreprocessConfig==
【建议】保护区域将保持原样,不做任何处理,我们应尽量避免这种情况的发生
如上例,可用堆栈做临时存储来避免 出现字符串,也可使混淆效果更好,如下:
push 0h
push 'oxA',0h
push 'ageB'
push 'Mess'
push esp
最后: 恢复堆栈
/////////////////////////////////////////////////////
懒得自己编译?
直接看效果
实时混淆生成的crackme : http://bbs.pediy.com/showthread.php?t=174591
有兴趣,有建议或进一步交流的朋友,欢迎加群吹水:24470013
祝各位七夕快乐!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)