常见修改特征 码总结
- ^* L# m2 j6 x' e9 B
分类:- Z9 S, v4 A( M3 U
等价替换、通用跳转、指令顺序调换、NOP位移法、大小写替换、特征码十六进制加减1、NOP、填0、以及特殊常见指令的修改方法
|4 G% k7 u9 e" T1 D/ f& X4 A3 a
等价替换:(需要注意特别是在等价替换这些跳转的时候 往往会使某些功能无法正常使用.)
修改方法:JMP = JE JNE JNZ = JMP je改成jle ja/jle JB = JL ADD EAX,-1 = SUB EAX,1
SAL 逻辑左移 = SHL 算数左移 他们功能用法是一样的. 等一些等价的指令* S0 T+ U- r- L/ t! G4 R( Q @
适用范围:把特征码所对应的汇编 指令命令 中替换成类拟相同的指令/ ^% e# s/ P8 ^" i
通用跳转法:% M- e4 g9 ?+ @% /+ ~9 q p
修改方法:把特征码移到零区域(指代码 的空隙处),然后一个JMP又跳回来执行.$ n, z8 U B: g. n) E
(可以换成push xxxx retn)
适用范围:是通用的改法,强烈建议大家要掌握 这种改法.(但此方法也不是万能哦)9 `2 O) O& P! v( B1 U `
C3 V1 g. I) g: t4 C9 g3 P
, /: }4 q, D* r+ C: |1 n
指令上下调换法:(注意调换的时候 先分析是否会对寄存器上的某些值产生影响)$ F" ?$ }5 F9 b$ l6 v& w5 H }9 B
修改方法:把具有特征码的代码顺序互换一下.
适用范围:具有一定的局限性,代 码互换后要不能影响程序 的正常执行
修改字符串大小写法:% d4 Q- Z" K; ?: p0 y/ I! B
修改方法:把特征码所对应的内容是字符串的,只要把大小字互换一下就可以了.
适用范围:特征码所对应的内容必需是字 符串,否则不能成功.(注意:函数不能用这种方法)
9 d( o% L7 E7 C
直接修改特征码的十六进制法(特征码十六进制加减1、nop)9 J5 R9 G+ W, t& m$ D
修改方法:把特征码所对应的十六进制改成数字差1或差不多的十六进制、或者填充90(nop)或者填0( T& s: O& V. u
适用范围:一定要精确定位特征码所对应的十六进制,修改后一定要测试一下能否正常使用.
2 ~. ^; i9 G+ h& o
test eax, eax
很多程序都是用test eax, eax来做检测返回值是否为0,那么遇到test eax, eax 那么可以直接改or eax, eax 或者尝试改成 and eax, eax0 u, n- w8 M0 w" s, O8 m
xor eax, eax 异或后 eax为0
可以写成 mov eax, 0 mov直接传输 eax为0
( @4 H; ?3 `% ~3 X$ O& g
call改法; G: x& B! j% o4 w0 E' M+ w0 d
例子:call 11111111& Z ]5 r# S% r7 T2 H3 u5 `
改成 call 22222222 (22222222地址为0区域)
2222222 处 jmp 11111111% `* M( A" I$ |# l: V7 h
; j0 H2 [0 {8 x. t* B7 H; j$ k2 _
如果遇到特征码杀在jmp 0040000上,
' |5 _8 J/ s" q4 m- N
如果字节够支持的话可以改写成双跳转 1 J) U# o1 q2 c# c) p$ R; d+ V8 I. ]
7 Y+ i+ Y. B/ I6 ?4 U
je 0040000 jnz 0040000" z8 Q: J5 f' h/ p2 Z8 Q k! g
jb 0040000 jlb 0040000/ b# u' ^: g$ a( r7 z: h
或前面说的
push 0040000 K' Y: t5 Y: p4 O0 r0 X) j
retn4 e$ w3 X9 O: g9 }
. R* |# N$ F! Y x2 |
你完全可以这样来构造。 这样免杀效果比较好..但需要有一定的0区域支持
push ebx
push 0040000
pop ebx
jmp ebx
pop ebx& w y( y# p- R4 t# O4 }+ B- Z
包含法(当然这个要有一定 的空间 来写代码....)
1 Y W7 c) ~) Z7 B
将特征码所处的汇编指令包含在自己的子程序中。然后加上pushad和popad,pushad和poad里随你怎么玩,只要不破坏相应内存单元的数据就 可以,寄存器可以任意破坏。因为popad出栽的时候就有还原了.9 U7 l0 v) S, X
! C+ m9 {! ~! f- A+ H5 }( H: Z
pushad
popad# p- M, k$ m& Z% w9 a5 C
特征码
ret
8 q0 Q5 i- |3 W0 ]
填补法(我瞎取的 嘿嘿 我自己非常喜欢的一种方法 今天透露给大家了 在改壳免杀我已经说过此方法了)8 l6 Q6 /3 o) X& i
这个是在学破解 手动写patch 经常要用到的.来改数据的.
' U$ F( S% r3 N2 [1 E
比如 特征码位置 004CD4D2 47 就是004CD4D2 的位置他的字节是47 我们直接填充.
. M! D0 n0 |' k; ^1 Q8 d+ L
在004CD4D2 代码执行之前我们必须把他恢复 加上这样一句话
mov byte ptr ds:[004CD4D2],47
4 h; o; P9 d1 f
多字节就采用这样的形式 mov dword ptr ds:[004CD4D2],4748 大家自己慢慢研究吧
3 Z& H: T; v P3 H" X" b0 l$ C
总结一句:方法是死的 思路转变 懂得在实战中举一反三
常见修改特征码个人总结(原著:风尘)
最新推荐文章于 2024-10-25 15:59:54 发布