吾爱破解专题汇总:【反汇编练习】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 函数进行验证显示结果。

三、解题感悟:

  1. 找到serial算法本身就需要具有一定思路,像上面所强调的,找到if语句判断的条件,之后不要从下往上推,而是从上往下推。
  2. 一般这类题不会太复杂,不要陷入很深的函数出不来,那往往说明你分析错了。

    

    

    

[CrackMe]160个CrackMe之002的更多相关文章

  1. [CrackMe]160个CrackMe之015

    吾爱破解专题汇总:[反汇编练习]160个CrackME索引目录1~160建议收藏备用 一.破解 该破解比较简单,其是一个静态密码  2G83G35Hs2 ,输入进去即可破解. 1)栈定位法找到用户代码 ...

  2. [CrackMe]160个CrackMe之001

    吾爱破解专题汇总:[反汇编练习]160个CrackME索引目录1~160建议收藏备用 一.Serial/Name 之 暴力破解 1. 熟悉界面:很常规的一个界面,输入完账号密码之后会进行验证.  2. ...

  3. [反汇编练习] 160个CrackMe之002

    [反汇编练习] 160个CrackMe之002. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  4. [反汇编练习] 160个CrackMe之003

    [反汇编练习] 160个CrackMe之003. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  5. [反汇编练习] 160个CrackMe之027

    [反汇编练习] 160个CrackMe之027. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  6. [反汇编练习] 160个CrackMe之026

    [反汇编练习] 160个CrackMe之026. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  7. [反汇编练习] 160个CrackMe之025

    [反汇编练习] 160个CrackMe之025. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  8. [反汇编练习] 160个CrackMe之024

    [反汇编练习] 160个CrackMe之024. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  9. [反汇编练习] 160个CrackMe之022

    [反汇编练习] 160个CrackMe之022. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

随机推荐

  1. C#函数的参数传递方式1(值传递与地址传递)

    using System; namespace class1 { class program { static void Main(string[] args) { //值传递引用,实际参数不会变化 ...

  2. .NET MVC5简介(六)HttpHandler

    浏览器到网站程序 上一篇中,介绍IHttpModule的时候,自定义一个类CustomHttpModule继承自IHttpModule,自定义一个事件,并配合配置文件,就可以执行自定义Module中的 ...

  3. Javase之集合体系之(1)集合顶层类Collection与其迭代器知识

    集合体系之集合顶层类Collection与其迭代器知识 集合的由来:Java是一门面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,就必须把多个对象进行存储,而要存 ...

  4. 阿里P7工作总结:Spring MVC的工作原理,看完受益匪浅

    这篇文章将深入探讨Spring框架的一部分——Spring Web MVC的强大功能及其内部工作原理. 项目安装 在本文中,我们将使用最新.最好的Spring Framework 5.我们将重点介绍S ...

  5. /etc/profile和~/.bash_profile等文件的区别和联系

    对比说明:/etc/profile:为系统的每个用户设置环境信息和启动程序,当用户第一次登录时,该文件被执行,其配置对所有登录的用户都有效.当被修改时,必须重启才会生效.英文描述:”System wi ...

  6. [转]English - 开口说话工具箱: 27个高频词单词

    本文转自:https://blog.csdn.net/weixin_34247032/article/details/87125465 英语初学者注意力不要放在语法上, 首先要懂得如何让自己开口说英语 ...

  7. vue 组件之纯表格渲染--没有事件交互

    组件 名称小写==> 用-链接 02===> 属性==> empty-text="暂无数据" 当表格中没有数据 就会显示 暂无数据 <el-table-co ...

  8. C++ - 结构体构造函数使用总结

    关于结构体构造函数使用总结 三种结构体初始化方法 1.利用结构体自带的默认构造函数 2.利用带参数的构造函数 3.利用默认无参的构造函数 要点: 在建立结构体数组时,如果只写了带参数的构造函数将会出现 ...

  9. Pwn-pwn-200

    题目地址 ttp://www.whalectf.xin/files/47a658e388a0c505fc07b6ee48a4a2e2/binary_200 32位,开启了NX和Canary保护 存在字 ...

  10. Pwnable-bof

    Download : http://pwnable.kr/bin/bof Download : http://pwnable.kr/bin/bof.c 下载之后,先看看c源码 #include < ...