[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全部破解,如果可以,通过任何方式写出一个类似于注 ...
随机推荐
- iota: Golang 中优雅的常量
阅读约 11 分钟 注:该文作者是 Katrina Owen,原文地址是 iota: Elegant Constants in Golang 有些概念有名字,并且有时候我们关注这些名字,甚至(特别)是 ...
- JS基本语法---while循环---练习
JS基本语法---while循环---练习 练习1: 求6的阶乘 var ji = 1;//存储最终的阶乘的结果 var i = 1;//开始的数字 while (i <= 6) { ji *= ...
- 作用域,作用域链,垃圾收集,js解析
变量中包含基本数据类型和引用数据类型,基本类型指简单的数据值,引用类型由多个值构成的对象. 引用类型可以为其添加属性和方法,也可以改变和删除属性和方法. 复制变量值: 基本类型:一个变量向另一 ...
- Apache2 在Linux环境下的安装
安装Apache2: apt-get install apache2 启动Apache2服务: service apache2 start 在终端运行启动后,打开浏览器URL访问 http://loc ...
- 裸奔的支付X聊天,你还敢用吗?
- 语音消息 使用HTTP明文传输,没有任何加密措施,使用域名为up-mayi.django.t.taobao.com,从报文中可以看出,语音消息是以文件形式在网络中传输的,下图为一次语音的发送传输过 ...
- 【转载】Gradle for Android 第六篇( 测试)
由于现阶段Android开发趋于敏捷开发,再加上国内大大小小的互联网公司都在做app,导致很多这会是一个系列,所以如果你看完这篇文章,请看下列文章: 开发人员对单元测试没有基本的概念,但是本篇博文不会 ...
- Python用python-docx读写word文档
python-docx库可用于创建和编辑Microsoft Word(.docx)文件.官方文档:https://python-docx.readthedocs.io/en/latest/index. ...
- k8s资产清单(二)
什么是清单 说白了清单是k8s当中用来定义pod的文件,语法格式遵循yaml语法,在yaml当中可以定义控制器类型,元数据,容器端口号等等等....,也可以针对于清单对pod进行删除等操作 为什么太学 ...
- 6.Python网络编程_全局变量基础
变量作用域: 一般在函数体外定义的变量成为全局变量,在函数内部定义的变量称为局部变量.全局变量所有作用域都可用,局部变量只能在本函数可用,变量的使用顺序是,局部变量 > 全局变量, 也就是说:优 ...
- (转)新建maven项目时报错Error:Maven Resources Compiler: Maven project configuration required for module 'XX'解决方法
转载地址:https://blog.csdn.net/qq784515681/article/details/85070195 在新建maven项目时,Problems中报错: Error:Maven ...