OllyDbg 使用笔记 (十二)
OllyDbg 使用笔记 (十二)
參考
书:《加密与解密》
视频:小甲鱼 解密系列 视频
演示样例程序下载地址:http://pan.baidu.com/s/1eQiV6aI
安装好程序后,打开程序能够在About中看到注冊界面。能够先从输入的API入手试试。
右键-->查找-->全部模块间的调用,搜索GetWindowTextA (直接输入这些字母就可以搜索),选中找到的的调用,右键-->“在每一个调用到GetWindowTextA设置断点”。 我们能够查看OD设置了3个断点。(我们也能够按Ctrl+N查看输入输出表搜索GetWindowTextA设置断点)。
按F9执行程序,在程序还没有执行到现实接面时。前面两个断点就触发了,并且触发了好多次。
能够知道前面的2个都与About界面的输入无关,取消这两个断点。又一次执行程序。在About中的Registration中输入name和key,点击OK,能够发现程序断在了第3个断点上。
按F8单步执行程序。执行到以下代码处:
00417457 . 8BCE mov ecx, esi
00417459 . C64424 30 01 mov byte ptr [esp+30], 1
0041745E . E8 2D020000 call 00417690
00417463 . 84C0 test al, al
00417465 . 75 7C jnz short 004174E3
00417467 . 51 push ecx
00417468 . 8D5424 14 lea edx, dword ptr [esp+14]
0041746C . 8BCC mov ecx, esp
0041746E . 896424 20 mov dword ptr [esp+20], esp
00417472 . 52 push edx
00417473 . E8 9D6A0400 call 0045DF15
00417478 . 51 push ecx
00417479 . 8D4424 1C lea eax, dword ptr [esp+1C]
0041747D . 8BCC mov ecx, esp
0041747F . 896424 20 mov dword ptr [esp+20], esp
00417483 . 50 push eax
00417484 . C64424 34 03 mov byte ptr [esp+34], 3
00417489 . E8 876A0400 call 0045DF15
0041748E . 8BCE mov ecx, esi
00417490 . C64424 30 01 mov byte ptr [esp+30], 1
00417495 . E8 F6010000 call 00417690
0041749A . 84C0 test al, al
0041749C . 75 45 jnz short 004174E3
0041749E . 6A 00 push 0
004174A0 . 68 04544800 push 00485404 ; ASCII "XoftSpy"
004174A5 . 68 C4684800 push 004868C4 ; ASCII "Invalid code."
004174AA . 8BCE mov ecx, esi
004174AC . E8 664F0400 call 0045C417
004174B1 . 68 48FA4800 push 0048FA48
004174B6 . 8BCD mov ecx, ebp
004174B8 . E8 206E0400 call 0045E2DD
004174BD . 68 48FA4800 push 0048FA48
004174C2 . 8BCF mov ecx, edi
004174C4 . E8 146E0400 call 0045E2DD
004174C9 . 68 48FA4800 push 0048FA48
004174CE . 8BCB mov ecx, ebx
004174D0 . E8 086E0400 call 0045E2DD
004174D5 . 6A 00 push 0
004174D7 . 8BCE mov ecx, esi
004174D9 . E8 03590400 call 0045CDE1
004174DE . E9 9D000000 jmp 00417580
004174E3 > 57 push edi
004174E4 . 55 push ebp
004174E5 . E8 769D0100 call 00431260
004174EA . 83C4 08 add esp, 8
004174ED . 8BCE mov ecx, esi
004174EF . 6A 00 push 0
004174F1 . 68 04544800 push 00485404 ; ASCII "XoftSpy"
004174F6 . 68 98684800 push 00486898 ; ASCII "Congratulations! successfully registered"
004174FB . E8 174F0400 call 0045C417
我们能够发现 jnz short 004174E3 非常关键它的跳转决定了后面输出窗体是"Invalid code." 还是 "Congratulations! successfully registered" 。可是假设我们仅仅是把它改成jmp short 004174E3 尽管会弹出注冊成功的窗体。但实际上还是没有注冊。我们能够看看它前面的call 00417690。
又一次执行程序,进入00417690。我们能够查看00417690 函数,能够发现这个函数有两处返回。第一处返回前。函数使得al变为1, 第二处返回前,函数使得al变为0。按F8,单步执行程序,改变标志寄存器或者指令使得00417690 函数在第一处retn 返回。可是这样实现了以后依旧是会弹出注冊成功的窗体,但实际上还是没有注冊。
我们能够尝试别的方法进行破解。
冲关键的字符串入手。
我们能够重About界面中的“This XoftSpy license has not been registered” 入手,搜索次字符串,查看代码所在的位置
0040147D . 50 push eax
0040147E . 51 push ecx
0040147F . C64424 3C 03 mov byte ptr [esp+3C], 3
00401484 . E8 17FF0200 call 004313A0
00401489 . 8B8E C0000000 mov ecx, dword ptr [esi+C0]
0040148F . 83C4 08 add esp, 8
00401492 . E8 093C0300 call 004350A0
00401497 . 84C0 test al, al
00401499 . 74 12 je short 004014AD
0040149B . 68 C4514800 push 004851C4 ; ASCII "This license of XoftSpy has been registered"
004014A0 . 8D4C24 08 lea ecx, dword ptr [esp+8]
004014A4 . E8 34CE0500 call 0045E2DD
004014A9 . 6A 00 push 0
004014AB . EB 10 jmp short 004014BD
004014AD > 68 94514800 push 00485194 ; ASCII "This XoftSpy license has not been registered"
004014B2 . 8D4C24 08 lea ecx, dword ptr [esp+8]
在0040147D处下断点。又一次执行程序。能够发现当按下主界面的Aboutbutton时。就会中断在0040147D处。尝试直接把 je short 004014AD 改成 nop。能够发现程序就被注冊了。
OllyDbg 使用笔记 (十二)的更多相关文章
- OllyDbg 使用笔记 (二)
OllyDbg 使用笔记 (二) 參考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 TraceMe.exe下载地址:http://pan.baidu.com/s/1c0s2twO T ...
- 《C++游戏开发》笔记十二 战争迷雾:初步实现
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9475979 作者:七十一雾央 新浪微博:http:/ ...
- python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL
python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...
- Go语言学习笔记十二: 范围(Range)
Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...
- DirectX11笔记(十二)--Direct3D渲染8--EFFECTS
原文:DirectX11笔记(十二)--Direct3D渲染8--EFFECTS 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010333737 ...
- java jvm学习笔记十二(访问控制器的栈校验机制)
欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 本节源码:http://download.csdn.net/detail/yfqnihao/4863854 这一节,我们 ...
- (C/C++学习笔记) 十二. 指针
十二. 指针 ● 基本概念 位系统下为4字节(8位十六进制数),在64位系统下为8字节(16位十六进制数) 进制表示的, 内存地址不占用内存空间 指针本身是一种数据类型, 它可以指向int, char ...
- 《深入理解Java虚拟机》读书笔记十二
第十二章 Java内存模型与线程 1.硬件效率与一致性 由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cac ...
- swift 笔记 (十二) —— 下标
下标 swift同意我们为 类.结构体,枚举 定义下标,以更便捷的方式訪问一大堆属性.比方Array和Dictionary都是结构体,swift的project师已经为这两个类型提供好了下标操作的代码 ...
- JavaScript权威设计--命名空间,函数,闭包(简要学习笔记十二)
1.作为命名空间的函数 有时候我们需要声明很多变量.这样的变量会污染全局变量并且可能与别人声明的变量产生冲突. 这时.解决办法是将代码放入一个函数中,然后调用这个函数.这样全局变量就变成了 局部变量. ...
随机推荐
- windows下同时安装python2和python3
之前学习的时候使用2.7比较多. 想练习3.7的时候,两个版本兼容的问题,苦恼了几天. 查了一下资料,发现了一个很好的方法.记录一下,也做一个分享. 本篇内容主要讲一下,在同一台电脑上如何同时安装Py ...
- jupyter(ipython notebook) 安装和入门教程
近期大家无论是自己做数据分析还是紧急答辩做PPT,可能都需要画一些数据的展示图:以前大家都是用excel画图,但excel画图存在一定的局限性,比如你要画个累积直方图,excel就很麻烦了,所以给大家 ...
- 关闭linux退格键和vi发出的嘟嘟声
以root用户登录,然后请安下面方法进行操作: 在命令行下执行:echo "rmmod pcspkr" >> /etc/rc.d/rc.local
- Spring 事务管理基础知识点
参考文章 spring事物配置,声明式事务管理和基于@Transactional注解的使用 尚硅谷 佟刚 Spring视频教程PPT Spring支持编程式事务管理和声明式事务管理两种方式 编程式事务 ...
- MySQL学习笔记:regexp正则表达式
在MySQL中,模糊搜索的时候主要用两种方式: 1.like2.regexp + 正则表达式 性能优于like 正则表达式描述了一组字符串. 最简单的正则表达式是不含任何特殊字符的正则表达式.例如,正 ...
- 20165203《Java程序设计》第二周Java学习总结
教材学习内容总结 第二章 (一)标识符 注意: 标识符由字母.下画线.美元符号和数字组成,长度不受限制. 标识符第一个字符不能是数学字符. 标识符不能是关键字. 标识符不能是true.false和nu ...
- 【POJ】1067.取石子游戏
题解 这道题让我对SG函数有了更深刻的理解,这是道打表找规律题 我们打出来SG函数似乎是 1 2必败 3 5必败 4 7必败 6 10必败 8 13必败 哇我找到规律了-- 然而,我显然不会通项 后来 ...
- ARM Linux 驱动Input子系统之按键驱动测试
上一篇已经谈过,在现内核的中引入设备树之后对于内核驱动的编写,主要集中在硬件接口的配置上了即xxxx.dts文件的编写. 在自己的开发板上移植按键驱动: 1.根据开发板的原理图 确定按键的硬件接口为: ...
- sublime text3安装Package Control和Vue Syntax Highlight
一.下载Sublime3 https://www.sublimetext.com/3 二.安装Package Control 在线安装: https://packagecontrol.io/insta ...
- navicat premium 的使用——navicat 连接MySQL数据库
最近,在学习navicat premium这款第三方软件,他是一个三方数据库管理软件,在前一段时间实习的时候,我使用这款软件调用过服务器上的数据库,不过,当时并没有仔细研究,再次遇到这个软件,我决定仔 ...