首页
社区
课程
招聘
[原创]瓦解PELock 1.0x -> Bartosz Wojcik秀
发表于: 2006-7-29 12:19 30876

[原创]瓦解PELock 1.0x -> Bartosz Wojcik秀

2006-7-29 12:19
30876

[主题]:瓦解PELock 1.0x -> Bartosz Wojcik秀
[作者]:PeaceClub
[工具]:Ollydbg,OllyScript v9.2,OllyDump,LoadPE,Imprec
[文件]:演示文件为PELock 1.06保护的WinRoot的Dll_LoadEx
[说明]:PELock的壳代码混淆和保护能力还是挺优秀的,我向来对复杂的壳不愿意花时间去弄,但今天是个特殊的纪念日子,所以……,Action!
第一步:进入解压段
为了配合脚本及过程,请您忽略所有异常,除了C000001D (ILLEGAL INSTRUCTION)。
[动作]:ollydbg载入,停留在40605C


0040605C > F9 STC
0040605D 72 01 JB SHORT Dll_Load.00406060
0040605F D6 SALC
00406060 F9 STC
00406061 72 01 JB SHORT Dll_Load.00406064
00406063 5A POP EDX
00406064 E8 02000000 CALL Dll_Load.0040606B
00406069 5A POP EDX
0040606A 2D 5880F10C SUB EAX,0CF18058
0040606F EB 02 JMP SHORT Dll_Load.00406073
00406071 CD 20 INT 20

00382E54 /EB 02 JMP SHORT 00382E58
00382E56 |0F5EEB DIVPS XMM5,XMM3
00382E59 0361 79 ADD ESP,DWORD PTR DS:[ECX+79]
00382E5C 4B DEC EBX
00382E5D C1F2 00 SAL EDX,0 ; Shift constant out of range 1..31
00382E60 EB 03 JMP SHORT 00382E65
00382E62 17 POP SS ; Modification of segment register
00382E63 BE 24EB0263 MOV ESI,6302EB24
00382E68 D5 EB AAD 0EB
00382E6A 020F ADD CL,BYTE PTR DS:[EDI]
00382E6C D0EB SHR BL,1

/*
PELock 1.0x -> Bartosz Wojcik IAT Fix script v0.1
Author: peaceclub
Email: 5261314@sohu.com
OS: Winxp Sp2
Date: 2006-7-29
Action: Auto fix IAT,With Remote jmp Patch code
*/
var iat1
var nextstop
dbh

l1:
find eip,#8919#
bprm $RESULT,2
mov iat1,$RESULT

find eip,#C602E9#
mov nextstop,$RESULT
mov [nextstop],#ebfe#
eob I2
esto

I2:
cmp eip,iat1
jne I3
mov [ecx],eax
add eip,2
eob I2
esto

I3:
eob I2
esto

I4:
msg "IAT Fix OK.Please Ctrl+G,then input EDI-1 to Patch Code Area!"
cob
dbs
ret

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (80)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
经典
2006-7-29 12:25
0
雪    币: 303
活跃值: (466)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
美国纽约世贸43N,兴存着果然列害
2006-7-29 12:48
0
雪    币: 817
活跃值: (1927)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
4
学习
2006-7-29 13:39
0
雪    币: 109
活跃值: (498)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
5
原来这个人有
马甲的哦
2006-7-29 14:02
0
雪    币: 255
活跃值: (207)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
6
最初由 cater 发布
原来这个人有
马甲的哦

在这里就这一个ID.
2006-7-29 14:12
0
雪    币: 443
活跃值: (200)
能力值: ( LV9,RANK:1140 )
在线值:
发帖
回帖
粉丝
7
现在好像很流行减肥吗??

差不多搞完都要减肥一下DI

ZHICHI楼主!
2006-7-29 14:15
0
雪    币: 556
活跃值: (2303)
能力值: ( LV9,RANK:2130 )
在线值:
发帖
回帖
粉丝
8
现在看到完美xxx就好像听到另一声音xx免杀。
2006-7-29 14:59
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
9
请问楼主

EB 05 8B 16 83 C6 04 8B FA 0F B6 06 46 80 3E 8D 74 15 50 8B C8 83 E0 03 C1 E9 02 F3 A5 8B C8 F3
A4 5A 46 90 90 EB 47 50 33 D2 33 C9 B1 06 F7 F1 8B C8 0F B6 46 01 8A E0 68 25 2D 35 3D 68 05 0D
15 1D B0 B8 33 D2 38 24 14 74 07 90 90 FE C0 42 EB F4 5A 5A 25 FF 00 00 00 50 33 C0 8B 56 02 03
C2 83 C6 06 E2 F6 5A 88 17 89 47 01 46 5A 4B 75 91 5F 8D 4D 66 2B CF F3 AA 61 C3

这些代码可否通用?
2006-7-29 15:29
0
雪    币: 255
活跃值: (207)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
10
我编的时候就注意通用性了,里面没有任何绝对地址引用,所以应该是通用的。
2006-7-29 15:44
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
11
楼主可否详细介绍下如何找到Stolen Code的?
当某个程序被抽得太多的时候 就不好去猜了
2006-7-29 16:00
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
12
这么修复很慢,
克隆一份代码patch CRC那里,然后可以直接修改patch IAT。

并且试试delphi程序,有个表被抽走了。

给你个参考代码,写得很乱:

                                        ; clone decoder to fuck crc
                                        pusha
                                        mov        ebx, s_size[ebp]
                                        push        4
                                        push        3000h
                                        push        ebx
                                        push        0
                                        callX        VirtualAlloc
                                        mov        s_clone[ebp], eax
                                        xchg        edi, eax
                                        mov        esi, s_start[ebp]
                                        xchg        ecx, ebx
                                        rep        movsb
                                        popa

                                        ; find CRC patch
                                        ; 00374351    2B848D 143B0000 SUB     EAX, [EBP+ECX*4+3B14]
                                        ; 2B 84 8D 14 3B 00 00
                                        .while        b [eax] != 2Bh || \
                                                d [eax+1] != 3B148D84h || \
                                                w [eax+5] != 0
                                                inc        eax
                                        .endw
                                        ; save the addr to decide is last exception
                                        mov        iatproc[ebp], eax
                                        ; patch CRC
                                        add        eax, 3
                                        mov        ecx, s_clone[ebp]
                                        sub        ecx, s_start[ebp]
                                        add        ecx, [eax]
                                        mov        [eax], ecx
                                        ; patch IAT encrypt
                                        ; 00374661    8919            MOV     [ECX], EBX
                                        ; 00374663    EB 03           JMP     SHORT 00374668
                                        ; 8919EB03
                                        .while        d [eax] != 03EB1989h
                                                inc        eax
                                        .endw
                                        inc        eax
                                        mov        b [eax], 01h        ; mov [ecx], eax
                                        ; wait alloc mem to fuck Codereplace
                                        mov        eax, za[ebp]
                                        call        _bp
2006-7-29 16:21
0
雪    币: 255
活跃值: (207)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
13
最初由 chinadev 发布
楼主可否详细介绍下如何找到Stolen Code的?
当某个程序被抽得太多的时候 就不好去猜了

你可以断在38760d那里的popad retn那里,然后逐步f7跟踪,中途还有个异常,用好seh链就好.
对于断点检查,搜索cmp al,0cc 把这个改成cmp al,0之类的就可以了。

to楼上:
1、不能跟你比,你丫的多疯变  
2、我补丁代码里作了lea代码加法运算混淆代码转换mov,从而真正还原最原始代码,无junk

2006-7-29 16:47
0
雪    币: 214
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
to楼上楼上:不能跟你比,你丫的多疯变
2006-7-29 16:58
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
15
最初由 peaceclub 发布
你可以断在38760d那里的popad retn那里,然后逐步f7跟踪,中途还有个异常,用好seh链就好.
对于断点检查,搜索cmp al,0cc 把这个改成cmp al,0之类的就可以了。

to楼上:不能跟你比,你丫的多疯变

谢谢
2006-7-29 17:11
0
雪    币: 338
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
强人.!!膜拜一下!!
2006-7-29 17:13
0
雪    币: 109
活跃值: (498)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
17
最初由 peaceclub 发布
在这里就这一个ID.


http://bbs.pediy.com/member.php?s=&action=getinfo&userid=451

原来不是你哦?
2006-7-29 23:44
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
18
他怎么会是狗工
2006-7-29 23:59
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
19
发现楼主重大bug,我用unpacker脱后

00401D60 >  55              PUSH    EBP
00401D61    8BEC            MOV     EBP, ESP
00401D63    6A FF           PUSH    -1
00401D65    68 B0354000     PUSH    004035B0
00401D6A    68 E61E4000     PUSH    <JMP.&msvcrt._except_handler3>
00401D6F    64:A1 00000000  MOV     EAX, FS:[0]
00401D75    50              PUSH    EAX

说明楼主stolen不正确
2006-7-31 10:55
0
雪    币: 229
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
最初由 peaceclub 发布
你可以断在38760d那里的popad retn那里,然后逐步f7跟踪,中途还有个异常,用好seh链就好.
对于断点检查,搜索cmp al,0cc 把这个改成cmp al,0之类的就可以了。

to楼上:
1、不能跟你比,你丫的多疯变
........


38760d 这个地址每台机器都不是一样 是在那一步后可以开始找被偷的代码?
能说详细点吗
2006-7-31 11:14
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
最初由 forgot 发布
发现楼主重大bug,我用unpacker脱后

00401D60 > 55 PUSH EBP
00401D61 8BEC MOV EBP, ESP
00401D63 6A FF PUSH -1
........

没有什么不一样的。其实push 0同push -1在这里区别不大,你就是push 1都可以。
2006-7-31 11:26
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
22
你对vc 的seh不了解,这个是dispatch表的结尾
不过这个一般不影响运行。
2006-7-31 11:29
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
我看是你对VC的SEH不了解,SEH还需要什么标识?
00401D6A    68 E61E4000     PUSH    <JMP.&msvcrt._except_handler3>
00401D6F    64:A1 00000000  MOV     EAX, FS:[0]
00401D75    50              PUSH    EAX
这个才同SEH相关.SEH链表只认fs:[0].
VC编译时OEP的确初始化都是push -1,但是根本就不用这个值,因为马上离OEP不远就修改成push 0,不信你跟踪看看.
2006-7-31 11:47
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
24
无语,我是说vc封装的,你多复习吧。

我说楼主stolen trace错了,你扯出这么多废话干啥。
2006-7-31 11:59
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
何况楼主在文中已经特别强调这点,你还说重大BUG,应该算是鸡蛋挑骨头。
00401D63  |.  6A 00         PUSH 0         **注意:此处正常为push -1,壳作者把它修改了,我们也照旧吧***
2006-7-31 12:02
0
游客
登录 | 注册 方可回帖
返回
//