Goldwave-5.7[逆向流程+算法分析]

目标程序:Goldwave 5.7

分析工具:

1.OllyDbg

2.IDAPro

目的:用C语言写Goldwave-5.7的注册机。

0x0思路:

1.注册机准备:

功能:输入用户名后经过计算输出注册码.

函数:需要一个关键的计算函数.

2.实现注册机的计算函数:

计算函数可视为Goldwave的验证注册码函数的反向实现.

那么实现该计算函数的步骤如下:

1.定位关键注册函数.

2.分析关键注册函数.

3.复现关键注册函数.

4.反向复现计算函数.

步骤:

1.通过软件交互关系,定位关键函数.

2.分析关键函数的内部功能实现和逻辑.

3.根据分析内容编写计算函数.

0x1.定位函数

1.1 定位

  可随意输入用户名和注册码尝试注册,从程序的报错信息可以获得一些有用的信息。

  提示错误信息有了,那就可以把Goldwave拖入IDA进行分析。尝试搜索其关键字符串。

1.2 验证

  上图中圈出的分支流程,如果将Jnz指令修改为Jz或Je而导致注册成功,那么就近函数就有可能是我们所需分析的注册函数。

  虽提示注册成功,但重启后还是待注册状态,对于Goldwave的分析得知对于注册码存在二次校验,程序注册后会将序列号写入注册表,每次启动是会调用写入的许可证,进行二次校验。

PS:分析时可以在IDA中导入sig文件、导出map文件有助于动态调式下的分析.

0x2.分析函数

  一般程序在编写的时候至少会遵循功能和逻辑相分离的规范,或者说是函数封装的利用.对于函数应当按照功能和逻辑来拆分,拆分完毕后在对代码逐一分析。

2.1 函数逻辑:

  动态分析时,控制用户名和注册码的输入,跟踪用户名和注册码的变化,可以此来大概了解函数运行的逻辑:

2.2 函数实现:

  这边是利用输入的用户名+注册码完成序列号的后九位的换算。

  之后程序会对用户名+许可证后九位进行一个拼接,写入注册表(HKEY_CURRENT_USER\Software\GoldWave\GoldWave\Options\License)。

  每次开启软件的时候,就会调用注册表的值进行序列号验证,使用的就是下面的函数:

  通过用户名+用户名第8为和第1位计算出新的用户ID

  通过用户名+新用ID换算出序列号的后九位。

  前后两次序列号做比较,如果是相同额那么就是成功。

PS:写入注册表的位置这边就不贴了,获得标记数组的函数调用了不少字典,转来转去的,值得到该怎么形容,有兴趣的可以看看。

0x3.编写函数

DES算法一枚,那就偷个懒在IDA中将伪代码抠出稍作修改填了注册机的坑。

3.1计算函数:

KeyGen源码https://github.com/Schicksal0823/GoldWave_Keygen

有效注册码示例:

User ID: FFFFFFFF

License: E5S8HVFS8

PS:先是通过用户名+注册码换算出序列号的后九位,然后通过用户名+用户名第8为和第1位换算出一个标记数组,再通过标记数组计算出新用户ID,最后通过用户名+新用ID换算出序列号的后九位,两次序列号相同就完成。

0x4.总结:

注册机的编写分大致就可以划分为三个步骤:

1.确认注册函数:

通过注册成功与失败的关键位置,修改关键变量或是修改JCC指令导致流程的改变,判断是否为关键Call.

2.分析注册函数:

通过自定义的输入数据加上函数分析,得出固定用户名对应的注册码.

3.编写注册函数:

通过对于注册函数的分析编写逆向注册函数,根据用户名得到对应的注册码.

原文地址:https://www.cnblogs.com/Schicksal/p/10565140.html

时间: 2024-08-09 16:22:58

Goldwave-5.7[逆向流程+算法分析]的相关文章

逆向-扫雷算法分析

最近思来想去,眼看着自己就要进某厂游戏安全团队实习了,也不能整天的无所事事,所以就寻思着先找点最简单的游戏用来练练手.想到之前逆向过一些小游戏,就把之前分析的扫雷整理了一下啊,写了个外挂,发了上来. 最近实在是比较忙,快期中考试了,什么都不会,所以忙着预习去了,本文只写了关于扫雷逆向的部分,相关的外挂编写已经写差不多了,等最近有时间整理出来o(╯□╰)o 工具 分析对象:winmine/扫雷(windows xp版本) 逆向工具:ollydbg,IDA,peid,ResHacker 操作平台:w

TI(德州仪器) TMS320C674x逆向分析之一

一.声明 作者并不懂嵌入式开发,整个逆向流程都是根据自身逆向经验,一步一步摸索出来,有什么错误请批评指正,或者有更好的方法请不吝赐教.个人写作水平有限,文中会尽量把过程写清楚,有问题或是写的不清楚的地方,后面再慢慢修改. 二.正向开发流程 C语言开发,开发工具使用CCS(Code Composer Studio,基于eclipse开发的),有过开发经验的都会很容易上手,新建test工程,选择C674x,输出文件为ELF格式,如图所示: 编译成功后,会生成test.out文件(ELF格式). 使用

IDA.Pro权威指南 读书笔记

http://www.pediy.com/kssd/pediy12/142766.html 标 题:IDA.Pro权威指南 读书笔记[Made By C_lemon] 作 者:Dstlemoner 时 间:2011-11-14 11:56:17 链 接:http://bbs.pediy.com/showthread.php?t=142766    IDA为反汇编 和逆向破解的 静态分析利器 ! 虽然是利器,但是你不会用的话~那就另当别论了. →     唉.对于刚入门的新手来说,看前人走过的路程

商品分类设计

产品经理必须是分类控,而商品管理的核心,或者说基础就是“分类”,“分类”方法的变迁是整个商品系统变迁的核心. 文/苏杰 你应该在淘宝上买过东西,我们来说说最常见的购物过程: 从某个入口类页面(或广义到产品)开始,经过某种导购过程,到达需要你做交易决策的页面,之后进入交易过程. 入口,最典型的是淘宝首页或某个活动页面,当然,对于一些资深的淘宝买家,他的入口也可能是“我的淘宝”.某个“垂直市场首页”.收藏的某个“店铺首页”,甚至是某些有SNS属性的页面,比如淘宝内部的论坛.帮派,或外部的蘑菇街.美丽

从商品类目到属性

转自:http://www.3lian.com/edu/2013/07-04/78349.html 产品经理必须是分类控,而商品管理的核心,或者说基础就是“分类”,“分类”方法的变迁是整个商品系统变迁的核心. 文/苏杰 你应该在淘宝上买过东西,我们来说说最常见的购物过程: 从某个入口类页面(或广义到产品)开始,经过某种导购过程,到达需要你做交易决策的页面,之后进入交易过程. 入口,最典型的是淘宝首页或某个活动页面,当然,对于一些资深的淘宝买家,他的入口也可能是“我的淘宝”.某个“垂直市场首页”.

Oracle EBS 寄售业务总结

总述: 须通过一揽子采购协议(BPA)明确采购方与供应商之间的寄售关系,及各种协议条款: 通过来源补充规则(Sourcing Rules)明确物料的供应商以及分配规则: 通过合格供应商列表(ASL)明确物料与供应商.供应商地点以及BPA之间的关系,界定该物料向该供应商采购为寄售物料: 使用标准po采购寄售物料: 寄售物料消耗前不产生任何会记分录,但在库存可查到现有量,并参与MRP运算,只是资产拥有方为供应商:当发生消耗时自动根据BPA生成BPR(一揽子发放),BPR不需要接收,系统自动将其发运行

Android"挂逼"修炼之行---微信实现本地视频发布到朋友圈功能

一.前言 前一篇文章已经详细介绍了如何使用Xposed框架编写第一个微信插件:摇骰子和猜拳作弊器  本文继续来介绍如何使用Xposed框架编写第二个微信插件,可以将本地小视频发布到朋友圈的功能.在这之前我们还是要有老套路,准备工作要做好,这里还是使用微信6.3.9版本进行操作,准备工作: 1.使用apktool工具进行反编译,微信没有做加固防护,所以这个版本的微信包反编译是没有任何问题的. 2.借助于可视化反编译工具Jadx打开微信包,后续几乎重要分析都是借助这个工具来操作的. 二.猜想与假设

千万级调用量微服务架构实践

微服务架构在大型电商中的运用电商是促销拉动式的场景,也是价格战驱动的场景.618和双11都是典型的促销活动.其实都是在抢用户.扩市场占有率.在这样的场景之下,对秒杀.抢购是很热衷的玩法. 促销式的拉动对系统的挑战是什么呢? 可以从上图里看到:对高可用性的要求是非常高的,需要99.99%的高可用性.快速迭代对对系统容性的要求很高,从几万单变成几十万单.百万单,架构上不能影响快速迭代,所以有空中加油或者是高速公路换轮胎的说法. 另外,为了应对瞬间的海量访问(尤其是秒杀场景),系统需要高可伸缩(快速扩

TFS线上生成环境发布历程

继前文 TFS在项目中Devops落地进程(上) TFS在项目中DevOps落地进程(下) 自从之前将开发环境使用TFS进行了自动化之后,就享受在此成果中,其他后续进度就停顿了好一段时间. 毕竟在我们这对于开发而言,做出代码交出发布包事情就结束了,而我们的TFS已经完美的将这个流程给自动化掉了. 本文将聚焦在TFS发布到线上生产环境中所做的一些工作和实践,如果只是纠结于如何使用TFS可以参考上面的2个链接. 之前的线上发布流程 说下我们大概的背景,我们的程序上线流程目前还是相对传统一些,大体是: