网上有delphi的简单加壳代码(在google上输入'加壳原理与简单实现加壳 delphi',会有一大把)
中间有段asm代码,如下:function AttachStart: dword; stdcall; //我们定义的待填充数据
asm
pushfd
pushad
mov eax,$12345678 //将会被自动计算并修改为加密初始地址
mov ebx,$1234 //将会被自动计算并修改为加密大小
mov ecx,0
@AA:
xor byte ptr[eax],$50
inc eax
inc ecx
cmp ecx,ebx
jbe @aa
popad
popfd
push $12345678 //将会被自动计算并修改为原OEP
ret
end; 其中语句,拆开,都能明白其含义;写在一起,不明白怎么就达到了作者的效果。
'待填充数据'是在 标签 与 跳转 指令间产生的吗?
$12345678和$1234是随便什么值都行的吗?
'mov eax,$12345678 //将会被自动计算并修改为加密初始地址' 这句是否可以理解为:因为eax会自动保存返回值,所以给它什么值都无所谓?(好像也不对)
'push $12345678 //将会被自动计算并修改为原OEP' 这句到最后还要将加密的初始地址压栈?并且还会自动修改为元OEP?希望有耐心的高手帮我把这段代码详细讲解下,主要讲下这些指令在这个function里的实际作用(及 为何要这样做),而不要像一般教程里那样把这些指令功能罗列出来,谢谢。
中间有段asm代码,如下:function AttachStart: dword; stdcall; //我们定义的待填充数据
asm
pushfd
pushad
mov eax,$12345678 //将会被自动计算并修改为加密初始地址
mov ebx,$1234 //将会被自动计算并修改为加密大小
mov ecx,0
@AA:
xor byte ptr[eax],$50
inc eax
inc ecx
cmp ecx,ebx
jbe @aa
popad
popfd
push $12345678 //将会被自动计算并修改为原OEP
ret
end; 其中语句,拆开,都能明白其含义;写在一起,不明白怎么就达到了作者的效果。
'待填充数据'是在 标签 与 跳转 指令间产生的吗?
$12345678和$1234是随便什么值都行的吗?
'mov eax,$12345678 //将会被自动计算并修改为加密初始地址' 这句是否可以理解为:因为eax会自动保存返回值,所以给它什么值都无所谓?(好像也不对)
'push $12345678 //将会被自动计算并修改为原OEP' 这句到最后还要将加密的初始地址压栈?并且还会自动修改为元OEP?希望有耐心的高手帮我把这段代码详细讲解下,主要讲下这些指令在这个function里的实际作用(及 为何要这样做),而不要像一般教程里那样把这些指令功能罗列出来,谢谢。
最近在在学BASM
@AA:
xor byte ptr[eax],$50
inc eax
inc ecx
cmp ecx,ebx
jbe @aa
那 这段 就是 占位 代码?
然后的 push $12345678 //将会被自动计算并修改为原OEP 这句不大明白,
2、AttachStart函数地址开始查找$12345678
3、换$12345678为X
结果变成这样:
function AttachStart: dword; stdcall; //我们定义的待填充数据
asm
pushfd
pushad
mov eax,X //将会被自动计算并修改为加密初始地址
mov ebx,$1234 //将会被自动计算并修改为加密大小
mov ecx,0
@AA:
xor byte ptr[eax],$50
inc eax
inc ecx
cmp ecx,ebx
jbe @aa
popad
popfd
push X //将会被自动计算并修改为原OEP
ret
end;