系统 : Windows xp

程序 : cztria~1

程序下载地址 :http://pan.baidu.com/s/1slUwmVr

要求 : 爆破

使用工具 : OD

可在看雪论坛中查找关于此程序的破文:传送门

废话不多说,直接查询到字符串:“            you did it!”,双击定位:

0040137B  |.  6A          push                                   ; /Count = 40 (64.)
0040137D |. push ; |pediy
|. FF35 push dword ptr [] ; |hWnd = 000405D8 (class='Edit',parent=000505C0)
|. E8 A3080000 call <jmp.&USER32.GetWindowTextA> ; \GetWindowTextA
0040138D |. 83F8 cmp eax, ; 小于等于4?
|. 0F8E 9F000000 jle
|. 6A push ; /Count = 40 (64.)
|. push ; |12345
0040139D |. B90B0000 push 0BB9 ; |ControlID = BB9 (3001.)
004013A2 |. FF75 push dword ptr [ebp+] ; |hWnd
004013A5 |. E8 6E080000 call <jmp.&USER32.GetDlgItemTextA> ; \GetDlgItemTextA
004013AA |. 83F8 cmp eax, ; 小于等于4?
004013AD |. 0F8E jle
004013B3 |. A3 mov dword ptr [], eax
004013B8 |. FF35 push dword ptr [] ; /hWnd = 000405D8 (class='Edit',parent=000505C0)
004013BE |. E8 AF080000 call <jmp.&USER32.SetFocus> ; \SetFocus
004013C3 |. BF mov edi, ; pediy
004013C8 |. BE mov esi, ; pediy
004013CD |> AC /lods byte ptr [esi] ; 循环迭代用户名字符串
004013CE |. 0C |or al,
004013D0 |. |je short 004013D7
004013D2 |. 0C |or al,
004013D4 |. AA |stos byte ptr es:[edi]
004013D5 |.^ EB F6 \jmp short 004013CD
004013D7 |> BF A0324000 mov edi, 004032A0
004013DC |. BE mov esi, ;
004013E1 |. 8D1D lea ebx, dword ptr []
004013E7 |. 33C9 xor ecx, ecx
004013E9 |> AC /lods byte ptr [esi] ; 循环迭代 密码
004013EA |. 0C |or al,
004013EC |. |je short
004013EE |. 8A13 |mov dl, byte ptr [ebx] ; 循环迭代 用户名
004013F0 |. 2AD0 |sub dl, al ; 用户名字符 - 密码字符
004013F2 |. 80CA |or dl, ; 如果相同,则跳转出错
004013F5 |. 3E |je short
004013F7 |. 8AC2 |mov al, dl
004013F9 |. 0F |and al, 0F
004013FB |. 0C |or al, ; al为0?
004013FD |. |je short ; 为0则跳转出错
004013FF |. AA |stos byte ptr es:[edi] ; 保存al成表
|. 02C8 |add cl, al ; 结果累加
|. |inc ebx
|.^ EB E4 \jmp short 004013E9
|> 890D 6A324000 mov dword ptr [40326A], ecx ; 保存累加结果
0040140B |. E8 call ; 关键call
|. BE A0324000 mov esi, 004032A0
|. 8B15 mov edx, dword ptr [] ; 取密码长度
0040141B |. C1EA shr edx, ; 逻辑右移
0040141E |. 03F2 add esi, edx
|. 8A06 mov al, byte ptr [esi] ; 表中取值
|. 33D2 xor edx, edx
|. 8B15 6E324000 mov edx, dword ptr [40326E]
0040142A |. 2BD0 sub edx, eax
0040142C |. A1 6A324000 mov eax, dword ptr [40326A]
|. 3BC2 cmp eax, edx
jz short
|> push ; /Style = MB_OK|MB_TASKMODAL
0040143A |. D1314000 push 004031D1 ; | error
0040143F |. F9314000 push 004031F9 ; | sorry cracker, wrong.
|. FF75 push dword ptr [ebp+] ; |hOwner
|. E8 call <jmp.&USER32.MessageBoxA> ; \MessageBoxA
0040144C |. 6A push ; /Length = 40 (64.)
0040144E |. E0324000 push 004032E0 ; |Destination = cztria~1.004032E0
|. E8 call <jmp.&KERNEL32.RtlZeroMemory> ; \RtlZeroMemory
|. 6A push ; /Length = 40 (64.)
0040145A |. A0334000 push 004033A0 ; |Destination = cztria~1.004033A0
0040145F |. E8 4A080000 call <jmp.&KERNEL32.RtlZeroMemory> ; \RtlZeroMemory
|. EB 2F jmp short
|> push ; /Style = MB_OK|MB_TASKMODAL
0040146B |. E5314000 push 004031E5 ; | <registered>
|. push ; | you did it!
|. FF75 push dword ptr [ebp+] ; |hOwner
|. E8 D1070000 call <jmp.&USER32.MessageBoxA> ; \MessageBoxA
0040147D |. 6A push ; /Length = 40 (64.)
0040147F |. E0324000 push 004032E0 ; |Destination = cztria~1.004032E0
|. E8 call <jmp.&KERNEL32.RtlZeroMemory> ; \RtlZeroMemory
|. 6A push ; /Length = 40 (64.)
0040148B |. A0334000 push 004033A0 ; |Destination = cztria~1.004033A0
|. E8 call <jmp.&KERNEL32.RtlZeroMemory> ; \RtlZeroMemory

跟入 0040140B |. E8 27020000 call 00401637 ; 关键call

  /$  BE A0324000   mov     esi, 004032A0
0040163C |. 8B15 mov edx, dword ptr [] ; 取密码长度
|. push edx
|. 33C0 xor eax, eax
|. 83EA sub edx,
|. 03F2 add esi, edx
0040164A |. 8A06 mov al, byte ptr [esi] ; 表中取值
0040164C |. F7E0 mul eax
0040164E |. 5A pop edx
0040164F |. 83EA sub edx,
|. F7E2 mul edx
|. B9 mov ecx,
|> 2BC1 /sub eax, ecx
0040165B |. 83F8 |cmp eax, ; eax为0?
0040165E |. 7E |jle short
|. 83C2 |add edx,
|. 83C1 |add ecx,
|.^ EB F1 \jmp short
|> push edx ; 保存edx
|. BE A0324000 mov esi, 004032A0
0040166E |. 8BFE mov edi, esi
|. 8B15 mov edx, dword ptr [] ; 取密码长度
|. 33C0 xor eax, eax
|. 83EA sub edx,
0040167B |. 03F2 add esi, edx
0040167D |. 8A06 mov al, byte ptr [esi] ; 表中取值
0040167F |. 83C0 add eax,
|. 5A pop edx
|. 03C2 add eax, edx
|. D1E8 shr eax,
|. 8B15 mov edx, dword ptr [] ; 取密码长度
0040168D |. 03FA add edi, edx
0040168F |. AA stos byte ptr es:[edi]
|. F7E0 mul eax
|. 8B15 mov edx, dword ptr [] ; 取密码长度
|. 83EA sub edx,
0040169B |. F7E2 mul edx
0040169D |. B9 mov ecx,
004016A2 |> 2BC1 /sub eax, ecx
004016A4 |. 83F8 |cmp eax, ; eax为0?
004016A7 |. 7E |jle short 004016B1
004016A9 |. 83C2 |add edx,
004016AC |. 83C1 |add ecx,
004016AF |.^ EB F1 \jmp short 004016A2
004016B1 |> push edx
004016B2 |. BE A0324000 mov esi, 004032A0
004016B7 |. 8B15 mov edx, dword ptr [] ; 取密码长度
004016BD |. 33C0 xor eax, eax
004016BF |. 03F2 add esi, edx
004016C1 |. 8A06 mov al, byte ptr [esi] ; 取表中末位
004016C3 |. 83C0 add eax,
004016C6 |. 5A pop edx
004016C7 |. 03C2 add eax, edx
004016C9 |. D1E8 shr eax,
004016CB |. A3 6E324000 mov dword ptr [40326E], eax ; 保存结果
004016D0 \. C3 retn

这是一个典型的二元函数加密,将用户名与密码的差值生成一个表 和 累加值。再根据表生成两个特殊值。

输入的结果差值要符合 特殊值1 - 特殊值2 == 累加结果

我们可以直接将判断的条件修改成:

00401433 /75 31 jnz short 00401466

就可以完成爆破了。

爆破一个二元函数加密的cm的更多相关文章

  1. Android逆向之旅---基于对so中的函数加密技术实现so加固

    一.前言 今天我们继续来介绍so加固方式,在前面一篇文章中我们介绍了对so中指定的段(section)进行加密来实现对so加固 http://blog.csdn.net/jiangwei0910410 ...

  2. Oracle自定义函数&加密

    在sql中频繁使用的功能(逻辑.加密等)可以写成自定义函数进行封装,之后再调用即可. CREATE OR REPLACE FUNCTION "函数名" (参数名 参数类型 参数数据 ...

  3. 实现一个带有指纹加密功能的笔记本(Android)第一部分

    自己经常会忘记一些密码什么的,想把这些密码保存下来,但是别人做的软件总有一点不安全的感觉,所以自己动手做了一个带有指纹加密的笔记本. 以下是本工程用到的一些第三方包 compile 'org.gree ...

  4. python提供了一个进行hash加密的模块:hashlib

    python提供了一个进行hash加密的模块:hashlib下面主要记录下其中的md5加密方式 import hashlib data1 = 'sada' #####字母和数字 m = hashlib ...

  5. C++进阶 STL(2) 第二天 一元/二元函数对象、一元/二元谓词、stack容器、queue容器、list容器(双向链表)、set容器、对组、map容器

    01 上次课程回顾 昨天讲了三个容器 string  string是对char*进行的封装 vector 单口容器 动态数组 deque(双端队列) 函数对象/谓词: 一元函数对象: for_each ...

  6. Java实现 蓝桥杯VIP 算法训练 二元函数

    问题描述 令二元函数f(x,y)=ax+by,a和b为整数,求一个表达式S的值. 只有满足以下要求的表达式才是合法的: 1.任意整数x是一个合法的表达式: 2.如果A和B都是合法的表达式,则f(A,B ...

  7. Java实现蓝桥杯VIP算法训练 二元函数

    试题 算法训练 二元函数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 令二元函数f(x,y)=ax+by,a和b为整数,求一个表达式S的值. 只有满足以下要求的表达式才是合法的: ...

  8. 请写一个php函数,可以接受任意数量的参数

    请写一个php函数,可以接受任意数量的参数 这是一道面试题.怎么写这个函数呢? function fun(......) { } ----------------------------------- ...

  9. 在String()构造器不存在的情况下自定义一个MyString()函数,实现如下内建String()方法和属性:

    在String()构造器不存在的情况下自定义一个MyString()函数,实现如下内建String()方法和属性: var s = new MyString("hello"); s ...

随机推荐

  1. 开发Blog整理

    开发Blog记录 清理收藏夹 太多了,来不及看了. http://blog.sina.com.cn/s/blog_67d95f40010113ec.htmlhttp://segmentfault.co ...

  2. 服务器asp.net 3.5 HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。

    配置错误:不能在此路径中使用此配置节.如果在父级别上锁定了该节,便会出现这种情况.锁定是默认设置的(overrideModeDefault="Deny"),或者是通过包含 over ...

  3. bzoj 3530: [Sdoi2014]数数

    #include<cstdio> #include<iostream> #include<cstring> #define M 1509 #define MO 10 ...

  4. 面试复习(C++)之归并排序

    #include <iostream> #include<stdlib.h>//引入malloc using namespace std; void Merge(int *a, ...

  5. 《Pro Express.js》学习笔记——Express框架常用设置项

    Express 设置 系统设置 1.       无须再定义,大部分有默认值,可不设置 2.       常用设置 env view cache view engine views trust pro ...

  6. java web学习之初识jsp

    用java语言(+html语言)开发动态资源的技术: jsp的运行过程,1:tomcat服务器将jsp代码翻译成java代码,并且编译成class文件 2:tomcat服务器构造类对象 3:tomca ...

  7. N皇后问题-Hdu 2553

      题目描述: 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上. 你的任务是,对于给定的N,求出有多少种合法的放置 ...

  8. zynq学习01 新建一个Helloworld工程

    1,好早买了块FPGA板,zynq 7010 .终极目标是完成相机图像采集及处理.一个Window C++程序猿才开始学FPGA,一个小菜鸟,准备转行. 2,关于这块板,卖家的官方资料学起来没劲.推荐 ...

  9. RHEL7修改swappiness

    linux系统swappiness参数在内存与交换分区间优化 2014-08-14 10:24:19分类: Linux swappiness的值的大小对如何使用swap分区是有着很大的联系的.swap ...

  10. Tomcat Shell脚本(启动|关闭|重启|状态)

    #!/bin/bash # # chkconfig: - # description: Tomcat start/stop/status script #Location of JAVA_HOME ( ...