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:向程序中插入新区段
本节课我们不去破解程序,本节课学习给应用程序插入一些代码片段,这里我就插入一个弹窗喽,当然你也可以插入一段恶意代码,让使用的人中招, 这里有很多原理性的东西我就不多罗嗦了毕竟是新手入门教程,如果想去了 ...
随机推荐
- [CTS2019]珍珠——二项式反演
[CTS2019]珍珠 考虑实际上,统计多少种染色方案,使得出现次数为奇数的颜色数<=n-2*m 其实看起来很像生成函数了 n很大?感觉生成函数会比较整齐,考虑生成函数能否把n放到数值的位置,而 ...
- 在CSS中水平居中和垂直居中:完整的指南
这篇文章将会按照如下思路展开: 一.水平居中 1. 行内元素水平居中 2. block元素水平居中 3. 多个块级元素水平居中 二.垂直居中 1. 行内元素水平居中 2. block元素水平居中 3. ...
- 对String的内存解析
@Test public void stringTest(){ /* * str1和str2地址指向字符串常量池 * 解析: str1 在字符串常量池中创建出java 地址例如为:0x456 * st ...
- jQuery显示隐藏div的几种方法
1.$("#demo").attr("style","display:none;");//隐藏div $("#demo" ...
- java错误与异常
java异常处理机制 异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常, 让程序尽最大可能恢复正常并继续执行,且保持代码的清晰.Java中的异常可以是函数中的语句执 ...
- jmeter 执行python脚本的方法 。(亲测ok)
jmeter 执行python脚本 jmeter 可以通过Jython 执:行python代码 1.下载Jython jar包:http://www.jython.org/downloads.ht ...
- openstack compute service list Unable to establish connection to http://controller:8774/v2.1/os-services: ('Connection aborted.', BadStatusLine("''",))
8774是nova的端口号,所以我就逐一查看nova的日志文件. tail -f /var/log/nova/nova-conductor.log 2019-06-13 08:24:53.559 44 ...
- Linux学习—rpm包管理
前言 在linux上,一个软件通常由二进制程序,库文件,配置文件和帮助文件组成.其中: 二进制程序一般都放在/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin和/ ...
- 解读GitHub EntityComponentSystemSamples
出自Unity官方的ECS项目示例,该项目的第一次Commit是在2018年3月20号,距离现在一年半的时间,这期间ECS本身的生态在快速发展,稳定性也是逐步提升,期待在2020年的Unity版本中作 ...
- docker部署jar、war包方法
一.将war包放入容器 1.# docker imagesREPOSITORY TAG IMAGE ID ...