没有学过逆向,一时兴起,搞了一下这个小软件,名为“逆向分析”,其实过程非常简单,难登大雅之堂,就当段子看吧。
首先介绍一下背景吧。
这是一款国外的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生成脚本的更多相关文章

  1. SG Input 软件安全分析之逆向分析

    前言 通过本文介绍怎么对一个 windows 程序进行安全分析.分析的软件版本为 2018-10-9 , 所有相关文件的链接 链接:https://pan.baidu.com/s/1l6BuuL-HP ...

  2. 一文了解安卓APP逆向分析与保护机制

    "知物由学"是网易云易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会知道."知物 ...

  3. [工控安全]西门子S7-400 PLC固件逆向分析(一)

    不算前言的前言:拖了这么久,才发现这个专题没有想象中的简单,学习的路径大致是Step7->S7comm->MC7 code->firmware,我会用尽量简短的语言把前两部分讲清楚, ...

  4. Android逆向分析工具表

    逆向分析工具表 工具 描述 网址 androidterm Android Terminal Emulator http://code.google.com/p/androidterm/ droidbo ...

  5. DuiLib逆向分析の按钮事件定位

    目录 DuiLib逆向分析の按钮事件定位 0x00 前言 DuiLib介绍 DuiLib安装 DuiLib Hello,World! Duilib逆向分析之定位按钮事件 碎碎念 第一步:获取xml布局 ...

  6. 【C++】从零开始的CS:GO逆向分析2——配置GLFW+IMGUI环境并创建透明窗口

    [C++]从零开始的CS:GO逆向分析2--配置GLFW+IMGUI环境并创建透明窗口   使用的环境:Visual Studio 2017,创建一个控制台程序作为工程文件 1.配置glfw 在git ...

  7. IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习

    相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...

  8. 技术分享:逆向分析ATM分离器

    文章内容仅供技术交流,请勿模仿操作! 背景(作者) 每一次外出时, Elizabeth和我总是格外的小心,同时把我们身上的钱藏在特殊的皮带上面,这样还不够,我们还采取了“狡兔三窟”的方式来藏身上带的银 ...

  9. C++反汇编与逆向分析技术揭秘

    C++反汇编-继承和多重继承   学无止尽,积土成山,积水成渊-<C++反汇编与逆向分析技术揭秘> 读书笔记 一.单类继承 在父类中声明为私有的成员,子类对象无法直接访问,但是在子类对象的 ...

随机推荐

  1. 机器学习在入侵检测方面的应用 - 基于ADFA-LD训练集训练入侵检测判别模型

    1. ADFA-LD数据集简介 ADFA-LD数据集是澳大利亚国防学院对外发布的一套主机级入侵检测数据集合,包括Linux和Windows,是一个包含了入侵事件的系统调用syscall序列的数据集(以 ...

  2. Hadoop记录-切换NN

    一.第一种方法 重启namenode(1.1.1.1 1.1.1.2)重启standby节点:1.1hadoop-daemon.sh stop zkfchadoop-daemon.sh stop na ...

  3. mysql之binlog

    binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日 ...

  4. VMware 常见问题及解决办法

    Ø  简介 本文介绍使用 VMware 虚拟机时常见的问题及解决办法,主要包括: 1.   虚拟机操作系统装好后,每次进入虚拟机还进入安装程序 2.   虚拟机不能与主机复制粘帖 3.   解决错误: ...

  5. 第30月第18天 autolayout代码

    1.上下左右 [tipsLabel setTranslatesAutoresizingMaskIntoConstraints:NO]; { id view1 = tipsLabel; id view2 ...

  6. Leetcode#500. Keyboard Row(键盘行)

    题目描述 给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词.键盘如下图所示. 示例1: 输入: ["Hello", "Alaska", &quo ...

  7. 开源mall学习

    https://github.com/macrozheng/mall 学习知识点 1.Spring Security 2.@Aspect 3.logstash 4. es crud templete ...

  8. Spring Cloud 2-Hystrix DashBoard仪表盘(五)

    Spring Cloud  Hystrix DashBoard  1.监控系统配置 pom.xml application.yml Application.java 2.被监控服务配置 pom.xml ...

  9. 题解 P4705 【玩游戏】

    这题是真的神仙啊...居然用的 stl 来卡常? 话说 998244353 真的可以一眼 NTT ? noteskey 所以说只要推柿子就好了但是有的地方的推导根本就想不到... 我们令第 t 个答案 ...

  10. 06mycat使用haproxy进行负载均衡

    集群的服务器列表 在10.11.0.210和10.11.0.216中部署mycat和haproxy(因为实验机器性能有限,实际生产环境中需要单独用服务做haproxy反向代理) 两台机器的Mycat配 ...