能力值:
(RANK:1060 )
|
-
-
2 楼
0F8x 是 jxx near,跳转范围大
7X 是 jx short,只有+-127字节
|
能力值:
( LV6,RANK:90 )
|
-
-
3 楼
哇哈哈 多谢版主,原来这样,我是在学写shellcode,代码里用到一个for循环,循环里的东西太长超过127字节就会用 jxx near指令,碰到jxx near的话就会有0x00导致shellcode中断,我把它改成这样了
__asm{
xxx:
mov esi, i
cmp esi, 100
jge aaaa
}
hProcess = OpenProcess(1040, 0, processid[i]);
__asm{
aaaa:
mov esi, i
cmp esi, 100
jge bbb
}
if (hProcess){
EnumProcessModules(hProcess, &hModule, sizeof(hModule), pBytesReturned);
__asm{
bbb:
mov esi, i
cmp esi, 100
jge ccc
}
GetModuleFileNameEx(hProcess, hModule, path, sizeof(path));
__asm{
ccc:
mov esi, i
cmp esi, 100
jge ddd
}
GetShortPathName(path, path, 256);
__asm{
ddd:
mov esi, i
cmp esi, 100
jge eee
}
memcpy(aj+offset, path, strlen(path));
offset+=strlen(path);
__asm{
eee:
mov esi, i
cmp esi, 100
jge yyy
}
}
i++;
__asm{
jmp xxx
yyy:
}
这么改只是为了避免jxx near指令带来的0x00,不知道有没有好点的办法,这样看起来别扭。。
|
能力值:
(RANK:1060 )
|
-
-
4 楼
1. 你的shellcode不能直接调用API
2. 避免00可以精心选择一些指令写一个loader
|
能力值:
( LV6,RANK:90 )
|
-
-
5 楼
这样啊,我再去研究下, 多谢版主~
|
能力值:
( LV6,RANK:90 )
|
-
-
6 楼
把函数用汇编写的话,有个问题,怎么push数组的第 i 个元素
比如
hProcess = OpenProcess(1040, 0, processid[i]);
这句,要写成汇编的话怎么写?
__asm{
push ?? //这里如何push?
push 0
push 1040
mov eax, 0xYYYYYYYY //OpenProcess地址
call eax
}
|
能力值:
(RANK:410 )
|
-
-
7 楼
lea eax,processid
push DWORD ptr [eax+xxx] ;xxx为下标
|
能力值:
( LV6,RANK:90 )
|
-
-
8 楼
欧也 非常感谢~
|