160CrackMe 第十九 Brad Soblesky.2

本贴最后更新于 2612 天前,其中的信息可能已经物是人非

查壳无壳,vc 写的。

我们输入假码后,然后点击,弹出错误框,直接打开 od,对 MessageBoxA 下断点也行,寻找字符串也行。

一般的错误提示部分代码类似于这样。

call xxx test xxx,xxx je xxxerror ... jmp xxx push xxx ;xxxerror ... call error

只需要往上找到关键跳直接 nop 就行。不过我们需要跟踪一下算法。

我们找到关键跳的 call 上方下断,可以看到他把一个东西压栈了,可以猜想是真码。

然后我们测试一下 111111 和 1643803416,提示正确,那我们找到这段的段首下断,然后 f9 运行程序重新输入假码点击 Check。重点观察 1643803416 的出现地。

我们可以看到在关键 call 的前方不远处就有出现,那么这个 add 前方的 call 是加密算法 call 吗?

显然不是的,我们可以看到这个 CString::Format 明显是对一个东西进行字符串格式化,格式是 %lu(无符号长整数),另外我们可以在它上面 Enter 跟一跟,可以发现直接从程序领空跳到系统领空了。所以我们可以猜测前面肯定是 1643803416 的一个什么数学形式然后用 %lu 格式化输出,我们可以推测是 16 进制,然后我们再重新来注意一下前面。

我们发现了 1643803416 的十六进制,在上方有个循环。其实之前在 f8 下来的时候,那个循环我们就可以推测是算法,现在经过分析可以更加肯定了。mov eax,[local.4] 这个是这个循环最终跳出来的地方,那么 local.4 那里就是我们所需要找的东西。

在我们之前的两边跟中,我们可以测试发现 local.7 是你输入的 Name 的长度,local.5 是我们输入的名字。

我们把上面的循环好好跟一遍。下面直接看我注释理解吧。对了,我们跟踪过程中也可以发现 Name 长度不能小于 5,就在这个循环上方有个简单的判断。

004015BE |> \C745 E0 00000>mov [local.8],0x0 004015C5 |. EB 09 jmp short Brad_Sob.004015D0 004015C7 |> 8B55 E0 /mov edx,[local.8] 004015CA |. 83C2 01 |add edx,0x1 004015CD |. 8955 E0 |mov [local.8],edx ; local8第一次进入循环为0,后续循环每次+1 004015D0 |> 8B45 E0 mov eax,[local.8] 004015D3 |. 3B45 E4 |cmp eax,[local.7] ; local7 = len(name) 004015D6 |. 7D 42 |jge short Brad_Sob.0040161A ; 当local8>=len(name)跳出循环 004015D8 |. 8B4D E0 |mov ecx,[local.8] 004015DB |. 51 |push ecx 004015DC |. 8D4D EC |lea ecx,[local.5] ; local5=name 004015DF |. E8 1C030000 |call Brad_Sob.00401900 ; 取name[local8]的十六进制ascii放入al 004015E4 |. 0FBED0 |movsx edx,al 004015E7 |. 8B45 F0 |mov eax,[local.4] ; local4初始值为0x81276345 004015EA |. 03C2 |add eax,edx 004015EC |. 8945 F0 |mov [local.4],eax ; local4 += name[local8]的十六进制 004015EF |. 8B4D E0 |mov ecx,[local.8] 004015F2 |. C1E1 08 |shl ecx,0x8 004015F5 |. 8B55 F0 |mov edx,[local.4] 004015F8 |. 33D1 |xor edx,ecx 004015FA |. 8955 F0 |mov [local.4],edx ; local4 = (local8<<8)^local4 004015FD |. 8B45 E0 |mov eax,[local.8] 00401600 |. 83C0 01 |add eax,0x1 00401603 |. 8B4D E4 |mov ecx,[local.7] 00401606 |. 0FAF4D E0 |imul ecx,[local.8] 0040160A |. F7D1 |not ecx 0040160C |. 0FAFC1 |imul eax,ecx ; eax = (~(len(name)*local8))*(local8+1) 0040160F |. 8B55 F0 |mov edx,[local.4] 00401612 |. 0FAFD0 |imul edx,eax 00401615 |. 8955 F0 |mov [local.4],edx ; local4 *= eax 00401618 |.^ EB AD \jmp short Brad_Sob.004015C7 0040161A |> 8B45 F0 mov eax,[local.4]

相信结合我的注释自己细看一遍应该不太费力。下面直接写注册算法。其实上面的基本上用伪代码都写的比较明白了。

#include <stdio.h> #include <string.h> int main() { // name为输入的第一个值 char* name = "111111"; int len_name = strlen(name); if (len_name<5) // name小于5出现提示并退出 printf("User Name must have at least 5 characters.\n"); else { long result = 0x81276345; for(int i = 0; i < len_name; i++) { result += name[i]; result ^= (i<<8); result *= ~(len_name*i)*(i+1); } printf("result: %lu\n",result); } return 0; }

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
Akkuman
python与二次元爱好者,开车司机 宜昌

推荐标签 标签

  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • Access
    1 引用 • 3 回帖 • 3 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    26029 引用 • 108014 回帖 • 1 关注
  • 电影

    这是一个不能说的秘密。

    122 引用 • 608 回帖
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 285 关注
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 37 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    125 引用 • 74 回帖
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    954 引用 • 944 回帖
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    198 引用 • 543 回帖 • 1 关注
  • Word
    13 引用 • 41 回帖
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 233 回帖
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    79 引用 • 431 回帖
  • OpenCV
    15 引用 • 36 回帖 • 7 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 677 关注
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖 • 1 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 2 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 194 关注
  • 安全

    安全永远都不是一个小问题。

    199 引用 • 818 回帖
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 710 关注
  • gRpc
    11 引用 • 9 回帖 • 98 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 403 关注
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 675 关注
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    188 引用 • 1322 回帖
  • Follow
    4 引用 • 12 回帖 • 2 关注