您的位置:首页 > 编程语言 > C语言/C++

C++面向对象编程分享----20160301_李楚煌

2016-03-01 20:01 295 查看
再次学习C++,先从一个非常大空的方向来谈(后面会有小小干货):

学习编程,应该先从汇编、C语言这些比较底层的语言入门,还是从Java,Python(甚至是易语言)这些高级语言入门? 坦白说,高级语言和底层语言各有优缺点,以至于不管选择哪个方向入门,只要在踏实地学着,总有自己的一技之长。总好过一直在门口徘徊着,犹豫好久代码没写几行。

这时候,就要打极端:如果一辈子只能用一种语言,你是学汇编、C,还是Java、Python、易语言?

选汇编,面对的是subcmp retn je jnz这些半生不熟的英文,地址是0040D110,数据是16进制的,这些,初次学起来是要花大力气的,不过,你看到的是更全面、更大的世界。毕竟,当你看到i++,++i,a++b,a+b++,感到十分疑惑时,用汇编反编译一下,就能看到编译器隐藏了一些东西,也就容易理解多了。

选C,经常面对的是黑白框框的cmd,排个序都要自己冒泡、插入一些,不是参加ACM的很难有成就感,话说ACM打击更大。可是,C是极少封装的,C可以做的事太多了,学好了它,内力起码是不错的。

选Java,Python,易语言?大堆大堆的函数,长串长串的命名,功能很多,烟花缭乱,像在海边拾着贝壳,很难知道里面什么样。好处多多:容易有成就感,Java写APP,Python架后台,易语言写外挂。

 

其实呢,学哪种语言,都锻炼了逻辑,至于哪个好,都挺好。再次学C++,那C++是一门怎样的语言? 不客气地说,C++集中了上述语言的各种缺点,优点有待体会。

C++上手相对慢,重载,虚函数,抛出异常等等,初学者写出有意思的东西很难,一般还是黑白框框。按理说,这样的语言应该容易看到底层的东西。还不是,它为了安全,各种封装。C++14更是各种语法糖,错综复杂,迷雾弹多多。

 

坦白讲,我是不认为C++应该作为入门语言,甚至入门以后都不应该深入学习C++。大家看看下图:



单就重载中参数的用const,加指针还是引用都分六种不同的情况, 8种使用方法有6种效果。

 

所以,即便我看了侯捷老师的书,知道他编码的风格,我也不会使用inline和const,因为即便在不久的将来,追求这种细致都是不必要的,能够在大的框架下学会C++,会使用C++大多语法,多训练,就挺好了。如果能以C++写一个具体的东西为目标,将会更有成就感和动力。

 

 

下面来一张重载的反汇编截图:

 

 


 

一般我们用软件会出现序列号注册之类的,怎么破?

比如这样:

 




这时候,用OllyDbg打开:



一般windows软件是  从窗口GeTMessage,然后DispatchMessage。

GeTMessage有两个函数: GetDlgItemText(A\W)da, GetWindowText(A\W),

其中A指 ASCLL, W指双字节编码,

 

加载运行:



Ctrl+G快速定位:



 

F2设置断点,



F8往下走:

看到这停:



不确定可以在这里:  esp+0x4C是栈的位置,





此时:



EDX存放用户名,EBX存放字符数:


 

EAX存密码

 

Push EAX EDX EBX,进入00401340函数:



不管这个验证函数,不进入,看它返回值,



test,  eax存放它的返回值,

je作为标志位,如果返回为1,则说明eax返回为0,密码错误:



改:

 


或者该je的值为NOP,

因为je跳转意味着密码错误, 让它不跳转,改为NOP,



 

搞定:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++