首页
社区
课程
招聘
[求助]stolen code是什么意思
发表于: 2005-7-11 08:51 8606

[求助]stolen code是什么意思

2005-7-11 08:51
8606
看到好多地方都提到这个,看的不太明白,也没找到资料,谁帮我详细说说定义以及该如何应对。

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 209
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我也不是太明白。
好象是从原来的程序中抽取一段代码出来叫stolen code
2005-7-11 09:12
0
雪    币: 212
活跃值: (71)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
最初由 random 发布
我也不是太明白。
好象是从原来的程序中抽取一段代码出来叫stolen code


抽取一段出来之后应该还要做点处理吧
2005-7-11 21:24
0
雪    币: 255
活跃值: (175)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
每一种编译工具例如 : VC++ , Delphi , Borland , etc..
在OEP有一个唯一的/相同的PE头
其中的一些是这样的:

Push EBP
MOV Ebp,Esp
Add ESP , -010
Mov EAX, SOME_VALUE

(共11bytes)
或者:

Push EBP
MOV Ebp,Esp
Add ESP , -010
Push EBX
Push ESi
Push EDi
Mov EAX, SOME_VALUE

(共14 bytes)
这个程序被抽掉多少字节,11个,因为

00564A4F 001C43 ADD BYTE PTR DS:[EBX+EAX*2],BL
00564A52 56 PUSH ESI
00564A53 0000 ADD BYTE PTR DS:[EAX],AL //这里往下一共12个字节,被抽掉的字节会用00补充,故Oep判断为564a54
00564A55 0000 ADD BYTE PTR DS:[EAX],AL
00564A57 0000 ADD BYTE PTR DS:[EAX],AL
00564A59 0000 ADD BYTE PTR DS:[EAX],AL
00564A5B 0000 ADD BYTE PTR DS:[EAX],AL
00564A5D 0000 ADD BYTE PTR DS:[EAX],AL
00564A5F E8 D828EAFF CALL SystemCl.0040733C

用Peid扫描一下脱壳的文件,Borland Delphi 6.0 - 7.0,我们仿真入口点11个字节。

Push EBP //固定格式
Mov EBP,ESP //固定格式
Add ESP,-010 //ADD ESP 的值一般 Delphi 程序都是-010
Mov eax, 00564344 //这里EAX的值就是刚才记录下来的。
2005-7-11 22:22
0
雪    币: 212
活跃值: (71)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
最初由 lee 发布
每一种编译工具例如 : VC++ , Delphi , Borland , etc..
在OEP有一个唯一的/相同的PE头
其中的一些是这样的:

Push EBP
........


看的不太明白,不明白stolen code如何会影响oep的查找,
2005-7-12 08:52
0
雪    币: 108
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
最初由 xxy19804 发布


看的不太明白,不明白stolen code如何会影响oep的查找,

stolen code

是 程序OEP部分的代码
2005-7-12 12:00
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7

=====================
关于stolen bytes
Author:Lenus
From: www.*****.net & bbs.asmcc.com
E-mail:Lenus_M@163.com
=====================
每一种编译工具例如 : VC++ , Delphi , Borland , etc..
在OEP有一个唯一的/相同的PE头
其中的一些是这样的:

Push EBP
MOV Ebp,Esp
Add ESP , -010
Mov EAX, SOME_VALUE

(共11bytes)
或者:

Push EBP
MOV Ebp,Esp          ;*
Add ESP , -010       ;**
Push EBX             ;***
Push ESi
Push EDi
Mov EAX, SOME_VALUE  ;****

(共14 bytes)
   上面应该是一个老外LaBBa的话吧。问题是我们菜鸟如何理解呢?

1.对于*的部分
    原程序的OEP,通常是一开始以 Push EBP 和MOV Ebp,Esp这两句开始的,不用我多说大家也知道这两句的意思是以EBP代替ESP,作为访问堆栈的指针。
为什么要这样呢?为什么几乎每个程序都是的开头能?
因为如果我们写过C等函数的时候就应该清楚,程序的开始是以一个主函数main()为开始的,而函数在访问的过程中最重要的事情就是要确保堆栈的平衡,而在win32的环境下保持平衡的办法是这样的:
a.让EBP保存ESP的值;
b.在结束的时候调用
   mov esp,ebp
   pop ebp
   retn
   或者是
   leave
   retn
   两个形式是一个意思。这样做的好处是不用考虑ESP等于多少,PUSH了多少次,要POP多少次了,因为我们知道EBP里面放的是开始时候的ESP值。

2.对于**的部分
    Add ESP , -010这种代码的意思是在堆栈区域开辟一块区域保存和使用局部变量,用EBP-XX来调用。

3.对于***的部分

    在下来就是保存寄存器的初始值。

4.对于****的部分

    初始化寄存器。

小结:我们知道了这就是程序在编译后程序OEP的一般形式,而某些壳在处理OEP的代码时,把这些固定的代码nop掉,然后把他们放到壳代码的空间里面(而且还常伴随着花指令)!使原程序的开始从壳空间开始,然后再JMP回程序空间。如果我们脱掉壳了以后,这一部分就会遗失,也就达到了反脱壳的目的。这就是stolen code技术,或者更确切的说是stolen OEP code技术。

最后于 2021-4-25 16:53 被kanxue编辑 ,原因: www.****.net域名失效,变成X站,故编辑删除
2005-7-12 15:45
1
雪    币: 234
活跃值: (104)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
好像现在的新壳,不仅仅偷掉脑袋,还把中间若干重要器官偷掉几个细胞。
2005-7-12 16:07
0
雪    币: 513
活跃值: (2258)
能力值: ( LV9,RANK:2130 )
在线值:
发帖
回帖
粉丝
9
直接翻译过来去理解就行了,stolen 已偷 code 代码.可以理解为已抽代码之类的。
2005-7-12 16:16
0
雪    币: 212
活跃值: (71)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谢谢,明白了点,还要加深理解
2005-7-12 16:20
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
受益菲浅呀!
2006-7-17 15:57
0
游客
登录 | 注册 方可回帖
返回
//