0x00 序言

这是第二次破解 crackme 小程序,感觉明显比第一次熟练。破解过程非常顺利,差点儿是分分钟就能够找到正确的 serial,可是我们的目标是破解计算过程。以下将具体介绍。

0x01 初次执行

刚開始拿到 crackme 先执行程序。看看有哪些明显的特征。或者有哪些任务须要完毕:



双击程序后弹框,显然第一个任务就是把这个框框弄掉,我们继续执行:

这个小程序比上次的要复杂,有两个 serial ,我们先看看左边的:



不出意外。猜错了,有明显的弹框和失败字符串作为特征。我们接着看右边的:

不出意外,再次失败,依旧是弹框。

0x02 開始调试

1、明白目标

通过上面的执行分析,我们须要干掉第一个弹框,以及兴许的两个 serial 。同一时候我们发现三者的共同特征为弹框。所以首先拦截弹框函数:

右键代码区选择 “serach for” => “All intermodules calls”:

在新窗体中输入 messageboxa,右键。选择”Set breakpoint on every call to MessageBoxA”:

这样我们就给全部调用弹框函数的地方下了断点,接着回到代码区执行程序。

2、调用者

按 F9 执行到弹框函数处,我们发现此时的栈顶就是第一次弹框时的字符串的地址,于是我们须要找到那个调用弹框函数的函数。叫做调用者。

这里我们往上看,找到当前这个函数的入口并下断点:

然后我们 Ctrl + F2 又一次加载程序。F9 执行到刚才下断点的入口:



此时栈顶就是调用者执行call指令时保存的返回点。我们在代码区中查找这个地址(42F79C),注意单击代码区,按 Ctrl + G 进行查找:

看见了吗,就是这个函数,仅仅有几句代码。以下我们就来消灭它。

3、去掉弹框

调用了函数才会弹框,我们的想法就是让它不调用函数,那么直接让函数返回是最简单的方式。于是我们把函数入口处的第一条指令改成RETN 就可以:

单击指令,按一下空格键能够改动:

此时我们能够把改动保存到文件里:

右键指令,选择 “Copy to executable” => “selection”:

在新窗体中右键选择 “Save file”:

然后保存:

执行新的程序发现第一次的弹框成功消失。

4、破解右側serial

接下来我们转到右边的 serial,输入随意字符串。然后点击button:

我们发现程序停在了弹框函数的入口:

此时栈顶的值就应该是上级函数的返回地址:

我们继续在代码区搜索此地址(42F509):

发现了吗,有推断条件。能够看出是字符串比較函数,我们设置断点。F9 执行究竟后又一次点击button:

程序停在了断点处。看看栈区。发现给函数的參数中的字符串:

破解起来确实非常轻松,字符串是固定的:Hello Dude!

5、破解左側 serial

我们继续执行,转到左側。输入随意字符串后点击button:

依据刚才的方式找到调用者返回地址:42FB37

查找代码区:

发现字符串比較函数并下断点。此时查看栈区:

再往上看代码区:

我们能够猜測出 serial 是 “CW-” + 某个数 + “CRACKED”,中间的数是我们须要找的目标。

6、真实的目标

我们给 serial 生成函数的入口下一个断点,然后又一次点击button执行到断点处 F8 单步走:

中间发现两段代码:

  1. EAX = name[0] * 7 + name[1] * 0x10;
  1. EAX = name[3] * 0xB + name[2] * 0xE

继续向下执行,发现另外一段代码:



函数入口的以下有一句不起眼的代码:

两个结合起来就是:

  1. EAX = name[0] * 0x29 * 2;

后面我们发现调用字符串输出函数之前 EAX 的值被置为那个内存单元的值:

继续往下调试结果就非常明显了,第三段代码才是我们要的。

0x03 双重检測

1、简单粗暴的 C语言

代码例如以下:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char name[1024];
  5. printf("Input your name: ");
  6. scanf("%s", name);
  7. printf("Serial: CW-%d-CRACKED\n", name[0] * 0x29 * 2);
  8. return 0;
  9. }

执行结果:

2、原程序检验

0x04 总结

这个小程序左边的 serial 和 name 的第一个字符有关,而且字符串长度不能小于4.

逆向project实战--Acid burn的更多相关文章

  1. 逆向project实战--Afkayas.1

    0x00 序言 去年玩了几个月的渗透測试,当初认为非常高端的样子.如今看来只是都是些小把戏,于是開始折腾逆向project. 学习过程中參考的是<逆向project核心原理>这本书.讲的非 ...

  2. Android 逆向project 实践篇

    Android逆向project 实践篇 上篇给大家介绍的是基础+小Demo实践. 假设没有看过的同学能够进去看看.(逆向project 初篇) 本篇主要给大家介绍怎样反编译后改动源代码, 并打包执行 ...

  3. Android Cocos2dx引擎 prv.ccz/plist/so等优化缓存文件,手把手ida教你逆向project反编译apk库等文件

    前段时间在 Android play 上看到一个非常牛逼的 3D 动态天气预报,效果真的非常炫.二话不说动手 dex2jar.bat/apktool 发现这并没 有什么卵用,在核心的地方看见 nati ...

  4. 【逆向&编程实战】Metasploit中的安卓载荷凭什么吊打SpyNote成为安卓端最强远控

    文章作者:MG1937 QQ:3496925334 CNBLOG:ALDYS4 未经许可,禁止转载 前言 说起SpyNote大家自然不陌生,这款恶意远控软件被利用在各种攻击场景中 甚至是最近也捕获到了 ...

  5. 逆向project第003篇:跨越CM4验证机制的鸿沟(上)

    一.前言 <冠军足球经理>系列作为一款拟真度极高的足球经营类游戏.赢得过无数赞誉,而CM4可以说是这个传奇的起点. 可是在游戏安装过程中.当用户输入完序列号之后.程序并不会对用户的输入进行 ...

  6. 逆向project第005篇:跨越CM4验证机制的鸿沟(下)

    一.前言 本文是逆向分析CM4系列的最后一篇,我会将该游戏的序列号验证机制分析完成,进而编写出注冊码生成器. 二.分析第二个验证循环 延续上一篇文章的内容,来到例如以下代码处: 图1 上述代码并没有特 ...

  7. android 逆向project smail 语法学习

    众所周知,android 是开源的.如今市场上反编译别人的劳动果实的人也不少.所以我们也是有必要学习下smail语言,(就是androidproject反编译后出的语法语音),看看改怎么给我们的代码 ...

  8. 逆向project第004篇:令计算器程序显示汉字(下)

    一.前言 钩子技术是一项很有有用价值的技术.在Windows下HOOK技术的方法比較多,使用比較灵活,常见的应用层的HOOK方法有Inline HOOK(详见<反病毒攻防研究第012篇:利用In ...

  9. 1 Acid burn ★ Nag,Name/Serial,Serial

    无花无壳爆破 仅允许非商业转载,转载请注明出处

随机推荐

  1. 〖Android〗快速部署SSHD和Bash Shell(程序:DroidSSHD和BetterTerminalEmulatorPro)

    --此文仅做个人配置记录-- 因为我经常需要sshd来连接设备,它抓取logcat日志太方便了,方便排查问题,及多人共享: 及有USB孔限制的人来说,这个更具有意义: 把超级终端增强包部署到内网,也是 ...

  2. 理解 LDA 主题模型

    前言 gamma函数 0 整体把握LDA 1 gamma函数 beta分布 1 beta分布 2 Beta-Binomial 共轭 3 共轭先验分布 4 从beta分布推广到Dirichlet 分布 ...

  3. VSTS 免费代码git/tfs托管体验-使用代码云托管

    虽然各种代码托管平台很多.真正免费的私有仓储 却很少.微软的东西还是值得一用.免费版,5个用户.够了. 申请地址: https://www.visualstudio.com/zh-hans/free- ...

  4. 如何查看 EBS 环境上的 INV RUP 版本号

    select 'Application Environment: '|| i.instance_name || ', Host: '|| i.host_name ||', Application Re ...

  5. Javascript + Dom知识点总结

    Javascript + Dom知识点总结 1.用Javascript声明数组和字典的方式 // 数组声明 var arr = new Array(); arr["0"] = &q ...

  6. 【laravel5.*】运行 php artisan --version报错:PHP Parse error: syntax error, unexpected T_CLASS, expecting T_STRING or T_VARIABLE or '$' in /www/web/crm/artisan on line 31

    1. 出现以上问题 是因为 php版本低于5.6, 因为我系统原有的默认php是5.3,装laravel的php是指定的5.6.21版本,所以在执行 laravel对应的php artisan . p ...

  7. iOS 上传App Store提示WARNING ITMS-90703错误的说明

    今天上传app到appstore的时候,上传到最后一步的时候,报了一个警告: 原文如下: WARNING ITMS-90703: "Deprecated Xcode Build. Due t ...

  8. Java之——Web项目中DLL文件动态加载方法

    本文转自:https://blog.csdn.net/l1028386804/article/details/53903557 在Java Web项目中,我们经常会用到通过JNI调用dll动态库文件来 ...

  9. 【MATLAB】matlabR2010a与vs2010联合编译设置

    在matlab中编译C++程序,首先要配置编译器>> mex -setupPlease choose your compiler for building external interfa ...

  10. IKE 协议(转)

    from: http://lulu1101.blog.51cto.com/4455468/817872 IKE 协议 2012-03-26 21:49:50 标签:休闲 ike 职场 IKE 协议简介 ...