吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 5527|回复: 35

[原创逆向图文] 浅谈反汇编分析,某软件为例

  [复制链接]
余音绕梁 发表于 2016-2-16 14:50 | 显示全部楼层 |阅读模式

先废话不多说,上软件演示下 1.png
现在显示的是未授权,点下激活按钮试试
2.png
我们登录邮箱,我暂时就不登陆,可以点否。
3.png
啊哟,显示注册码并不正确
现在这啰嗦几句,如果你不会,把软件载入OD 或者 查下软件有没有壳 还有啥其他的细节 请在下方回帖,我知道可能一个细节让你找很多天或者让你困惑很久,知识不能有残缺或者盲点,如果你不会,请一定回帖!!!


先来查下壳
4.png
VC++6.0后面还带个括号,先不管,反正是没壳


那就载入OD查一下字符串吧,选择智能搜索。
5.png
Ctrl+F 6.png
输入 “ 授权码 ”
7.png
发现找不到。。。。


那就换种方法吧
8.png
单机箭头所指的选项。
9.png
把钩都点上,然后点确定。
为什么要钩上这几个?我钩别的不行吗?钩上了有什么用?
刚才在点激活的时候,软件不是弹出一个页面说授权码错误吗?
在windows中那叫MessageBox  API函数,至于上面钩上面后面都带了A W 或者EXA EXW 那暂时先不管,嘿嘿
有什么用我们再去激活软件试试
10.png
发现软件暂停了,而右边寄存器窗口显示的,就是提示我们没有登录,好暂时先不管,按下键盘的F9 或者点那个三角形的图标那个按钮运行起来。(三角形按钮就在暂停的右边)
可能会出现点一下运行他还没有出来提示你登录邮箱的界面这时候多点几次运行就行了。
接下来它就提示你 登录不登录邮箱,点否!
11.png
然后发现软件又暂停了。
12.png
看见没,右边的寄存器窗口的字符串就是等下要出来提示你错误的信息。
这时候在右下角的CALL到什么什么的那个位置先单击选中,然后右键选择反汇编窗口跟随
13.png
此时有个问题为什么要那个地方右键 反汇编跟随呢?
先说一下MessageBox是一个API函数对吧,函数是由一些基本命令来组成的,那么在汇编中怎么表示是个什么样的呢?
它是call 加上一个地址 比如 call 0x00123456 call就是程序调用的函数,说了这么多跟反汇编窗口跟随有什么关系啊!?
其实不然,call 的原理是 esp 会减去4 然后 esp的内存会存储着当前EIP+当前指令的长度,相加的结果就等于下一个指令的长度,然后EIP就会=00123456 也就是call 后面的那个地址,此时ESP存着的就是下一个指令的地址。
eip就是程序当前执行的位置。
我知道此时可能有人懵了,没关系没关系。我来举个例子!
今天早上我要去找朋友去外面玩 (有顺序的行走暂时还没有倒退)  然后我看到前面有一家肯德基,口馋了想去吃(这就好比程序遇到了call ),结果我摸了摸口袋没钱,(这就好比我不知道注册码,但是我想体验正版的功能)
万般无奈之下,看见前面墙角有个绿色的纸,于是我过去一看,啊50块,有钱吃了!我先把自行车停到外面(这就好比 esp-4 然后 esp=我下次要出来的地方) 我兴高采烈拿着钱去了肯德基里面(这就好比程序进了call了 这次call上的是肯德基)我高高兴兴的吃了一顿之后我出来了(call走完了该出来了),于是我骑上自行车继续去找朋友去玩.
说了这么多聪明的你应该懂了吧大致的意思吧
然后呢在返回的地方下个断点,怎么下断点 双击一下箭头所指的地方就行了或者F2
14.png
然后点这个b
15.png
为什么要点这个啊? break 断点的意思
16.png
把7开头的全部删除,因为我们找到更近的断点了。
什么更近 啥意思?为什么要删除7开头的 ???
就目前楼主就见过 6 7 开头的地址 而 大多数程序也这样的
6  7  开头的都是系统领空  那个MessageBox 不就是调用系统的API吗 执行MessageBox也就执行到了系统领空去了,windows自带的。
更近 也就是说我们当前找到的地址位置离 程序判断注册是否正确 很近 意思是说系统领空不近咯?
我自己给自己出问题纠结死了
好了,然后再点运行或者按F9 再次尝试激活
17.png
然后点击确定!
18.png
发现暂停下来了,仔细一想好像不对啊,是不是应该让错误提示弹出来之前就让程序暂停下来啊,想这样的话程序已经判断完了啊,所以现在应该出这个call  不吃了肯德基了我要走了嘿嘿{:5_121:}
按F8单步 一直执行到ret这个指令这儿来
19.png
然后在 ret 这个指令上再按一次F8出call  
ret 是 返回的意思 返回到哪儿? 返回到内存esp里的地址里 然后esp会自加 加多少啊 一般都是加4,所以call和ret是一起出现的,再复习下 进call的时候 esp会存储存下一条指令的地址然后自己减去4 此时eip就等于 肯德基
吃完了要返回该走了  这时候eip=[esp](自行车) 括号代表内存的意思,好了应该明白了吧。
出call了以后向上面看,看有没有能过跳过当前自己位置的指令,我看不懂英文但是会知道一点套路吧,判断有错误也就会有正确,现在我们执行的是注册错误的代码,那么肯定就有正确的咯,正确与错误不久是判断吗,判断啥?判断你输入的是不是和程序它自己运算出来的一样,所以我们向上找找看有没有判断 !
20.png
果然找到了看见左边红线了没有,那就代表跳转。
好双击或者F2下个断点
再次去注册
21.png
发现程序暂停了,线成了灰色的
好F8单步向下走。
22.png
执行到这个跳转来发现 eax=0 跳转成立,而已上面还有个 test al al  mov eax,dword ptr ds:[0x855C34] 还有个call 为什么只看这几个不看其他的 ? 因为它离判断最近!!!
好,那么问题来了,这几个有什么用啊?这几个指令影响条件是否成立,一定有用。
那它先call 什么的 再 mov什么的 然后再test什么的 都是什么意思啊?
call 这里面就是命令之间的运算
mov eax,dword ptr ds:[0x855C34] 这个命令什么意思啊??
mov 移动的意思   eax 寄存器(存放数据的容器就叫寄存器) ptr 取地址 ds 数据段段寄存器 0x855c34 常量
dword 4个字节的意思
连起来就是说 把长度为4字节的0x855c34这个地址的数据移动给eax
打个比方,有10个仓库分别编号是 1~10
现在把1号仓库里面的东西给2号就是相当于mov 2号仓库, dword ptr ds:[1号仓库]
如果不加 ptr ds        这样 mov 2号仓库,1号仓库
就代表把1号仓库的名字给2号仓库!
聪明的你懂了吧。
最后一个比较 test al al   虽然我不懂test具体用处但是知道大慨,就是比较两个数 如果都等于0结果就是0 如果一个是1一个是0 计算的结果为1 都是1运算的结果也为1。
al 是8 位寄存器中的第一个寄存器
字节是什么东西啊?那 eax 后面不是有8位数 那又是什么意思呢?
计算机的运算机制为2进制 设计者为了容易看懂就用8个二进制数代表一个字节,为什么用8位代表一个字节?
问老外吧,我也不知道为什么。
在反汇编中大多数都是用16进制来表示的,1个十六进制数 就是 4个二进制数组成的 那么两个十六进制数就是一个字节了
al是占后两位也就是一个字节
现在程序拿它来作比较了,现在eax=0 比较肯定对我们不利!!!
eax为什么会是等于0  ??
不就是 Mov dword ptr ds:[0x855c34] 这个常量数据地址的值给eax的吗?
好,我们找下 这个常量地址的数据到底是多少!!!!

23.png
来到左下角这个窗口,按下ctrl+G
把常量粘贴到上面去,然后回车
24.png
看见没有数值为0,接下来选中这一行右键
25.png
选择 word 好像byte也行嘿嘿。
word 就是两个字节 byte就是一个字节 dword 就是 双字 两个 word 也就是4个字节
先点b 删除所有断点,放心硬件断点不会消失
好了F9运行程序,再次激活
运行过后发现
26.png
看见没有
程序要给这个常量一个0 能让他给0吗?嘿嘿
改成1
27.png
然后点汇编
再复制到可执行文件
28.png
选择所有修改
30.png
31.png
32.png
好了程序到这里就结束了,下次再见!
上面如果有讲的不好的地方请回复指出来
在另外啰嗦几句
只要看得懂26个英文字母 有一定的逻辑能力(不要求很高),会乘法口诀表 会-999999999999~999999999的加减乘除运算,看得懂中文,知道意思,就可以学得会了啊,嘿嘿。{:5_121:}

评分

参与人数 30威望 +1 HB +60 THX +21 收起 理由
lies + 1
虚心学习 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
sjtkxy + 1 + 1
24567 + 2
Jawon + 1
消逝的过去 + 2
agan8888 + 1
yexing + 1
l278785481 + 1
liugu0hai + 1 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
三月十六 + 1
挖藕 + 1
ghostxu + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
叶落花开 + 1
hnymsh + 1
matter + 1 + 1 受益了,看得出来楼主的用心
z14p6 + 1 + 1 牛逼,详细
wswwj + 1 + 1 吃水不忘打井人,给个评分懂感恩!
刀口以后 + 1 + 1 写的很好,这样讲更清楚了。对逻辑运算有点迷糊。
crackfans + 1 + 1 分析很详细
学一学丶 + 1 + 1 祝学破解论坛全体成员2016年开心每一天!
lgyhehehe + 2 + 1 祝学破解论坛全体成员2016年开心每一天!
Bu弃 + 3 + 1 评分=感恩!简单却充满爱!感谢您的作品!
逍遥枷锁 + 3 + 1 祝学破解论坛全体成员2016年开心每一天!
zby03772015 + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
小九 + 2 + 1 精彩
Shark恒 + 1 + 20 + 1 能看出楼主真的是用心在教大家,我代表全体成员感谢楼主!
lwh15524868334 + 3 + 1 祝学破解论坛全体成员2016年开心每一天!
剑不会断的 + 2 + 1 谢谢lz; ,最后一点评分给你了
Mrsin + 5 + 1 祝学破解论坛全体成员2016年开心每一天!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Zixue 发表于 2016-2-16 14:54 | 显示全部楼层

沙发先带着

评分

参与人数 1HB +1 THX +1 收起 理由
努力奋斗战五渣 + 1 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
剑不会断的 发表于 2016-2-16 14:59 | 显示全部楼层

板凳我的.
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
lwh15524868334 发表于 2016-2-16 15:05 | 显示全部楼层

本帖最后由 lwh15524868334 于 2016-2-16 15:08 编辑

esp会减去4 eip等于 肯德基 ,完了要返回该走了  这时候eip=[esp](自行车) ,我看到前面有一家肯德基,口馋了想去吃,,,,,,

我一共吃了三次肯德基


喜欢这种教学方式,不说了我去吃肯德基
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Shark恒 发表于 2016-2-16 15:37 | 显示全部楼层

能看出楼主真的是用心在教大家,我代表全体成员感谢楼主!祝2016一切顺利!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
忧伤丶 发表于 2016-2-16 15:42 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
小九 发表于 2016-2-16 15:52 | 显示全部楼层

先留个名先。
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
千千万是福朋友 发表于 2016-2-16 15:58 | 显示全部楼层

很好,喜欢这种讲得事无具细的教程,适合新手学习
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
蓝色贝雷帽 发表于 2016-2-16 16:15 | 显示全部楼层

楼主牛X,这教程适合我这样的新手学习
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
zby03772015 发表于 2016-2-16 16:25 | 显示全部楼层

太刁了!然而很多都不懂。。。。
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表