吾爱破解专题汇总:【反汇编练习】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. iota: Golang 中优雅的常量

    阅读约 11 分钟 注:该文作者是 Katrina Owen,原文地址是 iota: Elegant Constants in Golang 有些概念有名字,并且有时候我们关注这些名字,甚至(特别)是 ...

  2. JS基本语法---while循环---练习

    JS基本语法---while循环---练习 练习1: 求6的阶乘 var ji = 1;//存储最终的阶乘的结果 var i = 1;//开始的数字 while (i <= 6) { ji *= ...

  3. 作用域,作用域链,垃圾收集,js解析

    变量中包含基本数据类型和引用数据类型,基本类型指简单的数据值,引用类型由多个值构成的对象. 引用类型可以为其添加属性和方法,也可以改变和删除属性和方法. 复制变量值:     基本类型:一个变量向另一 ...

  4. Apache2 在Linux环境下的安装

    安装Apache2: apt-get install apache2 启动Apache2服务: service apache2 start 在终端运行启动后,打开浏览器URL访问 http://loc ...

  5. 裸奔的支付X聊天,你还敢用吗?

    - 语音消息 使用HTTP明文传输,没有任何加密措施,使用域名为up-mayi.django.t.taobao.com,从报文中可以看出,语音消息是以文件形式在网络中传输的,下图为一次语音的发送传输过 ...

  6. 【转载】Gradle for Android 第六篇( 测试)

    由于现阶段Android开发趋于敏捷开发,再加上国内大大小小的互联网公司都在做app,导致很多这会是一个系列,所以如果你看完这篇文章,请看下列文章: 开发人员对单元测试没有基本的概念,但是本篇博文不会 ...

  7. Python用python-docx读写word文档

    python-docx库可用于创建和编辑Microsoft Word(.docx)文件.官方文档:https://python-docx.readthedocs.io/en/latest/index. ...

  8. k8s资产清单(二)

    什么是清单 说白了清单是k8s当中用来定义pod的文件,语法格式遵循yaml语法,在yaml当中可以定义控制器类型,元数据,容器端口号等等等....,也可以针对于清单对pod进行删除等操作 为什么太学 ...

  9. 6.Python网络编程_全局变量基础

    变量作用域: 一般在函数体外定义的变量成为全局变量,在函数内部定义的变量称为局部变量.全局变量所有作用域都可用,局部变量只能在本函数可用,变量的使用顺序是,局部变量 > 全局变量, 也就是说:优 ...

  10. (转)新建maven项目时报错Error:Maven Resources Compiler: Maven project configuration required for module 'XX'解决方法

    转载地址:https://blog.csdn.net/qq784515681/article/details/85070195 在新建maven项目时,Problems中报错: Error:Maven ...