首页
社区
课程
招聘
[求 解 惑]如何确定Stolen Code有多少字节?
发表于: 2006-8-16 09:30 4493

[求 解 惑]如何确定Stolen Code有多少字节?

2006-8-16 09:30
4493
前提:PEid查看是ASProtect 1.23 RC4 - 1.3.08.24 -> Alexey Solodovnikov

问题1:如何确定Stolen Code 有多少字节?
00EC88CE    F2:             prefix repne:  
00EC88CF    55              push ebp  
00EC88D0    8BEC            mov ebp, esp
00EC88D2    6A FF           push -1
00EC88D4    68 A8384A00     push 4A38A8
00EC88D9    68 6CC54600     push 46C56C
00EC88DE    64:A1 00000000  mov eax, dword ptr fs:[0]
00EC88E4    3E:EB 01        jmp short 00EC88E8  
00EC88E7    F2:             prefix repne:      
00EC88E8    50              push eax
00EC88E9    64:8925 0000000>mov dword ptr fs:[0], esp
00EC88F0    83EC 58         sub esp, 58
00EC88F3    3E:EB 01        jmp short 00EC88F7   
00EC88F6    F2:             prefix repne:        
00EC88F7    53              push ebx
00EC88F8    3E:EB 01        jmp short 00EC88FC   
00EC88FB    F2:             prefix repne:        
00EC88FC    56              push esi
00EC88FD    3E:EB 01        jmp short 00EC8901   
00EC8900    F2:             prefix repne:        
00EC8901    57              push edi
00EC8902    8965 E8         mov dword ptr ss:[ebp-18], esp
00EC8905    3E:EB 01        jmp short 00EC8909  
00EC8908    F2:             prefix repne:        
00EC8909    EB 01           jmp short 00EC890C // 这里!
00EC890B    9A 687D7746 006>call far 6800:46777D68
... ..
比如上面代码的Stolen Code 都找出来,到了00EC8909处,跳转后,会发现下面两条语句:
push 64E094
push 10D6C14
...
事实上,这两句并不是Stolen Code!
现在的问题是,如何界定Stolen Code 都找出来了呢?换句话说,如何确定Stolen Code有多少个字节?

问题2:OllyDB中,在真实的OEP处填入Stolen Code后,[右键]-->[复制到可执行文件]-->[选择部分],跳出"在可执行文件中无法定位数据"的对话框错误.这该怎么解决?

0064E06D    C3             retn
0064E06E    0000           add byte ptr ds:[eax],al //真实的OEP
0064E070    0000           add byte ptr ds:[eax],al
0064E072    0000           add byte ptr ds:[eax],al
0064E074    0000           add byte ptr ds:[eax],al
0064E076    0000           add byte ptr ds:[eax],al
0064E078    0000           add byte ptr ds:[eax],al
0064E07A    0000           add byte ptr ds:[eax],al
0064E07C    0000           add byte ptr ds:[eax],al
0064E07E    0000           add byte ptr ds:[eax],al
0064E080    0000           add byte ptr ds:[eax],al
0064E082    0000           add byte ptr ds:[eax],al
0064E084    0000           add byte ptr ds:[eax],al
0064E086    0000           add byte ptr ds:[eax],al
0064E088    0000           add byte ptr ds:[eax],al
0064E08A    0000           add byte ptr ds:[eax],al
0064E08C    0000           add byte ptr ds:[eax],al
0064E08E    0000           add byte ptr ds:[eax],al
0064E090    0000           add byte ptr ds:[eax],al
0064E092    0000           add byte ptr ds:[eax],al
0064E094    FF15 CCB26600  call dword ptr ds:[66B2CC] //最后异常处理后返回到这里
0064E09A    33D2           xor edx,edx
... ...

BTW:这里真实的OEP也是由问题1才可以确定

问题3:ImportREC中"New Import Infos (IID + ASCII + LOADER)"部分的RVA以及Size如何填写?大致原理是什么?

以上问题是我感到非常困惑的地方,请高手们斑竹们多指点一下,谢谢谢谢.

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 117
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
问题一二我不知道,问题三请参考置顶贴中的脱壳入门教学的手动确定IAT

另外,感觉楼主还没有明白Stolen Code 的具体意思。
2006-8-16 10:02
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
最初由 无奈无赖 发布
问题一二我不知道,问题三请参考置顶贴中的脱壳入门教学的手动确定IAT

另外,感觉楼主还没有明白Stolen Code 的具体意思。


不好意思,Stolen Code我的大体理解是:初始化代码被移位(比如被移位到SEH中)执行,原始的初始化处被处理成不会被执行的无用代码.
2006-8-16 10:14
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
问题二已经自行解决,浪费了N多时间.
怎么只有楼上兄弟一个帮我解答一下啊?
2006-8-16 11:15
0
雪    币: 184
活跃值: (108)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
5
首先,你要熟悉VC的头结构,然后对应一下它可能(这个只能看一个大致)偷掉了多少,它填充了多少垃圾代码并不需要管,一般原程序的代码空间不太会变动太多,否则它就是大规模偷代码了.最多的情况是偷几行然后一个jmp,最后又跳回来.

再就是,偷代码并不需要一模一样的恢复,只要能重现当时的堆栈环境和初始环境就算完成了任务.这些前提就是你熟悉各种语言编译器编译出来的的头模样.
2006-8-16 15:01
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
还有没有其他简单的补充啊? 谢谢谢谢大家!!!!!!
2006-8-16 16:56
0
游客
登录 | 注册 方可回帖
返回
//