请问对程序加密处理时,如何替换if then 语句
请教对程序加密处理时,怎么替换if then 语句?
最近学习加密,在网上查看了不少资料,很多破解的方法都是针对if then 语句之类的,所以想请教一下大家,怎么在程序里替换if then语句,很久没来论坛,只剩最后的30分了.谢谢
比如: var a:integer if a=333 then {允许执行命令} else {返回错误信息}
上面这种结构,可以用什么别的方法来替代嘛?目的就是为了加大破解的难度,当然else后面可以不返回错误信息,这个不是讨论范围,我只是想知道怎么用其他方法来替换if then 语句.希望了解的朋友能指点一下,谢谢了.
------解决方案--------------------
------解决方案--------------------
高级加密需要动态生成机器码,跟踪程序时看到的反汇编是假象,执行到那里时才用真实机器码去替换。这样可以妨碍断点跟踪,只能单步跟踪,很容易跟进陷阱(例如一个大循环)。当然,这样的程序人工写也很麻烦,需要用软件工具。
最近学习加密,在网上查看了不少资料,很多破解的方法都是针对if then 语句之类的,所以想请教一下大家,怎么在程序里替换if then语句,很久没来论坛,只剩最后的30分了.谢谢
比如: var a:integer if a=333 then {允许执行命令} else {返回错误信息}
上面这种结构,可以用什么别的方法来替代嘛?目的就是为了加大破解的难度,当然else后面可以不返回错误信息,这个不是讨论范围,我只是想知道怎么用其他方法来替换if then 语句.希望了解的朋友能指点一下,谢谢了.
------解决方案--------------------
function IsOK(a:Integer):boolean;
Asm
cmp a,333
je Ok
jne notOK
db 34,23,56,67,3,57,54,2,28,67,69,0,4 ; 花指令,用来迷惑反编译器,其实你打些什么都行。。
Ok:mov @Result,1
jmp @Exit
notOK: mov @Result,0
@Exit:
end;
//调用:
if IsOk(a) then
//做什么
else
//不做什么
------解决方案--------------------
高级加密需要动态生成机器码,跟踪程序时看到的反汇编是假象,执行到那里时才用真实机器码去替换。这样可以妨碍断点跟踪,只能单步跟踪,很容易跟进陷阱(例如一个大循环)。当然,这样的程序人工写也很麻烦,需要用软件工具。