近期准备写个比较通用的脱壳机,其实现在很多具有一定通用性的脱壳机都是基于虚拟CPU的,跟虚拟机似的,个也不例外,但是由于它们仿真程度的不同,决定了它们解壳的能力,当然我是想把它做的解壳能力比较强,否则也没有必要写了......想在虚拟CPU上支持多线程,简单的多进程等特性,这样它的解壳能力应该是有点“猛”,不过,这都还处于假想阶段,深知要做成这个,技术门槛相当的高,超出了本人能力,不过还是抱着学习研究的态度,往下写吧,现在做人都讲究“无求”了......
基于虚拟CPU的解壳机效率肯定比较低,本人将尽量优化算法,使它能尽量的快......
程序特色:
1.纯C开发2.自己写了内存适配器,坚决避免内存内碎片,有效遏制内存外碎片3.充分利用程序局部性原理,仿真CPU具有cache功能4.数据结构一般采用哈希表,红黑树,比较高效快速5.为了高效脱壳,仿真CPU很多地方没有监听,导致有些脱壳方法比较笨,针对某壳特性,局部监听特定异常.
更新日志:
3月11号:由于某原因,搬家至回龙观龙博一区,放弃linux内核研究,启动脱壳机项目3月28日前:完成x86机器码的识别4月8号前:大致写了虚拟ring3x86cpu代码,没有测试,体力活,没有技术含量4月15日前:修正虚拟CPUbug,基本调至能解UPX壳了,马马虎虎写了个dump模块,目前一调用,程序死了4月23日前:花了两天时间,调试dump模块,对“菜壳”通用的dump模块横空出世,花了两天时间模拟了SEH异常处理链,开始支持异常处理(包括展开式SEH处理),优化了CPU指令解析系性能,核心部位全汇编实现5月2号前:具体细的也没有办法讲了,在调试壳的过程中,修正了不少bug,也为了脱一些壳,加入了不少新的特性,最重要的是修正了dump模块一些bug,新增IAT表备份等功能,一个对“菜壳”比较通用的dump模块产生,脱某壳时,发现程序执行过程中,切换堆栈到代码数据空间了,虚拟CPU刚设计的时候,为了效率,没有把堆栈内存空间统一到“进程”空间,这里也统一它们了,并改了堆栈边界判定脱petite的时候,利用堆栈代码执行技术,不过堆栈空间统一了,这个不是问题脱petite的时候,仿真了FS段的局部功能,不光是SEH了程序堆栈布局也再次调整了,有些壳利用系统load时压入的堆栈(程序启动代码压入的值,我们的PEload没有程序启动功能,故需仿真之)5月2号-3号:脱petitev2.x,这款壳有点捍,用了可读内存写异常,单步异常,EIP=0异常,虚拟机新增了对这些异常的捕获,另外,这款壳对IAT表的处理跟以前脱的壳不同,它自己分析的PE文件,这个不想模拟了,要模拟也简单,因此这款脱目前脱出来还不可运行...感慨万千,这款脱搞得我要摇摇欲坠了5月4号凌晨:脱了winkript1.0和pklite321.1,这两个壳很弱,没有什么说的5月4号白天:上午脱pepack0.99和pepack1.0,这款壳API调用采用jmp[x]方式,仿真了这个特性下午脱pcshrinker0.71,这款壳存在指令自修改现象,修正了指令自修改时,cache失效的一个bug,及时刷新cache指令集下午晚上脱wwpack321.2demo,这壳很弱,不过它用了SHLD指令,仿真CPU新增了对SHLD/SHRD指令的支持5月5号上午:昨天晚上发现脱upackv0.32时,PEload模块有重大bug,由于upackv0.32的PE头很乱,保存了很多信息......昨天晚上研究了windowsload过程,很有收获啊(http://bbs.pediy.com/showthread.php?t=43928)上午修正了这个bug,upackv0.32被脱,这个壳注重的是压缩效果,没有什么其它特点5月5号21:42前:脱下upackv0.36,这里还是继续研究PEload模块,节的对齐问题21:49脱下upackv0.37,这个壳跟upackv0.36一样21:53脱下upackv0.38,这个壳跟upackv0.36一样21:58脱下upackv0.39,这个壳跟upackv0.36一样22:01脱下upackv0.399,这个壳跟upackv0.36一样23:10脱下upackv0.23,修正CMPS,SCANS指令没有前缀却改写了ECX值的bug,脱法跟upackv0.32一样5月6号:1:36脱下rlpackBasicEditionv1.18,这个壳很简单,脱这个壳修正了dump新加节后,PE头大小非法,导致程序无法运行bug1:45脱下rlpackBasicEditionv1.111:49脱下rlpackBasicEditionv1.12,脱法跟rlpackBasicEditionv1.11一样1:54脱下rlpackBasicEditionv1.13,脱法跟rlpackBasicEditionv1.11一样1:57脱下rlpackBasicEditionv1.14,脱法跟rlpackBasicEditionv1.11一样2:00脱下rlpackBasicEditionv1.15,脱法跟rlpackBasicEditionv1.18一样2:03脱下rlpackBasicEditionv1.16,脱法跟rlpackBasicEditionv1.18一样2:42脱下rlpackBasicEditionv1.17,脱法跟rlpackBasicEditionv1.18一样16:16脱下exe32packv1.42,这款壳用了IsDebuggerPresent函数来检测是否被调试,并读取IsDebuggerPresent地址第一个字节来判定是否0xcc,即是否在IsDebuggerPresent上下断点了,这里粗略仿真了API地址空间,这个壳还破坏了PE头,这里引入了是否脱壳后采用原来PE头功能(这系列壳的低版本没有效验IsDebuggerPresent是否被下断点,应该也能搞定,苦于没有找到加壳工具,无法验证设想),并修正了ADD(0x00)指令的一处bug,load模块也引入了多个Dll对应一个FirstThunk的处理方法22:17脱下kbysv0.28,这款壳比较简单,不过它的VirtualFree通过retn来执行,这里仿真了这个属性在ret解析函数,不过,其实应该在每个指令执行后,都要有这样的处理,但处于效率,且目前只有kbys这么用,就只在retn中这么干了5月7号:1:15脱了aspack系列余下的所有壳,均秒杀之13:00脱了upx系列余下的壳,均秒杀之22:18脱了fsgv1.0v2.0,v2.0系统自动扫描到的IAT只是张函数地址表,各dll函数地址间没有0隔开,于是又写了个dump,这个dump实现了新建IAT,让人失望,call/jmp访问系统无问题,但是一些通过其它指令来访问系统的API没有办法工作了,貌似除了手工分析外,这个问题无法解决,唉,最后通过修改无效API地址为0,解决这个问题5月8号:脱了morphinev1.3v1.6,这两个壳,代码被解密出来,无法dump5月9号:脱了morphinev2.7,这个壳,由于TEB没有仿真,没有脱完,但是真实代码已经出来了,从偏移nSizeBase开始扫描即可,无法dump23:37脱了PECompact系列余下的壳,基本上秒杀5月13号:02:18脱了yoda'sprotectorv1.02,这是个加密壳,6次SEH异常(5次是int3,1次访问0地址异常),IsDebuggerPresent3次,反softice等调试器,枚举进程列表来检测父进程信息(检测父进程是否为EXPLORER.EXE),判定是否被调试,WaitForInputIdle来锁定输入设备,读取自身文件自效验等......21:00脱了yoda'sprotectorv1.03.2,这个壳比v1.02更加飙旱,BlockInput锁鼠标键盘,SetWindowLongA锁任务栏,解密用win解密API次日0:53脱了yoda'scryptv1.2v1.3,修正自修改模块的一处bug,能脱yp脱yc没难度5月14号:22:20脱了EXEStealthv2.75av2.76,这个壳跟yc一个模样22:54脱了EXEStealthv2.72v2.73v2.74,脱法跟v2.75a一样5月15号:00:25脱了bjfntv1.2,引入ESP定律脱壳,这壳没有特征好用,只能ESP定律了,无奈00:30脱了bjfntv1.3,脱法和bjfntv1.2一样(均存在导入表不对)20:43脱了HidePEv1.1,只是加了几条指令骗下PEID,HidePEv1.0脱法一样5月16号:00:40脱下jdpackv1.01,修正PEload模块的一处bug,修正反汇编模块结束虚拟地址导致的一个与自修改相关bug20:39脱了jdpackv2.0,对这个壳,只能说fk,对示例程序int3异常38万多次,OD无法调,估计这也是没有看到这个壳脱文的原因20:48脱了jdpackv2.13,这个壳脱法跟jdpackv1.01一样21:32脱了PEncryptv3.1,soeasy!5月17号:00:39脱了PEncryptv4.0,这个壳没有啥特征,不好判定什么脱完了啊20:03修正了脱PEncrypt4.0脱法,引入类似OEP识别技术来脱壳,并为popaf引入对单步异常的监听20:25脱了Stone'sPECryptv1.13,soeasy!5月18号:20:48脱了telockv0.425月19号:00:40前,加入反汇编模块专用内存,并设置上限,防止在执行某些程序的时候,内存过大问题14:16脱了telockv0.51,加入IAT预处理,针对telockv0.51加密IAT情况15:40脱了telockv0.6018:15脱了telockv0.70,引入整数除0异常捕获telockv0.80利用了自己分析kernel32.dll来导出函数,无法脱23:49脱下ezipv1.0,仿真了SetFilePointer函数,修正了neg指令在标志位影响上的bug5月20号00:49脱下hmimys-packerv1.0,soeasy!1:24脱下jdprotectv0.9b,soeasy!仿真lstrcmp16:44脱了lamecrypt,脱法跟ezip一样19:11脱了UPolyXv0.51,脱法基本跟UPX一样19:41脱StealthPE1.0121:01脱StealthPE2.222:57脱depack23:17脱涛涛压缩器(跟kbys一样)5月21号20:22脱了polyene0.0121:21脱了DragonArmour21:44脱EPProtectorv0.3,只是入口点混淆了下23:09脱BeRoEXEPacker00:01脱PackItBitch5月23号23:27脱了木马彩衣,这个只是个入口点篡改工具5月26号01:43优化反汇编模块完成17:57优化CPU寻址系统完成6月2号01:24完成了PEID的功能(壳的准确快速识别),并修正了upx,aspack的脱壳方法,使之向壳识别不精确度靠拢,即一种壳要尽量少的脱壳函数,这是因为壳识别到版本的不精确性决定的6月5号00:14当壳在脱壳过程中不动态导入IAT时,但壳用在脱壳中破坏函数名等信息,导致无法重建导入表,这里写了个在脱壳前全备份导入表的模块,这样bjfnt系列壳导入表就完全没有问题了6月6号00:10,写了petite1.3导入表的情况处理模块,这个壳在脱壳过程中没有动态导入函数,而且复制了IAT供解壳后程序用,写了针对这种情况的导入表重建模块6月9号17:25完成所有目前能脱壳的全自动化脱壳,从脱识别到调用对应函数脱壳,全自动化(这几天天气贼热,困)15:36脱了mkfpack,很简单的一个压缩壳6月11号21:41脱下anti007v2.5,仿真了加载系统dll功能,支持自己分析dll导出函数,这样一大批壳又可以被脱了21:40脱下anti007v2.6,LoadLibraryA("bqo.dll")敏感6月12号00:49脱下upackv3.5,仿真kernel32.dll基地自动发掘技术(通过EDX)22:14脱下yzpackv1.1,仿真了另一种kernel32.dll基址自动发掘技术(通过TEB),修正peload的函数导入bug22:57脱下yzpackv1.2,仿真了cmovcc系列指令23:20脱下yzpackv2.0beta,soeasy!23:47脱下spack_method1v1.1,soeasy!6月13号20:53脱下spack_method2v1.1,用了int2e来反调试21:19脱下spack_method1v1.2,spack_method2v1.221:22脱下spack_method1v1.21,spack_method2v1.2121:29脱下spackv1.023:02脱下仙剑1001,脱法跟yc1.2一样23:10脱下仙剑1000,脱法跟yc1.2一样23:19脱下仙剑看雪测试版,脱法跟yc1.2一样6月14号00:36脱下仙剑1003,脱法跟yc1.2一样,仿真_lopen,这个壳在开始的时候用pf=1来跳,写了jpe解析函数,估计以后出问题在这里,要仿真PF?22:03脱下xpal4(仙剑-旧的回忆4)23:46脱下仙剑-凄凉雪,MD,它居然对每个API效验了前8个字节是否被0xcc6月15号00:39脱下仙剑-望海潮,它用lockcmpxchg8beax来触发异常,这个指令是不能操作寄存器的22:25处理了petitev2.2导入表加密,加密了,这样这个壳脱后可以运行了,hoho6月16号01:27处理了petitev2.3,这个壳脱后可以运行了12:48脱下telockv0.8012:49脱下telockv0.85,性质跟telockv0.80一样15:07脱下telockv.90,性质跟telockv0.80一样,但是IAT加密方式已经不同了,加入对这个的处理代码6月17号00:55脱下telockv.92,仿真了用调试寄存器触发单步异常,MD,这个壳太强悍了11:35脱下telockv.95,性质跟telockv.92一样,但是IAT加密方式不同,很强悍啊,写了用虚拟机执行IAT加密函数发掘API代码11:49脱下telockv.96,性质跟telockv.95一样11:57脱下telockv.98,性质跟telockv.95一样17:34脱下telockv.99,性质跟telockv.95一样,不过先前版本CRC效验只从文件中读数据,这个壳还从load后程序中效验了,MD,导入模块时我把dll名称改成小写了,MD,导致CRC效验不过,调得我要摇摇欲坠了6月18号00:56脱下mslrh0.31,MD,到处都是rdtsc,还有oepstealcode,还原了被偷代码20:42脱下mslrh0.32,MD,脱到了抽OEP处,被抽代码比较复杂,没有还原,dump后程序可以运行20:55脱下[G!X]'sProtect(貌似mslrh0.2)6月19号23:47完成更严格的堆栈效验,完成编译器识别功能
Tags:脱壳.
小编点评:实现半透明的屏幕标尺工具,你可以用它来.
下载小编点评:webrobot是一款实用的网站多.
下载小编点评:深海迷航环境音效重叠修复补丁是一款修复类补.
下载小编点评:DNF中夏辅助绿色免费版是dnf最新给力辅助.
下载小编点评:百度指数喜刷刷:第一步:启动喜刷刷.
下载小编点评:WHOIS信息批量扫描工具是一款可以.
下载小编点评:虽然在winserver服务器版本上.
下载小编点评:铭美未注册域名批量快查软件是一款可以.
下载小编点评:爱站seo百度权重查询工具包是一款由爱站网推.
下载小编点评:飞速流量专家自动挂机版也叫网站排名优化辅助工具.
下载小编点评:快捷链接组合工具是将网址A与网址B.
下载小编点评:软件介绍字幕遮挡器(字幕遮挡工具)用于遮挡需.
下载小编点评:软件介绍轻松备份专家能够设定时间自.
下载漂亮侧边栏Thoosje Vista Sidebar V3.1.0下载
序列号输入专家精简版V1.0.0下载
安秉网盾U盘管理加密软件(安秉网盾U盘管理加密软件下载)V3.3下载
7-Max V1.0.0下载
盘符虚拟器V1.1下载
Discuz!X论坛帖子清理助手下载V1.0下载
万码无忧(密码管理软件)V2.0.1下载
NET PC V1.0.0下载
Nero DVD Speed下载V0.53B下载
File Renamer Ultra 2000 RC V1.0.0下载
File Renamer Turbo(批量重命名工具)V2.76下载
Abdio Free 3GP Player (Abdio Free 3GP Player下载)V6.6 Build 010809下载
流氓网址大全专杀V1.0.0下载