查壳无壳,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;
}

160CrackMe第十九Brad Soblesky.2的更多相关文章

  1. 无废话ExtJs 入门教程十九[API的使用]

    无废话ExtJs 入门教程十九[API的使用] extjs技术交流,欢迎加群(201926085) 首先解释什么是 API 来自百度百科的官方解释:API(Application Programmin ...

  2. Python之路【第十九章】:Django进阶

    Django路由规则 1.基于正则的URL 在templates目录下创建index.html.detail.html文件 <!DOCTYPE html> <html lang=&q ...

  3. Bootstrap <基础二十九>面板(Panels)

    Bootstrap 面板(Panels).面板组件用于把 DOM 组件插入到一个盒子中.创建一个基本的面板,只需要向 <div> 元素添加 class .panel 和 class .pa ...

  4. Bootstrap <基础十九>分页

    Bootstrap 支持的分页特性.分页(Pagination),是一种无序列表,Bootstrap 像处理其他界面元素一样处理分页. 分页(Pagination) 下表列出了 Bootstrap 提 ...

  5. Web 开发人员和设计师必读文章推荐【系列二十九】

    <Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  6. Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列十九】

    <Web 前端开发精华文章推荐>2013年第七期(总第十九期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...

  7. Python之路【第十九篇】:爬虫

    Python之路[第十九篇]:爬虫   网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用 ...

  8. KALI LINUX WEB 渗透测试视频教程—第十九课-METASPLOIT基础

    原文链接:Kali Linux Web渗透测试视频教程—第十九课-metasploit基础 文/玄魂 目录 Kali Linux Web 渗透测试视频教程—第十九课-metasploit基础..... ...

  9. NeHe OpenGL教程 第三十九课:物理模拟

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

随机推荐

  1. cf 1132 F

    区间dp.. 每次删一串相邻的一样的,问多少次删光. 感觉想的几乎是一样的怎么比赛时就过不了呢...一定是因为我挂机睡觉了 考虑l和r相等,l和l+1相等,r和r-1相等这三种情况就行了..然后就是裸 ...

  2. css 控制文字超出部分显示省略号

    该文章转自:http://www.daqianduan.com/6179.html 如果实现单行文本的溢出显示省略号同学们应该都知道用text-overflow:ellipsis属性来,当然还需要加宽 ...

  3. html5与css 1. web标准及组成

    学习目标 1.本专业介绍.HTML相关概念,HTML发展历史 2.WEB标准,W3C/WHATWG/ECMA相关概念 3.相关软件的应用以及站点的创建 4.HTML基本结构和HTML语法 5.HTML ...

  4. Oracle 修改表 Alter Table...

    --增加列ALTER TABLE Student add sex number(2);--删除列ALTER TABLE Student drop column sex;--更改列属性 ALTER TA ...

  5. sj 网页前端与后台数据交互的3种方式

    1.ajax  网页访问 2.form 表单 用户名<input class="yonghu" type="text" id="user&quo ...

  6. 树莓派3 之 pi3Robot 控制系统配置

    需求 个人正在用Python写一个控制系统,技术选型是python3 + Flask + Mysql + Bootstrap.需要将这套系统直接部署到树莓派中. 代码地址:https://github ...

  7. Spring的bean管理(注解方式)

    注解:代码中的特殊标记,注解可以使用在类.方法.属性上面,使用注解可实现一些基本的功能.注解的写法是@注解名称(属性=属性值). 使用注解创建对象 第一步,创建Web项目,引入Spring的开发包 第 ...

  8. 4、jeecg 笔记之 自定义显示按钮 (exp 属性)

    1.需求 先看一下需求吧,我们希望 datagrid 操作栏中的按钮,可以根据条件进行动态显示. 2.实现 其实 jeecg 提供了一个属性 - exp ,通过该属性即可实现. <t:dgFun ...

  9. 小程序movable-area置于顶层遮盖下方元素无法操作的解决方案

    小程序项目中有个需求,右下角按钮可以在页面中随意拖动,此时查看文档找到了一个自带的标签可以实现此功能,代码如下 <movable-area> <movable-view x=&quo ...

  10. 9个用来爬取网络站点的 Python 库

    上期入口:10个不到500行代码的超牛Python练手项目 1️⃣Scrapy 一个开源和协作框架,用于从网站中提取所需的数据. 以快速,简单,可扩展的方式. 官网:https://scrapy.or ...