爆破一个二元函数加密的cm
系统 : 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的更多相关文章
- Android逆向之旅---基于对so中的函数加密技术实现so加固
一.前言 今天我们继续来介绍so加固方式,在前面一篇文章中我们介绍了对so中指定的段(section)进行加密来实现对so加固 http://blog.csdn.net/jiangwei0910410 ...
- Oracle自定义函数&加密
在sql中频繁使用的功能(逻辑.加密等)可以写成自定义函数进行封装,之后再调用即可. CREATE OR REPLACE FUNCTION "函数名" (参数名 参数类型 参数数据 ...
- 实现一个带有指纹加密功能的笔记本(Android)第一部分
自己经常会忘记一些密码什么的,想把这些密码保存下来,但是别人做的软件总有一点不安全的感觉,所以自己动手做了一个带有指纹加密的笔记本. 以下是本工程用到的一些第三方包 compile 'org.gree ...
- python提供了一个进行hash加密的模块:hashlib
python提供了一个进行hash加密的模块:hashlib下面主要记录下其中的md5加密方式 import hashlib data1 = 'sada' #####字母和数字 m = hashlib ...
- C++进阶 STL(2) 第二天 一元/二元函数对象、一元/二元谓词、stack容器、queue容器、list容器(双向链表)、set容器、对组、map容器
01 上次课程回顾 昨天讲了三个容器 string string是对char*进行的封装 vector 单口容器 动态数组 deque(双端队列) 函数对象/谓词: 一元函数对象: for_each ...
- Java实现 蓝桥杯VIP 算法训练 二元函数
问题描述 令二元函数f(x,y)=ax+by,a和b为整数,求一个表达式S的值. 只有满足以下要求的表达式才是合法的: 1.任意整数x是一个合法的表达式: 2.如果A和B都是合法的表达式,则f(A,B ...
- Java实现蓝桥杯VIP算法训练 二元函数
试题 算法训练 二元函数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 令二元函数f(x,y)=ax+by,a和b为整数,求一个表达式S的值. 只有满足以下要求的表达式才是合法的: ...
- 请写一个php函数,可以接受任意数量的参数
请写一个php函数,可以接受任意数量的参数 这是一道面试题.怎么写这个函数呢? function fun(......) { } ----------------------------------- ...
- 在String()构造器不存在的情况下自定义一个MyString()函数,实现如下内建String()方法和属性:
在String()构造器不存在的情况下自定义一个MyString()函数,实现如下内建String()方法和属性: var s = new MyString("hello"); s ...
随机推荐
- 前端面试题2016--CSS
介绍一下标准的CSS的盒子模型?低版本IE的盒子模型有什么不同的? (1)有两种,IE 盒子模型.W3C 盒子模型:(2)盒模型:内容(content).填充(padding).边界(margin). ...
- BZOJ3000 Big Number
由Stirling公式: $$n! \approx \sqrt{2 \pi n} (\frac{n}{e})^n$$ 故:$$\begin{align} ans &= log_k n! + 1 ...
- IOS跳转到设置特定项
App如何跳转到系统Settings 标签: IOS开发App转到Settings 2015-12-04 15:56 550人阅读 评论(1) 收藏 举报 分类: IOS开发(21) 版权声明:本 ...
- Visual Studio 2015中快捷键总结
今天总结了Visual Studio工具中常用的快捷键,可供平时参考查阅. 程序调试相关的快捷键F5: 启动调试Ctrl+F5: 开始执行(不调试)Shift+F5: 停止调试Ctrl+Shift+F ...
- php 图片验证码生成 前后台验证
自己从前一段时间做了个php小项目,关于生成图片验证码生成和后台的验证,把自己用到的东西总结一下,希望大家在用到相关问题的时候可以有一定的参考性. 首先,php验证码生成. 代码如下: 1.生成图像代 ...
- 1472. Martian Army
http://acm.timus.ru/problem.aspx?space=1&num=1472 题目大意: 一颗树,根节点(1) 的值为 1.0,所有叶子节点的值为 0.0 ,其他节点值任 ...
- C++ 类、构造析构、深拷贝
1st,感性理解类的思想,就是把数据和对数据的操作打包在一块儿,设计类的时候要 想好数据部分和 要进行的操作.以下是时间类的示意,时间包含时分秒,Time为构造函数,该类支持的操作就是设置时间和读取时 ...
- java中的反射机制在Android开发中的用处
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...
- struts入门实例
入门实例 1 .下载struts-2.3.16.3-all .不摆了.看哈就会下载了. 2 . 解压 后 找到 apps 文件夹. 3. 打开后将 struts2-blank.war ...
- Cannot open the disk 'D:\Program Files\VMOS\Centos.vmdk' or one of the snapshot disks it depends on
启动vmware时出现以下错误: Cannot open the disk 'D:\Program Files\VMOS\Centos.vmdk' or one of the snapshot dis ...