系统 : 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. 油猴 greasemonkey 背景音乐 火狐 chrome 背景音乐

    火狐,chrome背景音乐 http://www.w3school.com.cn/tags/tag_audio.asp js插入背景音乐,猴油脚本使用 var audio = document.cre ...

  2. 程设大作业xjb写——魔方复原

    鸽了那么久总算期中过[爆]去[炸]了...该是时候写写大作业了 [总不能丢给他们不会写的来做吧 一.三阶魔方的几个基本定义 ↑就像这样,可以定义面的称呼:上U下D左L右R前F后B UD之间的叫E,LR ...

  3. blade and soul zone overview

    The world of Blade and Soul, is a vast extension of land containing two continents (the Southern Con ...

  4. UDP传输

    @@@基于UDP的客服端代码 public class Service { // 服务器 public static void main(String[] args) { DatagramPacket ...

  5. ARC和MRC混编

    在targets的build phases选项下Compile Sources下选择要不使用arc编译的文件,双击它,输入 -fno-objc-arc 即可 MRC工程中也可以使用ARC的类.方法如下 ...

  6. 在PHP中如何实现在做了么个操作后返回到指定页面

    我们经常会碰到类似用户在没有登录的情况下进行提问.评论,需要用户登录后返回刚才浏览的网页,这种功能用cookie保存当前url地址来实现.我用的是jquery,读者需要懂点jquery中的ajax请求 ...

  7. nginx(一)

    crul新浪微博的时候发现对面用的是nginx服务器,在虎扑足球(挺好的足球论坛)讨论世界杯也发现他们也用这nginx,联想到阿里的tengine也是基于nginx的,觉得有了解一下nginx的必要了 ...

  8. jQuery -- DOM节点的操作

    DOM 操作的分类: dom core: getElementById() getElementsByTagName() getAttribute() setAttribute() html-dom ...

  9. git基本技巧及进阶

    基本技巧 1. 安装后的第一步 在安装好git后,你第一件该做的事是设置你的名字和电子邮箱,因为每次提交都要用到这些信息: $ git config --global user.name " ...

  10. iframe标签书写导致div不显示

    <iframe id="iframbox" src="" frameborder="0" scrolling="auto&q ...