请教对程序加密处理时,怎么替换if then 语句?

xinxinshou2009 2013-02-17 08:09:25
最近学习加密,在网上查看了不少资料,很多破解的方法都是针对if then 语句之类的,所以想请教一下大家,怎么在程序里替换if then语句,很久没来论坛,只剩最后的30分了.谢谢

比如: var a:integer if a=333 then {允许执行命令} else {返回错误信息}

上面这种结构,可以用什么别的方法来替代嘛?目的就是为了加大破解的难度,当然else后面可以不返回错误信息,这个不是讨论范围,我只是想知道怎么用其他方法来替换if then 语句.希望了解的朋友能指点一下,谢谢了.
...全文
351 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
静_海 2013-02-17
  • 打赏
  • 举报
回复
高级加密需要动态生成机器码,跟踪程序时看到的反汇编是假象,执行到那里时才用真实机器码去替换。这样可以妨碍断点跟踪,只能单步跟踪,很容易跟进陷阱(例如一个大循环)。当然,这样的程序人工写也很麻烦,需要用软件工具。
xinxinshou2009 2013-02-17
  • 打赏
  • 举报
回复
引用 5 楼 HSFZXJY 的回复:
Delphi/Pascal code?1234567891011121314151617function 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 @Re……
谢谢你的解答,调用的时候还是使用了if then语句,不过比起原始的要好一些了.刚才我百度了一下相关的代码,看到有个例子如下: Function IIF( lExp:boolean; vExp1,vExp2 : variant) : variant; overload ; begin if lExp then Result := vExp1 else Result := vExp2 ; end; 调用: Edit1.Text := iif( Button1.visible, '可见', '不可见' ) ; 应该也是类似的吧
hsfzxjy 2013-02-17
  • 打赏
  • 举报
回复

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
  //不做什么
xinxinshou2009 2013-02-17
  • 打赏
  • 举报
回复
我在看一些网上的文章时,上面提到一些提高破解难度的方法,其中就说到这个if then语句,说是尽量不用这种如果语句,换用别的替代,可我知识有限,实在想不出能有别的办法替代的,因此才来向大家请教
xinxinshou2009 2013-02-17
  • 打赏
  • 举报
回复
引用 1 楼 HSFZXJY 的回复:
没听懂,这个加密如何工作?
比如某个地方需要密码才能执行某段代码,而这个333就是密码,只有输入正确才能执行后面的代码,否则就不执行.但是if then语句很容易成为破解者的突破口,别人只要反编译后,修改跳转指令,于是,程序就被修改,当输入其他任何不是333的数值时,都可以执行代码,而输入正确的333后,反而执行不了代码了.
JPEXE 2013-02-17
  • 打赏
  • 举报
回复
hsfzxjy 2013-02-17
  • 打赏
  • 举报
回复
没听懂,这个加密如何工作?

16,747

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧