从一个简单的C++小程序入手 站在汇编角度C++程序的条件判断语句

在当下,如果还能熟练地用汇编写程序的人怕是会被当成怪人来对待(我之前公司就有一个用汇编程序的),即使是研究逆向的人大部分也只能说看得懂汇编,很少有人敢说他精通汇编的。
如果是做开发的话,我也觉得汇编确实也没什么用。  “简单”既是汇编的优点,同时也是它的缺点。就是因为它的确太“简单”了,所以,要实现一个很简单的功能也需要很多的代码。  有时候我看到一大段的汇编代码也感觉很头疼,但是由于业务需要,让我不得不研究一波高级语言在底层的实现过程,所以就写了这么一篇文章。   我们先从一个简单的c++小程序入手:
这个程序功能很简单,就是输入一个整数,然后判断它是不是和123456相等,如果相等就输出you are right,如果错误就输出you are wrong。
然后把生成的exe文件利用反汇编工具再还原成汇编语言。
上面这张图是程序的开头部分。
而这张图是结尾部分。
可以看到,这个程序的起始地址是00fa1000而结束地址是00fa2ff。也就是说,要实现这么一个小小的功能,要用到几千行汇编代码。如果大家都这么开发,怕是累死也写不出个啥。
不过这里面的大部分代码都是编译器帮我们生成的,真正执行判断操作的代码大概就只有下面这几行。
我先是在命令行里面输入了123,在00fa1082处下了一个断点,然后回车,程序就断下来了。
关键的判断操作就是 cmp dword ptr ss:[ebp-0x8],0x1e240
这个操作的意思是,把0x1e240这个数和内存里面地址为[ebp-0x8]的数据进行比较。
0x1e240转换为10进制可以看到就是123456,也就是触发you are right的整数。
从右边的寄存器窗口可以看到寄存器ebp的值为00cffb48,则[ebp-0x8]=00cffb40
从数据窗口可以看到00cffb40处的值为7b。
转换成10进制刚好为123,也就是我刚才输入的数。
如果两者相等的话,则会把zf标志位置为1,若不相等,zf位为0。
现在可以从右边的寄存器窗口看到,zf位为0,则jnz跳转就成立,从而跳过you are right而去执行you are wrong。
到了最后,在00fa10ae处的指令是jmp short project1.00fa1060。jmp是无条件跳转指令。这条指令执行会跳回到刚开始要求用户输入整数的操作,相当于实现了while的功能。
现在假设这个程序是个付费软件,要求用户来输入一个密钥来解锁软件。如果我让这个if条件恒成立,那么我就能实现在不知道密钥的情况下来使用这个软件。
在反汇编窗口里面,只需要把jnz short project1.00fa10a1 全部用nop代替就完全,就可以直接忽略掉cmp dword ptr ss:[ebp-0x8],0x1e240对zf位的影响,从而直接执行you are right。
也就是说,我随便输入一个值,程序都会给我返回you are right。
事实上,不光是c++,绝大部分高级语言在底层都是这么实现判断的。所以,为了防止写个软件出来老是被人白嫖,研究一下在底层判断语句是怎么实现的还是很重要的。
最简单的防白嫖手段就是加壳。尤其在是这种关键跳转的地方一定要使用加壳工具进行保护,防止被别人轻而易举地就定位到关键跳的位置。
其次就是加花指令,这个方法的本质就是构造恒成立跳转,增加一些没用的跳转,既不对程序本身造成影响,也可以干扰别人对关键跳转的判断。
最最无敌的一种办法就是用网络验证。尽管这也不能保证百分之百不会被白嫖,但确实是非常有效的而且相对容易的办法了。不过它的缺点就是,如果服务器崩了,软件就不能运行了,这对于用户来说是无法接受的。
在技术上的对抗永远是在底层,并且是没有尽头的。现实往往又是道高一尺魔高一丈,而正是在这种矛与盾的攻防较量中,技术才不断地向前发展,才能为客户提供更为安全,可靠,便捷的服务。

原文标题:站在汇编角度c++程序的条件判断语句
文章出处:【微信公众号:strongerhuang】欢迎添加关注!文章转载请注明出处。

现代数字化医疗设备于临床中的应用
区块链技术可以改善金枪鱼的可追溯性,用于打击非法捕鱼
如何通过工业物联网网关实现远程控制PLC设备?
绕组变形测试仪的使用注意事项
北京镓和首次发布4英寸面氧化镓单晶衬底参数并实现小批量生产
从一个简单的C++小程序入手 站在汇编角度C++程序的条件判断语句
三安光电发布今年一季报 销售收入19.45亿元 同比下降2.26%
iPhone8诚意十足,廉价版仅售3000元!
LinkSAT解决Ka高通量卫星互联关键技术,卫星通信的5G时代来了
移动芯片在全球竞争中变局_本土芯片厂商展开“逆袭”
大连fm频道列表
索尼与本田新品牌“AFEELA”亮相,安装45个摄像头和传感器
三星A9s人像效果体验评测 效果到底怎么样
中兴将量产基于Marvell芯片的EPON产品
探讨2018 PCB产业IPO情况
上门维修心得谈
微模块数据中心为顶级帆船赛事提供可靠的信息化平台
应用笔记:正确理解驱动电流与驱动速度
1ED3124MU12F单通道隔离栅极驱动器的特征及应用优势
中国移动如何构建更好的专利生态环境