X86逆向4:VMP壳内寻找注册码
本节课将讲解一下重启验证,重启验证在软件中也是非常的常见的,重启验证的原理很简单,用户在注册界面输入注册码以后程序会自动将输入的注册信息保存到配置文件中,这里可能保存到注册表,也可能使用INI文件来保存数据,然后程序会强制重启,在程序的启动环节读入文件或注册表,然后完成整个验证的过程,最后决定是否注册完成,下面作者编写了一个重启验证的小程序,并使用VMP加密了整个软件,本节课我们将在不脱壳的情况下寻找程序的注册码,最后完成注册。
有些新手认为,壳是必须要脱掉的,其实不然,我们完全可以在不脱壳的情况下寻找注册码,因为程序运行后程序会在内存中被解码,只是我们无法直接修改源程序,当然如果真的需要修改的话可以直接给内存打一个补丁,API Hook 下,同样的可以完成破解任务,没有必要在壳上纠结。
------------------------------------------------------------
本章难度:★★☆☆☆☆☆☆☆☆
课程课件:CM_04.zip
------------------------------------------------------------
1.直接将程序载入OD,并运行起来看下反汇编窗口,可以看到代码已经被VM了,而且很乱单看这些根本无从下手。

这里我们需要想一下,既然是重启验证,那么在程序开始运行时就应该来判断用户注册码是否正确,这里我们的的程序是通过INI文件来验证的,INI文件的读写流程是什么?肯定是先打开文件,然后读入文件,然后才会判断是否合法,这就是正常的流程。
2.流程有了,接下来我们就得想办法让程序停在读取INI文件的代码位置,这里我们将学习一个新的API断点GetPrivateProfileStringA,这个断点就是专门用来读取ini配置文件的。
这里需要重新载入程序【不要运行】,因为运行后程序就已经判断完成了,直接点击【ini文件】,点击【GetPrivateProfileStringA】,下好断点。

3.下完断点之后,我们直接【F9】运行程序,如我们所料,程序断下了看右下角的堆栈窗口,注册项:key:section都出现了,这里段下的是第一次读取配置文件,这里读取到的是文件中的第一个字段的内容也就是,config.ini文件里的user字段的内容,这个字段默认就是lyshark,我们不用管直接跳过。

4.回到OD中,再次按下【F9】,程序在一次被断下,老样子看堆栈,这次读取到的就是注册码的字段了,也是我们最关心的字段。
为了让新手明白,程序编写的很简单只有两个字段的内容,所以只会断下两次,再按一次运行程序就跑起来了,以后如果在你破解的其他程序时遇到断下十几次或几十次的情况不要慌,慢慢跟看看有没有自己需要用到的字段内容,这说明程序在读取config.ini这样的配置文件,而配置文件中的字段较多,需要一个一个读取,所以会不停地被断下。

5.回到OD,单步【F8】直接出这个CALL,第一张图为进入CALL的断首,第二张为出CALL.


6.出CALL后,会发现一堆DB数据,这是OD自动的帮我们分析了代码,所以留下了一堆DB。

7.直接打开【右键】菜单,选择【分析】,然后【从模块中删除分析】,原始的代码就会出现了。

8.删除分析代码后发现,会看到下面的代码片段,左下角是我们输入的假的注册码,网上找并没有能跳过的CALL,所以果断出这个CALL.

9. 出CALL后,观察这一层代码太短了,直接无需考虑,直接出CALL.

10.这次出CALL发现了一些意想不到的收获,看到了配置文件名称,已经开始读取了。

12.上图我们看到了,程序应该是已经读取了config.ini这个配置文件,接下来应该就是对比了,我们单步【F8】尾随一下。

如上看到了一段特殊代码,然后后面就是注册成功的提示,我们直接把这个注册码记下来。
00482CC4=00482CC4 (ASCII "1E32S-14ES5-2KT84-EM6LS")
13.关闭OD吧,我们直接去试一下看能不能激活这个程序,上方的大跳转虽然是关键跳但我们无法直接修改程序代码,因为有壳。

重启程序后发现注册完成,说明我们找的没错,这个小程序并没有通过机器码计算出注册码是为了让新手能够清晰的找到,我们主要学习的是INI断点的用法。
这个案例中虽然程序加了VMP强壳,但是我们在没有动壳的情况下依然顺利的找到了注册码。
写教程不容易,转载请加出处,您添加出处,是我创作的动力!
X86逆向4:VMP壳内寻找注册码的更多相关文章
- shark恒破解笔记1-壳内寻找注册码
记录学习shark恒大教程的学习记录 壳内寻找注册码 OD打开 明显有壳 F9先运行程序 2.Ctrl+G输入401000到解码段,如果出现db ** 说明已经解码过,脱离了程序本身的壳 鼠标右键-& ...
- 第四课 VMP壳内爆破
这一课用来演示的软件是文件巴士. 打开网页一搜索,可笑的是搜索到的结果都是破解版,想找个原版的倒费劲了. 好容易找到一个,下好一查壳,还没有... 行吧,自己加一个VMP壳开搞. 第一步 OD载入程序 ...
- X86逆向15:OD脚本的编写技巧
本章节我们将学习OD脚本的使用与编写技巧,脚本有啥用呢?脚本的用处非常的大,比如我们要对按钮事件进行批量下断点,此时使用自动化脚本将大大减小我们的工作量,再比如有些比较简单的压缩壳需要脱壳,此时我们也 ...
- X86逆向14:常见的脱壳手法
本章节内容将介绍软件的脱壳技术.什么是加壳?加壳就是用来压缩或者保护软件不被非法修改破解的一种工具,而脱壳就是将已经加壳的程序从壳中剥离出来,既然能给程序进行加壳,那也就会有相应的脱壳方法,本节课我们 ...
- X86逆向12:内存补丁的制作
本章我们将学习各种打补丁的方式,补丁在软件的破解过程中非常的重要,比如软件无法脱壳我们就只能通过打补丁的方式来破解程序,补丁原理就是当程序运行起来会被释放到内存并解码,然后补丁就通过地址或特征码定位到 ...
- X86逆向3:通过修改关键CALL破解
软件逆向第一课中我们通过爆破的方式直接破解了程序的登录限制,但这一种方式很不合理,因为你只是破解了登录这一处的验证,如果程序内部还有其他的验证那么你需要再次爆破第二个验证,显然这种方式是很烦人的,如果 ...
- X86逆向1:软件破解入门课【课件下载】
从本节课开始,我将带领小白入门学习软件破解的相关内容,大佬绕过,以后将会定期更新从最基本的破解知识点开始学习,由简单到复杂循序渐进,难度会逐步提高. 为了防止版权方面的争议,我将自行编写一些破解案例来 ...
- X86逆向10:学会使用硬件断点
本节课我们将学习硬件断点的使用技巧,硬件断点是由硬件提供给我们的一组寄存器,我们可以对这些硬件寄存器设置相应的值,然后让硬件帮我们断在需要下断点的地址上面,这就是硬件断点,硬件断点依赖于寄存器,这些寄 ...
- X86逆向8:向程序中插入新区段
本节课我们不去破解程序,本节课学习给应用程序插入一些代码片段,这里我就插入一个弹窗喽,当然你也可以插入一段恶意代码,让使用的人中招, 这里有很多原理性的东西我就不多罗嗦了毕竟是新手入门教程,如果想去了 ...
随机推荐
- C#_选择结构,Console的应用,数据类型转换
1:先看一个顺序结构编程,代码如下: using System; using System.Collections.Generic; using System.Linq; using System.T ...
- 安装docker以及常规操作
一.安装 docker对内核版本是有要求的,反正建议用7以上的版本,少坑 如果需要卸载旧版本(凡是卸载删除操作都要谨慎!): yum remove docker \ docker-client \ d ...
- 后盾网lavarel视频项目---Vue项目使用vue-awesome-swiper轮播插件
后盾网lavarel视频项目---Vue项目使用vue-awesome-swiper轮播插件 一.总结 一句话总结: vue中的插件的使用和js插件的使用一样的简单,只是vue插件的引入过程有些不同 ...
- HearthBuddy遇奥秘解决方法
https://tieba.baidu.com/g/5808796816 链接: https://pan.baidu.com/s/1NPQTOfxbN_4alP7J-XWuVw 密码: xfj1
- 自定义vue-cli生成项目模板配置(1)
最近在读<变量>,目前得到的认知之一:慢变量才是决定事物长期发展的因素. 打算自定义vue-cli的脚手架或者根据自己的需要设置项目模板的相关参数,很大程度与慢变量这个概念相关. 当然,我 ...
- Hander创建消息
每一个消息都需要被指定的Handler处理,通过Handler创建消息便可以完成此功能.Android消息机制中引入了消息池.Handler创建消息时首先查询消息池中是否有消息存在,如果有直接从消息池 ...
- 如何打开DOS控制台
A:xp下如何打开DOS控制台? a:开始--程序--附件--命令提示符 b:开始--运行--cmd--回车 c:win+r--cmd--回车 B:win7下如何打开DOS控制台? a:开始--所有程 ...
- AOP获取方法注解实现动态切换数据源
AOP获取方法注解实现动态切换数据源(以下方式尚未经过测试,仅提供思路) ------ 自定义一个用于切换数据源的注解: package com.xxx.annotation; import org. ...
- [CDH] Acquire data: Flume and Kafka
Flume 基本概念 一.是什么 Ref: http://flume.apache.org/ 数据源获取:Flume.Google Refine.Needlebase.ScraperWiki.Bloo ...
- Linux新增开放端口
CentOS系统 开放端口的方法: 方法一:命令行方式 1. 开放端口命令: /sbin/iptables -I INPUT -p tcp --dport 8080 -j ...