能力值:
( 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
|
能力值:
(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脱壳高手,今天能得到你的指点很是高兴。
|
能力值:
( LV2,RANK:10 )
|
-
-
53 楼
mov eip,00C50021
run
mov eip,00C50021
run
mov eip,00C50021
run
mov eip,00C50021
run
mov eip,00C50021
run
请问,我这儿这个脚本不能运行,哪位大哥能说一下啥
|
能力值:
( LV2,RANK:10 )
|
-
-
54 楼
精品中的精品
好文,说的很详细
|
能力值:
( LV2,RANK:10 )
|
-
-
55 楼
真的是学无止境啊
|
能力值:
( LV2,RANK:10 )
|
-
-
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] 条件不能满足,就是这样的吧。
|
能力值:
(RANK:350 )
|
-
-
57 楼
最初由 inr 发布 晕,没有人说,我看了几天算看明白了一些, 这个运行前要先在 00C50000 A1 C000C500 mov eax, dword ptr [C500C0] 处建 EIP。
是这里建EIP,然后跑脚本
|
能力值:
( LV2,RANK:10 )
|
-
-
58 楼
写的不错,支持
|
能力值:
( LV2,RANK:10 )
|
-
-
59 楼
下了附件学习下
|
能力值:
( LV2,RANK:10 )
|
-
-
60 楼
|
能力值:
( LV9,RANK:1250 )
|
-
-
61 楼
正在学习中。
|
能力值:
( LV2,RANK:10 )
|
-
-
62 楼
真是经典啊。学习中
|
能力值:
( 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地址处也没有任何东西。
|
能力值:
(RANK:350 )
|
-
-
64 楼
最初由 deanlh 发布 就死循环了。。。。难道偶IAT地址找错了?另外这一段PATCH是不是在硬件断点断下后PATCH呢?
你先单步走这段代码,看看哪步出错,再找原因。 最初由 deanlh 发布 另外偶的D0 和160地址处也没有任何东西。
不明白你这句话意思。
|
能力值:
( LV2,RANK:10 )
|
-
-
65 楼
好难啊。
学习ing.....
|
能力值:
( 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
|
能力值:
(RANK:350 )
|
-
-
67 楼
来到死循环处,意味着在IAT里没搜索到所要的项。
1.你先查一下IAT是否加密了
2.执行到:
013A009A 391E cmp [esi], ebx
看看EBX是不是一个正确的函数地址,ESI指向的是不是IAT中的项。
|
能力值:
( LV2,RANK:10 )
|
-
-
68 楼
看雪老大,执行到013A009A 处的EBX不是正确的函数地址,ESI是指向IAT中的项,这是不是意味着IAT加密了?还是?
|
能力值:
(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起始地址好像搞错了。
|
能力值:
( LV2,RANK:10 )
|
-
-
70 楼
看雪老大,先没理解意思,搞错了。。现在通过了。。但是PATCH执行到这一步出错
013A006E 66:890B mov [ebx], cx
[ebx]为0
这偶看没清楚哪里有问题
|
能力值:
( LV9,RANK:1250 )
|
-
-
71 楼
最初由 deanlh 发布 看雪老大,先没理解意思,搞错了。。现在通过了。。但是PATCH执行到这一步出错 013A006E 66:890B mov [ebx], cx [ebx]为0 这偶看没清楚哪里有问题
估计是修复完毕了。
|
能力值:
(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地址表
|
能力值:
( 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] ........ 有做这些。。。真是很奇怪。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
74 楼
实在是搞不定,最后只好猜API了。。。幸好那软件API不多。。。全猜出来了。
|
能力值:
( LV2,RANK:10 )
|
-
-
75 楼
顶!!!!!!
|
|
|