逆向分析一款国外Blackjack Card Counter软件并附上License生成脚本
没有学过逆向,一时兴起,搞了一下这个小软件,名为“逆向分析”,其实过程非常简单,难登大雅之堂,就当段子看吧。
首先介绍一下背景吧。
这是一款国外的Blackjack也就是21点算牌软件,我从来不玩牌的,机缘巧合看到了这个软件搞着玩一下。
21点算牌需要用到Strategy也就是策略,说白了就是算法,从20世纪50年代60年代一直发展到现在,国外的算法大神们研究出了很多厉害的Strategy
这款软件,本身是可以免费使用的,默认免费情况下提供了2个Strategy
在这之外,有两项增值服务,
一是在默认的两个Strategy之外又提供了几十种Strategy
二是可以编辑自定义的Strategy
想要使用这两项增值服务的话,需要向开发商支付$7.99获取License
背景介绍到这里,下面开始演示分析过程。
打开软件,点击“Strategy”可以看到列出了两个免费的Strategy可供选择。

点击“Help”,“Enter License Key”

弹出一个注册框,“Serial Number”标签后有个数字,这里是“61684”
经过测试,当软件在不同的电脑上打开时,这个数字是不同的,在相同的电脑不同的时间打开时是相同的。
因此,我猜测可能是软件读取了某些硬件信息生成了这个数字,并且是与当前时间戳无关的?这个不深究了。

我在“License Key”标签后面随便输入一组数字“12345”试试看,弹出个提示框显示“Invalid Key!”
这个字符串是个典型的标志,等一下会用到。

先用Detect It Easy查一下文件,显示是VB.NET写的。

再用dnSpy载入目标软件。


“编辑”,“搜索程序集”

搜索注册失败时弹出的那个提示字符串“Invalid Key!”,显示它在“btnRegister_Click”里面。

点击“btnRegister_Click”,跳转到目标字符串位置。第457行到480行是这个函数的完整代码,“Invalid Key!”字符串在第478行。

分析一下以上代码,整个函数的执行流程是比较简单的。
第459行对“Me.txtActivationKey.Text”变量的值进行一个判断,如果它是数字形态并且长度大于0就继续向下执行,否则经过一系列跳转最终提示注册失败。
那么这个“Me.txtActivationKey.Text”应该就是由用户输入的License Key了,我们下个断点动态调试来看一下。


没错,结果符合预期。
接下来重点在第462行和第463行
取“Me.txtActivationKey.Text”这个字符串变量的值作为参数,调用Conversions.ToLong()函数将其转换为整型,再将结果作为参数调用Me.CheckKey()函数,
Me.CheckKey()函数会返回一个Boolean值,传递给flag3变量,如果flag3结果为True就提示注册成功,否则就失败。
这样来说,决定成功还是失败的算法,就应该是在Me.CheckKey()函数里面定义的了,点击“CheckKey”跳转到函数定义处。

这个函数更简单了,形式参数“key”是函数调用时传递进来的那个用户输入的值,
紧接着定义了一个变量“num”,应该就是那个“Serial Number”了。
第291行,以“Serial Number”为核心,经过一系列计算得出一个结果值。
第292行,将这个值与用户输入的值“key”进行比对,将Boolean结果返回给调用函数。
总结一下,该函数取随机器而异的一个整数值“Serial Number”经过计算得出另一个整数值“License Key”,如果用户输入的值与函数计算结果相同,即注册成功。
第291行,就是“License Key”的核心算法。
这里,我用Python3以这个小算法写了一个计算函数。
#!/usr/bin/env python3
# -*- coding: utf-8 -*- Serial_Number = float(61684)
License_Key = int(round(Serial_Number * Serial_Number + 134.0 / Serial_Number + 233.0 * Serial_Number / 4.0)) print("Serial Number:\t%s" % int(Serial_Number))
print("License Key:\t%s" % License_Key)
执行

测试一下

注册成功了

增值功能可以正常使用了。
逆向分析一款国外Blackjack Card Counter软件并附上License生成脚本的更多相关文章
- SG Input 软件安全分析之逆向分析
前言 通过本文介绍怎么对一个 windows 程序进行安全分析.分析的软件版本为 2018-10-9 , 所有相关文件的链接 链接:https://pan.baidu.com/s/1l6BuuL-HP ...
- 一文了解安卓APP逆向分析与保护机制
"知物由学"是网易云易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会知道."知物 ...
- [工控安全]西门子S7-400 PLC固件逆向分析(一)
不算前言的前言:拖了这么久,才发现这个专题没有想象中的简单,学习的路径大致是Step7->S7comm->MC7 code->firmware,我会用尽量简短的语言把前两部分讲清楚, ...
- Android逆向分析工具表
逆向分析工具表 工具 描述 网址 androidterm Android Terminal Emulator http://code.google.com/p/androidterm/ droidbo ...
- DuiLib逆向分析の按钮事件定位
目录 DuiLib逆向分析の按钮事件定位 0x00 前言 DuiLib介绍 DuiLib安装 DuiLib Hello,World! Duilib逆向分析之定位按钮事件 碎碎念 第一步:获取xml布局 ...
- 【C++】从零开始的CS:GO逆向分析2——配置GLFW+IMGUI环境并创建透明窗口
[C++]从零开始的CS:GO逆向分析2--配置GLFW+IMGUI环境并创建透明窗口 使用的环境:Visual Studio 2017,创建一个控制台程序作为工程文件 1.配置glfw 在git ...
- IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习
相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...
- 技术分享:逆向分析ATM分离器
文章内容仅供技术交流,请勿模仿操作! 背景(作者) 每一次外出时, Elizabeth和我总是格外的小心,同时把我们身上的钱藏在特殊的皮带上面,这样还不够,我们还采取了“狡兔三窟”的方式来藏身上带的银 ...
- C++反汇编与逆向分析技术揭秘
C++反汇编-继承和多重继承 学无止尽,积土成山,积水成渊-<C++反汇编与逆向分析技术揭秘> 读书笔记 一.单类继承 在父类中声明为私有的成员,子类对象无法直接访问,但是在子类对象的 ...
随机推荐
- Java发布webservice应用并发送SOAP请求调用
webservice框架有很多,比如axis.axis2.cxf.xFire等等,做服务端和做客户端都可行,个人感觉使用这些框架的好处是减少了对于接口信息的解析,最主要的是减少了对于传递于网络中XML ...
- JVM垃圾回收机制概述
JVM垃圾回收机制概述 1.定义 是指JVM用于释放那些不再使用的对象所占用的内存. 2.方式 2.1引用计数(早期) 当引用程序创建引用以及引用超出范围时,JVM必须适当增减引用数.当某个对象的引用 ...
- Visual Studio 使用 Web Deploy 发布远程站点
Ø 简介 本文介绍 Visual Studio 如何使用 Web Deploy发布远程站点,有时候我们开发完某个功能时,需要快速将更改发布至服务器.通常 Visual Studio 可以采用两种方式 ...
- Python——LOL官方商城皮肤信息爬取(一次练手)
# -*- coding utf-8 -*- import urllib import urllib.request import json import time import xlsxwriter ...
- Tree POJ - 1741【树分治】【一句话说清思路】
因为该博客的两位作者瞎几把乱吹(" ̄︶ ̄)人( ̄︶ ̄")用彼此的智慧总结出了两条全新的定理(高度复杂度定理.特异根特异树定理),转载请务必说明出处.(逃 Pass:anuonei, ...
- Basic 001 Bob
Instructions Bob is a lackadaisical teenager. In conversation, his responses are very limited.Bob an ...
- CentOS命令登录MySQL时,报错ERROR 1045 (28000): Access denied for user root@localhost (using password: NO)错误解决方法
1.停用mysql服务:# /etc/rc.d/init.d/mysqld stop 2.输入命令:# mysqld_safe --user=mysql --skip-grant-tables --s ...
- E: Unable to locate package clang-7 E: Unable to locate package clang++-7 E: Couldn't find any package by regex 'clang++-7'
我的系统是Debian 9.8, 然后在装下面这两个包的时候老是提示找不到.然后再github上一问,过了几分钟就有大佬回复了,而且亲测有效 ~$ sudo apt-get -y install cl ...
- php nginx 负载均衡简单配置过程
负载均衡 负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦. 简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解 ...
- static关键字特点
目录 static关键字特点 静态代码块 static修饰与非static修饰的区别 static关键字特点 随着类的加载而加载 static修饰的变量和方法都会放在方法区中静态区,是属于类的. 静态 ...