首页
社区
课程
招聘
[原创]有关花指令的一点小研究(一) (二)
发表于: 2007-11-17 21:44 16958

[原创]有关花指令的一点小研究(一) (二)

2007-11-17 21:44
16958

这两天在琢磨花指令的一些特性。由于刚开始接触加密不久,对那些已经广为流行的花指令不是很熟悉。
一般来说,网上教我们的花指令样式为:

	jz	@F
	jnz	@F
	db 0E8h
	@@:
.text:004010D8                 jz      short near ptr loc_4010DC+1
.text:004010D8
.text:004010DA                 jnz     short near ptr loc_4010DC+1
.text:004010DA
.text:004010DC
.text:004010DC loc_4010DC:                             ; CODE XREF: .text:004010D8j
.text:004010DC                                         ; .text:004010DAj
.text:004010DC                 call    near ptr 4050C649h
.text:004010E1                 add     al, ch
004010D8   . /74 03         je      short 004010DD
004010DA   . |75 01         jnz     short 004010DD
004010DC     |E8            db      E8
004010DD   > \68 B5104000   push    004010B5
		jz	$+6
		jnz	$+4
		db	0E8h
		db	041h
		jz	$+2
		jmp	$+7
		db	0e8h
		jnz	$-3
		db	0E8h
		db	041h

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (23)
雪    币: 58782
活跃值: (21961)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
2007-11-17 21:51
0
雪    币: 517
活跃值: (84)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
3
谢谢推荐的技术文档,很有帮助哩!
发现里面说的更简单的技术实现同样的效果。
        mov        eax,2
        cmp        eax,3
        je        junk
        mov        eax,offset @F
        jmp        eax
        junk:
        db        0e8h
        @@:
有几个问题是:
因为花指令需要用在多处,则标签的定义很麻烦。
还是有很明显的jmp让人起疑。会让人有心关注跳转位置。

我想,再把这个加到myjmp函数里.......
这样,把myjmp函数搞花后。call指令回跳一般不会让人生疑,嘿嘿。而且myjmp又不那么明显。
两种类型的花指令集合,嘿嘿,反汇编器更晕了........
而且也会让人脑迷惑的时间更长一点....
2007-11-17 22:32
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼主的体会对我很有帮助,收下慢慢研究.
2007-11-18 08:29
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我看到了 收获了 所以   我也要顶
2007-11-18 15:59
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
6
只要知道静态分析的局限在哪里,构造花指令是很容易的
2007-11-18 20:28
0
雪    币: 517
活跃值: (84)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
7
  在上篇文章里我用call花指令实现迷惑IDA与OD。相关代码如下:

myjmp	proc
	pop	eax
	add	eax,ecx
	push	eax
	ret
myjmp	endp
start:
		mov	ecx,offset @F- $ -10
		call	myjmp
		db	'花指令乱码'
	@@:;.........正常指令继续


  那么,我们是不是可以丰富一下这个花指令,使它的欺骗性更高呢?或者加入一些指令对付动态调试?
  [思路来源]:
  1、一般破解教程告诉我们,call指令后面如果紧接着test eax,eax&jz/jnz指令,那么建议在后面两条指令下断,可以得到一些关键提示。
  2、对于一般的动态调试断点,调试器会把原指令处代码改成int 3,执行到此处时中断再恢复原指令。
  嘿嘿,有没有想到什么?!我们也可以在我们花指令后加入test/jcc指令,以达到欺骗效果。骗得跟踪者在这两条指令下断。
  中断是下了,可以怎么也等不到中断。因为程序永远也不会执行到这里。相关实现很简单:

myjmp	proc
	pop	eax
	add	eax,ecx
	push	eax
	ret
myjmp	endp
start:
		mov	ecx,offset @F- $ -10
		call	myjmp
		test	eax,eax
		jz	$+10
		db	'花指令'
	@@:;.........正常指令继续

  而这时候我们会想,既然跟踪者很可能在后面两个指令下断,那我们能不能针对这个现象反击一下跟踪者哩?
  嘿嘿,太阴险的想法了:P,答案是:可以实现。只要在myjmp里加入检测后面两条指令数据是否为0xcc(即int 3),一旦检测到。我们操纵程序流程跑飞程序!
  具体实现如下:
myjmp	proc
	pop	edx
	xor	eax,eax
	mov	al,byte ptr [edx]	;这里开始检测后面两条指令是否为int 3
	cmp	al,0cch
	setz	al		;这里使用了Pentinum pro的条件设置指令集以使条件判断不影响流水线。所以注意测试时的CPU是否支持。一般来说都支持啦。
	shl	eax,8
	mov	al,byte ptr [edx+1]
	cmp	al,0cch
	setz	al
	shl	eax,8
	mov	al,byte ptr [edx+2]
	cmp	al,0cch
	setz	al
	shl	eax,8
	mov	al,byte ptr [edx+3]
	cmp	al,0cch
	setz	al
	test	eax,eax
	setnz	al
	add	edx,eax	;一旦被下断,eax必定不为0,这样,程序便会跑飞。
	add	edx,ecx
	push	edx
	ret
myjmp	endp
start:
		mov	ecx,offset @F- $ -10
		call	myjmp
		test	eax,eax
		jz	$+10
		db	'花指令垃圾'
	@@:;.........正常指令继续

  这里,请注意,加入垃圾数据后,最好自己反汇编或跟踪下,看看效果,有时候加入的垃圾数据正好结束,正常指令正好开始,还是会暴露后面的关键指令的。
  ------
  顺便提一下:其实如果仔细跟踪,破解花指令很简单,把垃圾数据都nop掉,再分析,正常指令便出来了。嘿嘿。但这需要:耐心++
  不敢藏私。赶紧拿出来分享。欢迎交流、拍砖。谢谢!
2007-11-21 20:04
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
8
会用IDA脚本的直接无视
2007-11-21 21:11
0
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
9
不会用澳~~~那个类C脚本太难用了
语言等级高不成低不就~~~要嘛用Basic或者python,lua这些
要嘛还不如就用OD的asm 脚本还实际点  弄个C来.除了把麻烦的地方全部继承下来
好用的地方一个也没有~~~Class没得用
std:: 没有办法调用~~~这种C不知道有啥用的说~

在加上用notepad.exe写脚本实在影响发挥的说。。。

希望多弄点IDA脚本的教程哦  
2007-11-21 23:57
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
10
貌似有python的

月中人翻译的某一篇文章有提过
2007-11-22 15:29
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
支持下吧 虽然看不懂
2007-11-22 15:40
0
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
12
有是有~问题是不是官方支持的~
而且你也知道IDA的通病~
插件不具有IDA版本兼容性.
2007-11-22 17:05
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
13
有python的。有大牛更新
2007-11-22 22:40
0
雪    币: 87
活跃值: (47)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
14
是啊,5.0的idc连add_bpt都没有,没有这个怎么动态调呢。
5.1的才有。
2007-11-23 12:01
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
学习中...看起来..很有意思!!!!
2007-11-24 15:17
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
初学,还是有些看不明白,但收获还是有的
2007-11-28 08:21
0
雪    币: 1925
活跃值: (906)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
17
学习哈~~~
2007-11-29 17:25
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
高招,…………!!!!
2007-11-29 23:22
0
雪    币: 197
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
还行,这样的话用OD下断,可能就很痛苦了
2007-12-11 18:58
0
雪    币: 197
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
如果我下硬件断点呢
2007-12-11 19:10
0
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
21
学习学习
2007-12-11 20:00
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
学习中!!!!!
2007-12-12 15:00
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
谢谢楼主,学习学习!
2008-1-16 13:55
0
雪    币: 243
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
24
myjmp:
pop edx ;返回地址
pop ecx ;参数@nByte
push esi
pushf
@@: mov esi,$
cld
rep lodsb
mov ecx,offset @B
sub esi,ecx
add edx,esi
popf
pop esi
push edx
ret

start:
db 6Ah
db offset @F- $ -6
call myjmp
db '花指令乱码'
@@:
invoke GetModuleHandle,NULL
mov hInstance,eax

pop  ecx  ;参数@nByte ->指的是'花指令乱码'的大小吗?LZ还没有push,怎么就pop呢
2008-1-16 19:25
0
游客
登录 | 注册 方可回帖
返回