有没有办法通过修改内存,伪装机器码,从而降低程序被破解的几率?

1小时前 (07:30:34)阅读1回复0
zaibaike
zaibaike
  • 管理员
  • 注册排名1
  • 经验值189260
  • 级别管理员
  • 主题37852
  • 回复0
楼主

起首,能够那么做,良多加壳东西就是那么做的。

然后解释一下详细怎么做到的:

以intel x86汇编指令做为举例(其它汇编也有对应的模子):

任何反编译东西都是参照了intel给出的汇编建议的模子,好比(e)bp+偏移地址代表部分变量,(e)ax,(e)bx,(e)cx,(e)dx的修改不消考虑庇护,(e)ax是返回值(的前四个字节),然后入栈规则有几个尺度的模子,以VC给出的名字举例:有cdecl体例,参数从右到左入栈,还有stdcall体例,参数从左到右入栈,还有fastcall体例,参数通过存放器传递,等等。尺度模子里,是挪用者筹办栈仍是非挪用者筹办栈都有要求。

所以,若是你的法式不根据那个规则停止,那么他人就很难破解了。可是,法式都是有编译器生成的,而编译器又是必需遵守规则的,而代码若是规模十分大,编译后几百K,那么手打汇编恐怕太困难了。

加壳东西是按照那个原理做的,但究竟结果加壳东西也是有本身的规则的,若是本身设想一套规则,那么任何人都无法破解。

好吧,来设想一个:

此外编译器都用(e)sp来传参,我的汇编用(e)di+偏移地址传参,用(e)si+偏移地址保留部分变量,他人用栈传参,我偏偏用物理地址保留参数。他人用(e)ax做返回值,我用(e)sp做返回值,把所有的call全酿成jmp far,我相信那么改了以后,反汇编东西就很难搞清晰你的法式在做什么了,至于仓库,仓库指针是返回值,必定指向无效数据。

当然,如果实搞出来就很牛了,前概要精通汇编语言,还要精通编译原理,而且开发时间会很长。

若是你有兴趣,能够碰运气~

0
回帖

有没有办法通过修改内存,伪装机器码,从而降低程序被破解的几率? 期待您的回复!

取消