[CrackMe]160个CrackMe之002
吾爱破解专题汇总:【反汇编练习】160个CrackME索引目录1~160建议收藏备用
一、逆向分析之暴力破解
暴力破解,对于这种具有提示框的,很好定位。
定位好之后,爆破其跳转语句,就能达到破解目的。
当然,我们之后还会分析其算法写出注册机。
1)点击OK,弹出标题上的对话框。此时点击暂停(不要关闭对话框),然后跳转到 K窗口。
可以看出其栈的调用顺序,最下面的位于 0x40000(EXE)模块内,为用户区代码。
点击“显示调用”,跳转过去,查看用户区的汇编代码。

2)往上看,字符很明显。

3)其跳转结构就是 if else,找到关键跳转点,如图地方使用爆破即可。

二、逆向分析之算法分析
暴力破解,难度比较低,显然不能满足我们的预期。我们的目标是分析其算法写出注册机。
分析前需要具备一个意识:在2)中我们找到一串疑似生成的serial并验证成功,假设该为十进制字符串,那么我们在olldbg中看到的就是为十六进制的数字。
0x77148 = 487752,所以需要对 77148 这个数字敏感。
1)查看其跳转时的 IF 条件。
如下图,使用 test si,si;je xxx 进行跳转。翻译过来就是“若si为0,则跳转到xxx(错误显示区)”
我们继续往上观察,上面两个函数依次是 __vbaFreeStrList,__vbaFreeObjList,这属于释放对象的函数,因此忽略。
再往上看,我们发现其存在一个 __vbaStrCmph函数,其是字符串比较函数,且返回值给esi,有大概率可能是“将serial与用户输入进行对比”

2)在__vbaStrCmp函数处下断点,观察其传入参数。

一个类似serial,和一个用户输入,我们下面验证一下。

很明显正确,我们再换一组数据,其后面数字发生变化,我们有理由怀疑 "AKA-"是常量,后面的才是真正的变量。

其根据用户输入计算,下面我们就来寻找这个计算。
3)寻找 代码生成算法。
警告:不要再从 __bvaStrCmp算法往上分析,而是找到用户输入的往下分析。
因为你从下往上,无法确定到底是哪一环生成的,这种排除法很容易出错。
虽然从上往下,你可能丢掉了输入点,但是你只要看到用户输入,说明并没有被计算,那么你所找的也就不重要了,根据这点来继续分析也可以找到算法。
我们直接跳到 该函数入口 "push ebp"处,虽然分析的代码有点长,但我们只要盯紧 “CPU区、寄存器区、栈区” 三个部分,单步分析,找到用户名 "abcde" 即可。
这样想其实也不是那么的难。

4)查找到其 serial算法:
如图,这是从函数头步一直按F8第一次见到用户输入的字符串 "abcde"

算法分析:其首先获取用户输入的长度(__vbaLenBstr),然后该值乘以0x17CFB(0x402420处),之后获取用户输入name的第一个字符(a),调用rtcAnsiValueBstr函数获取其ASCII码,最后与前面结果相加。
5*0x402420+0x61('a') = 0x77148,该值正好与我们前面假设的完全相符,则说明这就是该值的正确算法。
下面会调用某些函数将其转换为十进制的UNICODE,然后与 "AKA-"进行拼接,最后调用 strcmp 函数进行验证显示结果。
三、解题感悟:
- 找到serial算法本身就需要具有一定思路,像上面所强调的,找到if语句判断的条件,之后不要从下往上推,而是从上往下推。
- 一般这类题不会太复杂,不要陷入很深的函数出不来,那往往说明你分析错了。
[CrackMe]160个CrackMe之002的更多相关文章
- [CrackMe]160个CrackMe之015
吾爱破解专题汇总:[反汇编练习]160个CrackME索引目录1~160建议收藏备用 一.破解 该破解比较简单,其是一个静态密码 2G83G35Hs2 ,输入进去即可破解. 1)栈定位法找到用户代码 ...
- [CrackMe]160个CrackMe之001
吾爱破解专题汇总:[反汇编练习]160个CrackME索引目录1~160建议收藏备用 一.Serial/Name 之 暴力破解 1. 熟悉界面:很常规的一个界面,输入完账号密码之后会进行验证. 2. ...
- [反汇编练习] 160个CrackMe之002
[反汇编练习] 160个CrackMe之002. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
- [反汇编练习] 160个CrackMe之003
[反汇编练习] 160个CrackMe之003. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
- [反汇编练习] 160个CrackMe之027
[反汇编练习] 160个CrackMe之027. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
- [反汇编练习] 160个CrackMe之026
[反汇编练习] 160个CrackMe之026. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
- [反汇编练习] 160个CrackMe之025
[反汇编练习] 160个CrackMe之025. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
- [反汇编练习] 160个CrackMe之024
[反汇编练习] 160个CrackMe之024. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
- [反汇编练习] 160个CrackMe之022
[反汇编练习] 160个CrackMe之022. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
随机推荐
- 屏幕输入转换为int//方法大注释
可以使用两种方法: using System; namespace 方法测试 { class Program { static void Main(string[] args) { Console.W ...
- go-客户信息关系系统
客户信息关系系统 项目需求分析 1) 模拟实现基于文本界面的< 客户信息管理软件>. 2) 该软件能够实现对客户对象的插入.修改和删除(用切片实现),并能够打印客户明细表 项目的界面设计 ...
- Python之Beautiful Soup 4使用实例
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库,它能够通过你喜欢的转换器实现惯用的文档导航.查找.修改文档的方式.Beautiful Soup 4 官方文档: ...
- 如何优雅地停止Spark Streaming Job
由于streaming流程序一旦运行起来,基本上是无休止的状态,除非是特殊情况,否则是不会停的.因为每时每刻都有可能在处理数据,如果要停止也需要确认当前正在处理的数据执行完毕,并且不能再接受新的数据, ...
- [日常] gocron源码阅读-go语言的变量
变量的声明形式是这样的 var 变量名字 类型 = 表达式var ( AppVersion = "1.5" BuildDate, GitCommit string)类型可以被省略, ...
- 关于 chromedriver、IEDriverServer、geckodriver 驱动器的几项注意点
1. 下载 chromedriver 和 IEDriverServer 时,都没有对应的 win64 版本,只能选择 win32,也一样可以: 2. 下载的 IEDriverServer 的版本号和S ...
- sudo apt-get 与 yum 常用命令
yum -RedHat:CentOS... -xxx.rpmsudo apt-get -Debian:Ubuntu... -xxx.deb 安装工具rpm -ivh yum-2.0.4-1.rh ...
- Vue入门案例(二)
创建一个 .html 文件,然后通过如下方式引入 Vue: <!-- 开发环境版本,包含了有帮助的命令行警告 --> <script src="https://cdn.js ...
- MongoDB Java(七)
在 Java 程序中如果要使用 MongoDB,你需要确保已经安装了 Java 环境及 MongoDB JDBC 驱动. mongodb-driver jar 下载地址:http://central. ...
- Mybatis动态SQL(五)
if choose (when, otherwise) trim (where, set) foreach 一.if 动态SQL通常要做的事情是有条件地包含 where 子句的一部分.比如: < ...