首页
社区
课程
招聘
[分享]Asprotect SKE 2.2 的Advanced Import protection保护技术
发表于: 2006-4-7 16:38 46409

[分享]Asprotect SKE 2.2 的Advanced Import protection保护技术

2006-4-7 16:38
46409
收藏
免费 0
支持
分享
最新回复 (91)
雪    币: 229
活跃值: (50)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
51
//edx+51 ---  MOV [n],xxx1
                  00AA60A3    8B55 F8         mov     edx, [ebp-8]
                  00AA60A6    3A42 51         cmp     al, [edx+51]
                  00AA60A9    75 5E           jnz     short 00AA6109
                  00AA60AB    EB 01           jmp     short 00AA60AE
                  00AA60AD    E8 33C08A46     call    473520E5
                  00AA60B2    05 8D04408B     add     eax, 8B40048D
                  00AA60B7    55              push    ebp
                  00AA60B8    F8              clc
                  00AA60B9    8B5482 68       mov     edx, [edx+eax*4+68]
                  00AA60BD    8BC3            mov     eax, ebx
                  00AA60BF    FFD2            call    edx
                  00AA60C1    8845 EB         mov     [ebp-15], al   <-al==xxx1
                  //0=eax,1=ecx,2=edx,3=ebx,4=esp,5=ebp,6=esi,7=edi
                  00AA60C4    EB 01           jmp     short 00AA60C7
                  00AA60C6  - E9 33C08A46     jmp     473520FE
                  00AA60CB    07              pop     es
                  00AA60CC    8D0440          lea     eax, [eax+eax*2]
                  00AA60CF    8B55 F8         mov     edx, [ebp-8]
                  00AA60D2    8B5482 68       mov     edx, [edx+eax*4+68]
                  00AA60D6    8BC3            mov     eax, ebx
                  00AA60D8    FFD2            call    edx
                  00AA60DA    8BD8            mov     ebx, eax
                  00AA60DC    8A4D EB         mov     cl, [ebp-15]
                  00AA60DF    8B55 10         mov     edx, [ebp+10]
                  00AA60E2    8B45 F8         mov     eax, [ebp-8]
                  00AA60E5    E8 CE010000     call    00AA62B8
                  00AA60EA    8B55 F8         mov     edx, [ebp-8]
                  00AA60ED    035A 14         add     ebx, [edx+14]  <-ebx==n
                  00AA60F0    8903            mov     [ebx], eax
                  00AA60F2    EB 01           jmp     short 00AA60F5
                  00AA60F4    9A 8B5DF003 5DF>call    far F45D:03F05D8B
                  00AA60FB    8B45 F8         mov     eax, [ebp-8]
                  00AA60FE    0398 E0000000   add     ebx, [eax+E0]
                  00AA6104    E9 41010000     jmp     00AA624A
2006-4-10 13:52
0
雪    币: 44229
活跃值: (19950)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
52
最初由 VolX 发布
//edx+51 --- MOV [n],xxx1
00AA60A3 8B55 F8 mov edx, [ebp-8]
00AA60A6 3A42 51 cmp al, [edx+51]
00AA60A9 75 5E jnz short 00AA6109
00AA60AB EB 01 jmp short 00AA60AE
........


早就听说VolX是Asprotect SKE脱壳高手,今天能得到你的指点很是高兴。
2006-4-10 14:01
0
雪    币: 106
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
inr
53
mov eip,00C50021
run
mov eip,00C50021
run
mov eip,00C50021
run
mov eip,00C50021
run
mov eip,00C50021
run
请问,我这儿这个脚本不能运行,哪位大哥能说一下啥
2006-5-22 22:52
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
54
精品中的精品
好文,说的很详细
2006-5-24 08:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
55
真的是学无止境啊
2006-5-25 09:16
0
雪    币: 106
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
inr
56
最初由 inr 发布
mov eip,00C50021
run
mov eip,00C50021
run
mov eip,00C50021
........


晕,没有人说,我看了几天算看明白了一些,
这个运行前要先在
00C50000    A1 C000C500        mov     eax, dword ptr [C500C0] 处建
EIP,不然后面的00C50047    8B5D FC            mov     ebx, dword ptr [ebp-4] 条件不能满足,就是这样的吧。
2006-5-27 12:00
0
雪    币: 44229
活跃值: (19950)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
57
最初由 inr 发布
晕,没有人说,我看了几天算看明白了一些,
这个运行前要先在
00C50000 A1 C000C500 mov eax, dword ptr [C500C0] 处建
EIP。


是这里建EIP,然后跑脚本
2006-5-27 14:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
58
写的不错,支持
2006-5-27 17:29
0
雪    币: 231
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
59
下了附件学习下
2006-7-12 12:03
0
雪    币: 225
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
60
PF PF PF

头真的快撞晕啦。。。 越晕却也越来越越不懂。。。
2006-7-19 19:19
0
雪    币: 417
活跃值: (475)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
61
正在学习中。
2006-8-1 07:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
62
真是经典啊。学习中
2006-8-1 12:08
0
雪    币: 242
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
63
看雪老大,偶一个程序按教程执行这一段PATCH
00C50000    A1 C000C500        mov     eax, dword ptr [C500C0]                 ;  指向待处理的地址列表
00C50005    8B18               mov     ebx, dword ptr [eax]
00C50007    81E3 FFFFFF7F      and     ebx, 7FFFFFFF
00C5000D    FFE3               jmp     ebx
00C5000F    0000               add     byte ptr [eax], al
00C50011    0000               add     byte ptr [eax], al
00C50013    0000               add     byte ptr [eax], al
00C50015    0000               add     byte ptr [eax], al
00C50017    0000               add     byte ptr [eax], al
00C50019    0000               add     byte ptr [eax], al
00C5001B    0000               add     byte ptr [eax], al
00C5001D    0000               add     byte ptr [eax], al
00C5001F    0000               add     byte ptr [eax], al                      ; 0c500c0得手工填上,0c500c0+4处也得填上(存放那些下一句被抽的API的CALL)
00C50021    BF C000C500        mov     edi, 0C500C0                            ; EDI存放的是指向需要处理的API地址表
00C50026    8B07               mov     eax, dword ptr [edi]
00C50028    8B18               mov     ebx, dword ptr [eax]
00C5002A    81FB FFFFFF7F      cmp     ebx, 7FFFFFFF
00C50030    79 49              jns     short 00C5007B                          ; 高位是1的走这条路线(跳),即处理a方式
00C50032    837D D4 FF         cmp     dword ptr [ebp-2C], -1                  ; 如是FFFFFFFF,说明这个导入函数调用是干净的
00C50036    74 0F              je      short 00C50047
00C50038    8B47 04            mov     eax, dword ptr [edi+4]                  ; EDI+4处的值得手工填上,我填的是c50160(存放那些下一句被抽的API的CALL)
00C5003B    8B1F               mov     ebx, dword ptr [edi]                    ; 指向待处理的API列表
00C5003D    8B1B               mov     ebx, dword ptr [ebx]
00C5003F    8918               mov     dword ptr [eax], ebx
00C50041    83C0 04            add     eax, 4
00C50044    8947 04            mov     dword ptr [edi+4], eax
00C50047    8B5D FC            mov     ebx, dword ptr [ebp-4]                  ; ebp-4是获得的API函数地址
00C5004A    E8 46000000        call    00C50095                                ; 在IAT里搜索,正确的IAT项从ESI中返回
00C5004F    B0 4C              mov     al, 4C                                  ; 决定是ff15还是ff25,不同软件AL的值不同,本实例是4c
00C50051    66:B9 FF15         mov     cx, 15FF
00C50055    3A45 EF            cmp     al, byte ptr [ebp-11]
00C50058    74 05              je      short 00C5005F
00C5005A    66:81C1 0010       add     cx, 1000
00C5005F    8B07               mov     eax, dword ptr [edi]                    ; 指向待处理的API列表
00C50061    8B18               mov     ebx, dword ptr [eax]
00C50063    81E3 FFFFFF7F      and     ebx, 7FFFFFFF                           ; 将高1位清除
00C50069    83C0 04            add     eax, 4                                  ; 指向下一个地址
00C5006C    8907               mov     dword ptr [edi], eax
00C5006E    66:890B            mov     word ptr [ebx], cx
00C50071    83C3 02            add     ebx, 2
00C50074    8933               mov     dword ptr [ebx], esi
00C50076  ^ EB 88              jmp     short 00C50000
00C50078    90                 nop
00C50079    90                 nop
00C5007A    90                 nop                                             ; 下面是处理a情况(本实例无这情况,但为了大家以后方便,故放出)
00C5007B    8B5D B4            mov     ebx, dword ptr [ebp-4C]                 ; ebp-4c是获得的API函数地址
00C5007E    E8 12000000        call    00C50095                                ; 在IAT里搜索,正确的IAT项从ESI中返回
00C50083    B0 4C              mov     al, 4C                                  ; 这个4c的值在不同的程序是随机
00C50085    66:B9 FF15         mov     cx, 15FF
00C50089    3AC2               cmp     al, dl                                  ; dl中的值决定了是call(ff15)还是jmp(ff25)
00C5008B  ^ 74 D2              je      short 00C5005F
00C5008D  ^ EB CB              jmp     short 00C5005A
00C5008F    0000               add     byte ptr [eax], al
00C50091    0000               add     byte ptr [eax], al
00C50093    0000               add     byte ptr [eax], al                      ; 这个CALL搜索IAT中的指定项
00C50095    BE 00504000        mov     esi, 405000                             ; IAT起始地址
00C5009A    391E               cmp     dword ptr [esi], ebx
00C5009C    74 0D              je      short 00C500AB
00C5009E    83C6 04            add     esi, 4
00C500A1    81FE B8504000      cmp     esi, 4050B8                             ; IAT结束地址,判断是否越界
00C500A7    77 03              ja      short 00C500AC
00C500A9  ^ EB EF              jmp     short 00C5009A                          ; 如果在IAT里没找到就死循环,所以,如果死循环,你按F12暂停程序
00C500AB    C3                 retn
00C500AC  - EB FE              jmp     short 00C500AC

就死循环了。。。。难道偶IAT地址找错了?另外这一段PATCH是不是在硬件断点断下后PATCH呢?
另外偶的D0 和160地址处也没有任何东西。
2006-8-3 19:06
0
雪    币: 44229
活跃值: (19950)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
64
最初由 deanlh 发布
就死循环了。。。。难道偶IAT地址找错了?另外这一段PATCH是不是在硬件断点断下后PATCH呢?


你先单步走这段代码,看看哪步出错,再找原因。

最初由 deanlh 发布
另外偶的D0 和160地址处也没有任何东西。

不明白你这句话意思。
2006-8-3 19:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
65
好难啊。

学习ing.....
2006-8-3 20:00
0
雪    币: 242
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
66
看雪老大,这是偶的
013A0000    A1 C0003A01     mov     eax, [13A00C0]
013A0005    8B18            mov     ebx, [eax]
013A0007    81E3 FFFFFF7F   and     ebx, 7FFFFFFF
013A000D    FFE3            jmp     near ebx
013A000F    0000            add     [eax], al
013A0011    0000            add     [eax], al
013A0013    0000            add     [eax], al
013A0015    0000            add     [eax], al
013A0017    0000            add     [eax], al
013A0019    0000            add     [eax], al
013A001B    0000            add     [eax], al
013A001D    0000            add     [eax], al
013A001F    0000            add     [eax], al
013A0021    BF C0003A01     mov     edi, 13A00C0
013A0026    8B07            mov     eax, [edi]
013A0028    8B18            mov     ebx, [eax]
013A002A    83F9 00         cmp     ecx, 0
013A002D    90              nop
013A002E    90              nop
013A002F    90              nop
013A0030    74 49           je      short 013A007B
013A0032    837D D4 FF      cmp     dword ptr [ebp-2C], -1
013A0036    74 0F           je      short 013A0047
013A0038    8B47 04         mov     eax, [edi+4]
013A003B    8B1F            mov     ebx, [edi]
013A003D    8B1B            mov     ebx, [ebx]
013A003F    8918            mov     [eax], ebx
013A0041    83C0 04         add     eax, 4
013A0044    8947 04         mov     [edi+4], eax
013A0047    8B5D FC         mov     ebx, [ebp-4]
013A004A    E8 46000000     call    013A0095
013A004F    B0 3B           mov     al, 3B
013A0051    66:B9 FF15      mov     cx, 15FF
013A0055    3A45 EF         cmp     al, [ebp-11]
013A0058    74 05           je      short 013A005F
013A005A    66:81C1 0010    add     cx, 1000
013A005F    8B07            mov     eax, [edi]
013A0061    8B18            mov     ebx, [eax]
013A0063    81E3 FFFFFF7F   and     ebx, 7FFFFFFF
013A0069    83C0 04         add     eax, 4
013A006C    8907            mov     [edi], eax
013A006E    66:890B         mov     [ebx], cx
013A0071    83C3 02         add     ebx, 2
013A0074    8933            mov     [ebx], esi
013A0076  ^ EB 88           jmp     short 013A0000
013A0078    90              nop
013A0079    90              nop
013A007A    90              nop
013A007B    8B5D B4         mov     ebx, [ebp-4C]
013A007E    E8 12000000     call    013A0095
013A0083    B0 3B           mov     al, 3B
013A0085    66:B9 FF15      mov     cx, 15FF
013A0089    3AC2            cmp     al, dl
013A008B  ^ 74 D2           je      short 013A005F
013A008D  ^ EB CB           jmp     short 013A005A
013A008F    0000            add     [eax], al
013A0091    0000            add     [eax], al
013A0093    0000            add     [eax], al
013A0095    BE 00100001     mov     esi, NOTEPADa.<模块入口点>
013A009A    391E            cmp     [esi], ebx
013A009C    74 0D           je      short 013A00AB
013A009E    83C6 04         add     esi, 4
013A00A1    81FE 44130001   cmp     esi, 1001344
013A00A7    77 03           ja      short 013A00AC
013A00A9  ^ EB EF           jmp     short 013A009A
013A00AB    C3              retn
013A00AC  - EB FE           jmp     short 013A00AC

这一段PATCH一步步执行没有问题,但是经过多次循环后,最后执行在
013A00AC  - EB FE           jmp     short 013A00AC
死循环了。。。。

D0 和160指的是01300D0 和0130160
2006-8-3 20:02
0
雪    币: 44229
活跃值: (19950)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
67
来到死循环处,意味着在IAT里没搜索到所要的项。

1.你先查一下IAT是否加密了
2.执行到:
013A009A    391E            cmp     [esi], ebx
看看EBX是不是一个正确的函数地址,ESI指向的是不是IAT中的项。
2006-8-3 20:11
0
雪    币: 242
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
68
看雪老大,执行到013A009A 处的EBX不是正确的函数地址,ESI是指向IAT中的项,这是不是意味着IAT加密了?还是?
2006-8-3 20:17
0
雪    币: 44229
活跃值: (19950)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
69
最初由 deanlh 发布
看雪老大,执行到013A009A 处的EBX不是正确的函数地址,ESI是指向IAT中的项,这是不是意味着IAT加密了?还是?


那你再重新跟踪一次,理解每句意思,这样就很容易找出问题所在。

00C5007B    8B5D B4            mov     ebx, dword ptr [ebp-4C]                 ; ebp-4c是获得的API函数地址

IAT加不加密,你自己应能判断,你开始将IAT起始地址传到ESI里了,所以我说ESI指向IAT。

013A0095 BE 00100001 mov esi, NOTEPADa.<模块入口点>


IAT起始地址好像搞错了。
2006-8-3 20:22
0
雪    币: 242
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
70
看雪老大,先没理解意思,搞错了。。现在通过了。。但是PATCH执行到这一步出错
013A006E    66:890B         mov     [ebx], cx
[ebx]为0
这偶看没清楚哪里有问题
2006-8-3 21:20
0
雪    币: 417
活跃值: (475)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
71
最初由 deanlh 发布
看雪老大,先没理解意思,搞错了。。现在通过了。。但是PATCH执行到这一步出错
013A006E 66:890B mov [ebx], cx
[ebx]为0
这偶看没清楚哪里有问题


估计是修复完毕了。
2006-8-3 21:34
0
雪    币: 44229
活跃值: (19950)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
72
这里用我那段代码解释一下:

; 0c500c0得手工填上,0c500c0+4处也得填上(存放那些下一句被抽的API的CALL)
00C50021    BF C000C500        mov     edi,  0C500C0                ; EDI存放的是指向需要处理的API地址表
00C50026    8B07               mov     eax, dword ptr [edi]
00C50028    8B18               mov     ebx, dword ptr [eax]

0C500C0 这个内存里,你得填一个地址进去,如这里填上0C500E0,将开始获得的API地址表粘贴到0C500E0 处。0c500c0+4也一样。

0C500C0  E0 00 C5 00 00 00 00 00 00 00 00 00 00 00 00 00  ??............
0C500D0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0C500E0  xxxxxxxxxxxxxxxxxxxxx这里放开始获得的API地址表
2006-8-3 21:37
0
雪    币: 242
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
73
最初由 kanxue 发布
这里用我那段代码解释一下:

; 0c500c0得手工填上,0c500c0+4处也得填上(存放那些下一句被抽的API的CALL)
00C50021 BF C000C500 mov edi, 0C500C0 ; EDI存放的是指向需要处理的API地址表
00C50026 8B07 mov eax, dword ptr [edi]
........


有做这些。。。真是很奇怪。。。。
2006-8-3 23:15
0
雪    币: 242
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
74
实在是搞不定,最后只好猜API了。。。幸好那软件API不多。。。全猜出来了。
2006-8-4 11:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
75
顶!!!!!!
2006-8-5 17:33
0
游客
登录 | 注册 方可回帖
返回
//