有没有办法通过修改内存,伪装机器码,从而降低程序被破解的几率
首先,可以这么做,很多加壳工具就是这么做的。然后解释一下具体怎么做到的:以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,我相信这么改了以后,反汇编工具就很难搞清楚你的程序在做什么了,至于堆栈,堆栈指针是返回值,肯定指向无效数据。当然,要是真搞出来就很牛了,前提要精通汇编语言,还要精通编译原理,并且开发时间会很长。如果你有兴趣,可以试试看~
■网友
是存在的。到达同一种效果有n种方法。但前提是你得搞清楚od是如何获取堆栈的。这很重要。
推荐阅读
- 船舶■江苏镇江谏壁船闸2020年船舶通过量近2亿吨
- 红米手机通过QQ空间的成功营销,给涉足社会化营销的企业有哪些启示
- 知乎有没有必要增加一个特别关注功能
- 商家通过低保户购物而把自己的利润返还赠送低保户安装宽带或者旧电脑可行吗
- 疾病|医生不避讳:4种疾病可以通过性传播,思想开放的人要小心了
- 趣头条|幻影提车小记…有没有车主群加一个
- 基因是主动表达还是受某种场的影响被动表达,又或两者都有有没有隔绝所有电磁场来研究基因表达的实验
- 有没有网站能够搜出我给的类似风格图片的网站
- 有没有突如其来很好的小创意
- 上海或苏州有没有比较好的大数据培训机构
