初识PE结构:简单的越过验证
2016-12-17 22:20
274 查看
重新学习汇编的过程中,偶然的机会接触到了软件逆向的知识,简直是打开一个新大门,让我对汇编和计算机有了新的认识,参照《WINDOWS PE权威指南》中内容,完成了一个小小的破解练习,学会几个逆向常用的工具,整个过程做个记录。
这里对一个网上下载的小软件进行破解,打开时会发现需要注册码,输入错误的注册码时就不能安装软件,并提示注册失败。
我们根据这个错误提示,使用UltraEdit工具,查看.exe文件,查找“注册失败”
我们可以看到,这段字符串的文件偏移地址为0x00081A79。
获取到文件偏移地址后,我们需要获取exe文件被操作系统加载到内存中的地址,文件偏移地址和内存地址通常满足特定的公式可以计算,在这里的计算相对简单:
内存地址=0x400000+文件偏移地址;
即内存地址=0x400000+0x81A79=0x0481A79;
所以内存地址为0x0481A79;
打开OD,载入文件运行,右键查找常量,
输入计算号的内存地址0x0481A79
便得到了指令所在的内存地址0x00405D2D
这时我们要知道程序是如何跳到这个位置的,我们需要通过W32DASM来定位上一个判断语句的指令位置,这个软件相对简单可以使用W32DASM软件直接观察静态分析代码获得,打开W32DASM,载入执行文件,搜索0x00405D2D,在往上不难找到,0x00405CD2的位置便是判断注册码的分支语句:
jg 00405d11
如果大于就跳转到失败的位置,我们只要让它别跳到失败的位置,直接运行到下一条指令,便能绕过验证码的过程
以上改成jg 00405cd8
打开OD,载入软件运行,搜索命令405D11
找到指令后双击,修改为JG 00405cd8,一定要勾选使用NOP填充,因为修改后的指令与原来的指令长度可能不一致,为了不改变整个EXE文件的结构和大小,最好使用NOP填充,点击汇编。
右键复制到可执行文件,选择。
右击保存文件
再运行就OK了^ ^V。
这里对一个网上下载的小软件进行破解,打开时会发现需要注册码,输入错误的注册码时就不能安装软件,并提示注册失败。
我们根据这个错误提示,使用UltraEdit工具,查看.exe文件,查找“注册失败”
我们可以看到,这段字符串的文件偏移地址为0x00081A79。
获取到文件偏移地址后,我们需要获取exe文件被操作系统加载到内存中的地址,文件偏移地址和内存地址通常满足特定的公式可以计算,在这里的计算相对简单:
内存地址=0x400000+文件偏移地址;
即内存地址=0x400000+0x81A79=0x0481A79;
所以内存地址为0x0481A79;
打开OD,载入文件运行,右键查找常量,
输入计算号的内存地址0x0481A79
便得到了指令所在的内存地址0x00405D2D
这时我们要知道程序是如何跳到这个位置的,我们需要通过W32DASM来定位上一个判断语句的指令位置,这个软件相对简单可以使用W32DASM软件直接观察静态分析代码获得,打开W32DASM,载入执行文件,搜索0x00405D2D,在往上不难找到,0x00405CD2的位置便是判断注册码的分支语句:
jg 00405d11
如果大于就跳转到失败的位置,我们只要让它别跳到失败的位置,直接运行到下一条指令,便能绕过验证码的过程
以上改成jg 00405cd8
打开OD,载入软件运行,搜索命令405D11
找到指令后双击,修改为JG 00405cd8,一定要勾选使用NOP填充,因为修改后的指令与原来的指令长度可能不一致,为了不改变整个EXE文件的结构和大小,最好使用NOP填充,点击汇编。
右键复制到可执行文件,选择。
右击保存文件
再运行就OK了^ ^V。
相关文章推荐
- 初识树结构,简单模拟无规律的二叉树,实现二叉树的构建,计算树的深度以及三种遍历方式以及搜索删除,销毁整个树
- 比特币区块结构Merkle树及简单支付验证分析
- 【EXE PE】初识pe结构--手写可执行程序
- 比特币区块结构Merkle树及简单支付验证分析
- 比特币区块结构Merkle树及简单支付验证分析
- 初识pe结构--手写可执行程序
- 比特币区块结构MERKLE树及简单支付验证分析
- 32位简单标志结构SimpleBitVector32
- 早就想简单说说: 关于树型结构的存储及维护
- 学习PE文件格式后编写的简单代码(C代码)
- VBScript与窗体 简单验证
- 删除内存树结构的时候,千万注意内存泄漏问题,采用递归比较简单。
- 内建于XML Schema的简单类型有44种。他们在XML Schema推荐标准的第二部分中公布,下面这是一张内置类型的层次结构图
- 简单javascript验证 外加焦点改变
- PE文件结构图解,比较牵强,仅为学习笔记,高手见笑
- 用SHA1或MD5 算法加密数据(示例:对用户身份验证的简单实现)
- 树型结构在ASP中的简单解决
- [原创]简单描述3层结构设计
- 身份证18位验证及15位升18位的代码,挺简单的,初学者可以看一看....
- PE学习之-最简单的程序