高强度花指令--SEH

来源:互联网 发布:轿子知乎 编辑:程序博客网 时间:2024/05/17 01:35
反调试感觉作用很大,但是很难懂..所以教程都没有说...
FS寄存器指向当前活动线程的TEB结构(线程结构)
偏移  说明
000  指向SEH链指针
004  线程堆栈顶部
008  线程堆栈底部
00C  SubSystemTib
010  FiberData
014  ArbitraryUserPointer
018  FS段寄存器在内存中的镜像地址
020  进程PID
024  线程ID
02C  指向线程局部存储指针
030  PEB结构地址(进程结构)

034  上个错误号



1. 遇到特征码定位在jmp指令上面的 构造替换 push xxxxx ret。

举例: jmp xxxxx

构造替换 push xxxxx 
ret

2. 遇到特征码定位在call指令上的。 
举例: 
call xxxxx

构造替换: push @f 
jmp xxxxx 
@@: 
;@@的标号表示的是你jmp xxxx指令后面的内存地址。 @f也就是引用@@ 的标号,所以此时@f这里填写的就是jmp xxxxx指令后面的内存地址。。

3. 遇到特征码定位在ret上 
举例: ret 
构造替换: 
jmp dword ptr [esp]

4. 遇到特征码定位在test eax, eax je xxxx or eax, eax, je xxxxx cmp eax, 0 jexxxxxx 
举例: test eax, eax 
je xxxxxx 
构造替换: xchg eax, ecx 
jecxz xxxxx

5. 遇到特征码定位在 push [xxxxxx]上的。 
举例:push [xxxxx]

构造: 
在其之前通过 xchg [xxxxxx], ebx 
然后用寄存器传参: push ebx

最后在下面在通过xchg [xxxxxx], ebx 交换回来。

6. 数据段动态恢复和巧用算法加密结合起来。 
前提是对汇编大家一定要有所了解,例如一些人说金山杀的是配置信息上,你完全可以将其这些配置信息所处的地址的数据进行一层加密。或者你可以将其这些偏移所处的数据 通过xchg 交换。 
dll注意下 要进行重定位 
call $+5 ;机器码是 E8 00000000 00000000是相对地址 
@@: pop ebx 
sub ebx, @b

下面你就可以通过[ebx+你的偏移]来进行变址寻址了。。

test eax,eax
je xxxxxx
将test eax,eax nop掉,改je为jb
或将两句nop掉

test eax,eax
jnz xxxxxx
将两句nop掉

mov ebx,xxxxxx
mov ebp,eax
双mov可以上下调换

add     edx, dword ptr [ebp+6E]
imul esi, dword ptr [edi+ebx*2+44], 614D6C6C
imul ebp, dword ptr [esi], 0
00              00
00              00
00              00
考虑下移

and eax,80000007
改为:
or eax,7FFFFFF9
用C32asm改,80000007为-80000007,C32asm会自动变为80000007的负数7FFFFFF9

je 等于则跳 改成 jle 也是等于则跳
这是瑞星的新把戏

00436008 09C0 xor EAX,EAX
改为
00436008 09C0 OR EAX,EAX

004A19BD 6A 00 PUSH 0
改为
004A19BD 6A 01 PUSH 1

0049D775 /77 07 JA SHORT 021.0049D77E
改为
0049D775 /7F 07 JG SHORT 021.0049D77E

特征码定位出来用OD载入却显示无此地址的解决方法

dll:
也许你经常遇到特征码定位出来用OD载入却显示无此地址.
我们用灰鸽子VIP2006的GETKEY.DLL做演示.
假若特征码为
[特征] 000009DA_00000002 004015DA (OC导出的内存地址)

使用OC导出的地址到OD中却不能使用.这时用lordpe打开GETKEY.dll
00013000
00400000 上下相加得00413000
OD载入入口为00883000 > 55              PUSH EBP
把40换成87就是真正的特征码.008715DA

Dll实例(黑洞1.97 瑞星dll特征):
OK=1
CharactorTotal=3
Codz1=H_0000354C_0092414C
Codz2=H_0001A4B4_0093B0B4
Codz3=H_0003C958_0095D558

先用lord_PE打开,再用OD打开

文件入口:00042948    
            > -------> 00442948
镜像:00400000                   
                                    >----------->相减 00520000

内存入口                00962948


零区无法定位可执行文件数据的问题

1.c32asm来解决,静态反汇编改特征


2.加一0区段,跨区段jmp跳,然后再新区段保存"所有修改",再回到原特征码处jmp,保存

免杀关键是技巧,关键你对这些汇编指令掌握的程度,以及你对汇编程序的熟练度。。


接下来再说一下NOD32的高启 
《一个钉子和一个国家灭亡的故事》大家都知道
如果有那一个钉子,不丢那个马掌,不折那匹战马,不伤那位将军………… 
有太多不确定了,只要我们破坏了其中任何一个环节启发杀毒就会全线溃败。 
NOD32通过PE结构寻找特征代码 以导入表函数的修改为例 (这个简单,其实还有更复杂的上次那个木马就是12处关联,但是12处关联破坏一个就免杀了) 
首先他会从PE MZ那里开始计算PE HARD的位置 在从PE HARD处寻找数据段 计算数据段位置寻找指针的提示位置,然后通过指针的提示位置找到指针,通过指针找到导入表函数。 
启发杀毒理解比较困难但是修改还是很简单的,可以说比普通的特征码更容易。我们只要破坏他以上分析的任何一个环节他就会全线溃败。

以前的pcshare有一个超简单过NOD32的方法,那就是将子系统设置为未知,就直接过NOD32的高启发,因为NOD32默认的对未知PE文件不予检测报毒,而恰巧,我们的pcshare通过这样更改之后仍然可以运行,达到了免杀目的,就是这么简单


其实卡巴为我们提供了更多修改的机会 
因为他的特征是关联的,只要破坏他的关联就行了 
就好像 
1+2+3+4+5+6+7+8+9=45一样 
特征码是45.当然会有很多选择我们可以改"1"也可以改“2”还可以改“3”…… 
改掉一个他下面的关联就被破坏了,也就免杀了,

解决NOD32最简单的两个方法

1.把文件子系统设未未知
2.修改OriginalFirstThunk 日期时间标志 ForwarderThunk 以前都是00000000 把它改成FFFFFFFF 或者别的,就这样就可以过了输入表查杀虽然之后lordpe提示“错误的指针”,但是功能,上线都是没有损坏的

对于NOD32 pcshare特征码超多的问题

解释很简单 pcshare是一个典型的4代木马(也有人称为3代,看分代标准) 
很多代码很典型,适用于杀软研究广谱查杀。NOD32的启发更偏向于基因启发,但他没有独立的基因库,用病毒库代替了基因库,通过在病毒库里比对代码,确认病毒,看到我前面对基因启发的介绍,相信对NOD32病毒库小不难理解吧,很明显NOD32的开发者也意识到了这点,所以NOD32对启发可以报的病毒是不入库的。对于pcshare4处关键作为启发杀毒,剩下26个特征是辅助定位,4处关键修改后少量修改辅助定位就可以了。

关于OD修改字符串

例如pcshare有一个定位在“%S%S%S”上的...我们可以首先用C32把“%S%S%S”向前移一位,然后用OD载入,右键,超级字符串参考, 
查找ASCII,然后找到所有的“s%s%s”(一般是一个PUSH或者CALL指令,他调用的就是这个字符串的地址),由于我们向前移了一位,所以显示的应该是“s%s%s”,然后双击来一个个修改...双击后会发现,对应的语句会有一个地址,我们把它改掉,向前一位,如4AD05168就改成4AD05167,接着同样方法继续改其它有“s%s%s”的... 
这个方法通用字符串的修改...


另外还有一个容易忽略的问题,那就是文件版权

建议大家的木马都不要使用原来的图标和版权信息,可以加上微软,360的版权信息,有不少杀软会针对版权信息进行查杀(例:小红伞,遇到过几次,其余的不清楚)

360、卡巴免杀

怎么过360 卡巴 瑞星 金山 。。。 
360其实很好过 行为查杀 
只要把木马默认的文件名 服务名 (现在应该没人在使用win98了吧 或用注册表启动的木马了吧 如果有那么把注册表里的启动键值改了)修改掉 就OK了 
金山流氓查杀也是一样的

接着说 
瑞星 和 金山 其实 别看官方吹得很好 其实很垃圾 主动防御如同虚设 
这里据个例子 
黑洞1.96 吧 因为介绍卡巴的时候用到它 把服务端里面的 黑洞 藏鲸阁 等替换掉 (老陈,不是要砸你招牌 而是被逼的) 再把刚才说的 文件名 服务名 都换成其他的 那主动就过去了 
其实NS也行 把SYSNS.DLL 改名 把版权去掉(老熊莫怪哦)再定位出其他的特征码 修改掉(表面没过,以上是废话) 
那么 金山 瑞星 360 就过去了