首页
社区
课程
招聘
[2005.2月话题]如何隐藏跳转指令
发表于: 2005-2-1 09:17 31977

[2005.2月话题]如何隐藏跳转指令

2005-2-1 09:17
31977
收藏
免费 0
支持
分享
最新回复 (53)
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
26
那自然阿。否则怎么了得  
2005-2-2 18:16
0
雪    币: 392
活跃值: (909)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
27
最初由 nbw 发布


没看过兄弟的文章。不过算法才是正道。耍手腕是早晚要挂的。

既然说跳转,顺便介绍一个老罗站点上的4字节跳转:
........

记得tElock里面有这样的例子:
一个jXX $+1
跟一个dec ecx
具体记不清了,就是这种巧妙的构造
2005-2-2 20:52
0
雪    币: 97697
活跃值: (200759)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
28
我不懂我支持
2005-2-2 20:59
0
雪    币: 159
活跃值: (339)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
29
最初由 cyclotron 发布

记得tElock里面有这样的例子:
一个jXX $+1
跟一个dec ecx
具体记不清了,就是这种巧妙的构造

在tElock里面那个指令是
jMP $+1
leave
代码是 E9 FF C9
所以等效于FFC9 dec ecx ;个人认为是一个挺漂亮的小花

to nbw:我去找找,不过目前我仍认为如果真的要实现像你所说的那样,就是要$+3
2005-2-2 22:43
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
迷宫+每个房间都设置计算+反单步+反跟踪
2005-2-3 10:59
0
雪    币: 279
活跃值: (375)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
31
大家讨论得很热闹啊,来凑个数。

对于要隐藏跳转,如果用虚拟机实现,可能初期效果好,但如果出现反编译器,就可以得到原码级的代码,如flash的脚本反编译等,所以得经常更新虚拟机的指令集,这样不利于维护。
对于一些小技巧的东西,实用性不大,只要公开一些对付手法,也没有什么价值。

那些才是原则性的东西呢?
我想最好的方法就是结合cracker人自身弱点这方面考虑,
比如,一般人看到过多烦杂的代码都会烦,可以设想构造一个类似混乱器的代码生成器,对于关健代码进行混乱处理,原先是20行的代码,把它扩展成10万行代码以上(这是基于目前微机大内存、高速而使用)
另一个方法,估计是以后的主流,主要是与网络结合,比如电话激活的方式,对于关健代码,关健跳转,可以用空代码代替,需要时再从网络数据库下载,而程序的更新代码也是通过网络数据库的方式提供,到时crack时,面对的不是单机程序,而是类似IE这样的一个装载器了。
2005-2-4 13:44
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
32
opcode的研究意义不大,重叠起来充其量能对抗w32dasm
ida可以d了然后在旁边写上,od就不必会说了。
2005-2-4 14:21
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
SMC可行吗?
2005-2-5 09:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
34
最初由 RoBa 发布


只是巧合,实际编程中很难有碰巧一句代码可以从中间拆成另一句的。


当然不是巧合了。

举一个例子:
test eax,12345678h
该指令除了修改标志,没什么副作用,你差不多可以插入你的程序任何地方。
然后你的jmp可以跳到它的中间去。至于跳过去后,执行什么,你自己随便决定吧。只要在操作数的区域内即可。

花指令的技巧最早甚至被用来节省指令码,而不是目前一般的加密应用:)
2005-2-6 00:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
35
最初由 lordor 发布
大家讨论得很热闹啊,来凑个数。

对于要隐藏跳转,如果用虚拟机实现,可能初期效果好,但如果出现反编译器,就可以得到原码级的代码,如flash的脚本反编译等,所以得经常更新虚拟机的指令集,这样不利于维护。
对于一些小技巧的东西,实用性不大,只要公开一些对付手法,也没有什么价值。

........


我以前想过,其实编译器做加密工作是最合适不过。

可以增加选项,让编译器自动压缩代码、防跟踪、乱跳、迷宫等。
目前的编译目标都很工整的一块一块。如果把程序切歌城很细的小块。然后使用简单或复杂的jump连接起来,功能不变但是很难阅读,他甚至从一个函数跳到另一个函数中间走一段,然后又到其他函数走一段,然后回来。但逻辑上这些函数可以一点关系也没有。
2005-2-6 00:52
0
雪    币: 198
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
36
支持!!!!!!!!!!!!!!!
2005-2-6 20:35
0
雪    币: 255
活跃值: (266)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
37
来个水贴个人觉得:
如果是壳作者和安全爱好者可以去研究这些代码变形等等的技术
对于一般的软件作者,更重要的是写好自己的软件功能。
用别人写好的加密产品,术业有专攻。
精力太分散,软件肯定.....................
我不懂技术.....请高手指正
2005-2-6 21:56
0
雪    币: 135
活跃值: (226)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
38
也许可以把跳转的地址和算法结合起来
比如F(x,y,z)=常数,构造成G(x,y,z)-A=跳转地址
结合SEH跳转出错产生异常就注册失败

不过好象和加密代码段也是一样的,只是这里数据决定了流程
也许可以用STL写个有限状态机,和算法结合,每个状态做一些解密来计算出进入下一个状态的跳转地址,然后每个状态都做点和程序功能有关的事。也许这样可以设计出一个机制使静态分析很困难

以上纯粹是菜鸟胡猜,别当真。。。。
2005-2-6 22:23
0
雪    币: 519
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
39
最初由 freeeman 发布


我以前想过,其实编译器做加密工作是最合适不过。

可以增加选项,让编译器自动压缩代码、防跟踪、乱跳、迷宫等。
........


随着高级语言的发展,我看乱跳、迷宫这个早晚会自然形成现在的VB已经很有这个意思了,简单的几句能拉成老长老长。
2005-2-7 00:59
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
40
最初由 RoBa 发布


随着高级语言的发展,我看乱跳、迷宫这个早晚会自然形成现在的VB已经很有这个意思了,简单的几句能拉成老长老长。


我希望的不是“简单的几句能拉成老长老长”,而是扰乱执行路线,多用高级技巧,但尽量不降低效率。
不清楚VB的情况,但我见过很多编译的汇编代码,编译的效率实在让我难受,经常是太多的垃圾语句。每次有跟踪代码就恨不得自己马上写一个编译程序:)

跳转多了效率也会下降,但只要不是瓶颈之处,就问题不大。

因为编译器做压缩、加壳、加密、反跟踪,能够起到最佳的效果。
1)只有编译器是最清楚代码运行的 CPU和操作系统环境的“人”,可以尽情发挥平台相关的技巧。
2)每个人都伤脑筋去加密,不如一家做好,大家共享。
3)加壳只能是附加在原来代码之外。编译器可以深入到代码的骨髓里,它可以决定每一个指令变成什么。
2005-2-7 12:57
0
雪    币: 243
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
41
方向有点变了。
不管是多级跳转,还是加强算法强度,还是将指令转意意义都
不大。

2005-2-8 10:18
0
雪    币: 257
活跃值: (56)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
42
花指令
2005-2-13 21:15
0
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
43
我对混乱代码生成器比较有兴趣

可是,这种方法存在一个问题,
即使我们把真正跳转隐藏在数万行代码海里,只要破解者有一个正确序号,便可以追踪出真正跳转位置
2005-2-13 21:48
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
44
最初由 WiNrOOt 发布
来个水贴个人觉得:
如果是壳作者和安全爱好者可以去研究这些代码变形等等的技术
对于一般的软件作者,更重要的是写好自己的软件功能。
用别人写好的加密产品,术业有专攻。
精力太分散,软件肯定.....................
........


术业有专攻

同意这个观点
到处搞变形干脆自己搞个加密器
2005-2-13 21:55
0
雪    币: 288
活跃值: (415)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
45
最初由 xIkUg 发布
构建跳转表
jmp xxx1
jmp xxx2
jmp xxx3
jmp xxx4
........

嗯,个人觉得是个不错的方法,
但是实现好像有点难度(编写程序的时候),
想想一个长长的跳转表看起来也够烦的
突然有个想法:跳转表可否动态生成呢?需要的时候才生成地址跳过去
这样的话静态DASM就好像没门了
2005-2-14 21:55
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
46
一个简单的流程记录器,全部KO这些所有的想法。
2005-2-15 13:41
0
雪    币: 260
活跃值: (162)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
47
有精力的话可以做个下面的过程试试
1、保护环境
2、计算();//将真正的结果保存在某个内存单元里面或者寄存器
3、恢复环境
4、有2种可能的分支处理,在第2步运算种决定
---a、jmp [esp-???]  // ???的内容是第2个步骤动态修改的
---b、jmp register   // 何种寄存器是第2个步骤动态修改的
2005-2-16 14:00
0
雪    币: 265
活跃值: (430)
能力值: ( LV9,RANK:370 )
在线值:
发帖
回帖
粉丝
48
最初由 kanxue 发布

3、利用消息机制来传递各类信息(如SendMessage等)。
........


用消息机制在万能五笔6.41版中已经实现了。它用的是POSTQUITMESSAGE,
比如:

00423804   |.  53                   push ebx
00423805   |.  FFD7                 call edi               ;USER32!POSTQUITMESSAGE,发送退出消息,准备走人了
00423807   |>  56                   push esi                                      ; /hObject
00423808   |.  FF15 FC014500        call dword ptr ds:[<&KERNEL32.CloseHandle>]   ; \CloseHandle
0042380E   |.  5F                   pop edi
0042380F   |.  5E                   pop esi
00423810   |.  5B                   pop ebx
00423811   |.  C9                   leave
00423812   \.  C3                   retn

00423805处非常隐蔽,花了我很长的时间,才找到。
详见我的新帖子:万能五笔的修改后续
2005-2-18 16:29
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
49
最初由 vcasm 发布
有精力的话可以做个下面的过程试试
1、保护环境
2、计算();//将真正的结果保存在某个内存单元里面或者寄存器
3、恢复环境
4、有2种可能的分支处理,在第2步运算种决定
........


你这个思路很早就有软件【记得好像是什么BOOK电子演示制作软件,电脑报强力推荐过,才1MB大小居然比当时价值上万的AW都不逊色】这么用过了,那个时候我才高二实力不济,但对于国外破解手似乎无大碍。
2005-3-1 11:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
50
看了各位的帖,感觉收益非浅。

只是我觉得,我们好象都在被微软耍着玩?
2006-5-16 13:08
0
游客
登录 | 注册 方可回帖
返回
//