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。能够发现程序就被注冊了。

转载于:https://www.cnblogs.com/yxwkf/p/5395005.html

OllyDbg 使用笔记 (十二)相关推荐

  1. OllyDbg 使用笔记 (二)

    OllyDbg 使用笔记 (二) 參考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 TraceMe.exe下载地址:http://pan.baidu.com/s/1c0s2twO T ...

  2. 吴恩达《机器学习》学习笔记十二——机器学习系统

    吴恩达<机器学习>学习笔记十二--机器学习系统 一.设计机器学习系统的思想 1.快速实现+绘制学习曲线--寻找重点优化的方向 2.误差分析 3.数值估计 二.偏斜类问题(类别不均衡) 三. ...

  3. ROS学习笔记十二:使用roswtf

    ROS学习笔记十二:使用roswtf 在使用ROS过程中,roswtf工具可以为我们提供ROS系统是否正常工作的检查作用. 注意:在进行下列操作之前,请确保roscore没有运行. 检查ROS是否安装 ...

  4. 《C++游戏开发》笔记十二 战争迷雾:初步实现

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9475979 作者:七十一雾央 新浪微博:http:// ...

  5. Python语言入门这一篇就够了-学习笔记(十二万字)

    Python语言入门这一篇就够了-学习笔记(十二万字) 友情提示:先关注收藏,再查看,12万字保姆级 Python语言从入门到精通教程. 文章目录 Python语言入门这一篇就够了-学习笔记(十二万字 ...

  6. 【Visual C++】游戏开发笔记十二 游戏输入消息处理(一) 键盘消息处理

    相信大家都熟悉<仙剑奇侠传98柔情版>的人机交互方式,用的仅仅是键盘.在那个物质并不充裕的时代,一台配置并不高的电脑,一款名叫<仙剑奇侠传>的游戏,却能承载一代人对梦想的追逐. ...

  7. 强化学习经典算法笔记(十二):近端策略优化算法(PPO)实现,基于A2C(下)

    强化学习经典算法笔记(十二):近端策略优化算法(PPO)实现,基于A2C 本篇实现一个基于A2C框架的PPO算法,应用于连续动作空间任务. import torch import torch.nn a ...

  8. Polyworks脚本开发学习笔记(十二)-输出和读取文本文件

    Polyworks脚本开发学习笔记(十二)-输出和读取文本文件 Polyworks作为一个测量工具,将测量的数据方便的导出到文本文件则是一项必须的功能.在DATA_FILE这个命令下提供了很多子命令用 ...

  9. OpenCV学习笔记(十二)——图像分割与提取

    在图像处理的过程中,经常需要从图像中将前景对象作为目标图像分割或者提取出来.例如,在视频监控中,观测到的是固定背景下的视频内容,而我们对背景本身并无兴趣,感兴趣的是背景中出现的车辆.行人或者其他对象. ...

  10. python图像处理笔记-十二-图像聚类

    python图像处理笔记-十二-图像聚类 学习内容 这一章主要在学习的是聚类算法以及其在图像算法中的应用,主要学习的聚类方法有: KMeans 层次聚类 谱聚类 并将使用他们对字母数据及进行聚类处理, ...

最新文章

  1. Oracle --获取绑定变量的值.
  2. TensorFlow搭建垃圾分类系统大师(免费领源码)
  3. oracle解锁system密码,Oracle System密码忘记 密码修改、删除账号锁定lock
  4. 内存写越界导致破环堆结构引起的崩溃问题定位经验[如报错malloc(): memory corruption或free(): invalid next size]...
  5. Python之selenium:selenium库的简介、安装、使用方法之详细攻略
  6. redis 集群 分片 扩容_Redis高可用之集群实现原理
  7. Oracle中PLSQL中一个例外的写法
  8. 《PHP和MySQL Web开发从新手到高手(第5版)》一一第1章 安装
  9. win10存储池_3个光威480G SSD组WIN10存储池,深度测试到底值不值得搞
  10. CTF中Crypty入门必看(密码类,密码学)
  11. Linux防止暴力破解密码脚本
  12. 移动端,h5页面1px 1像素边框过粗解决方案
  13. npm突然找不到D:\nodejs\node_modules\npm\bin\npm-cli.js的解决方法
  14. 剑指offer——面试题60:把二叉树打印成多行
  15. Smart3D中空三的设置
  16. 破解软件下载网站100个
  17. Android中TextToSpeech的使用
  18. 计算机五笔字型编码方法,计算机汉字输入坐标码编码方法
  19. NI-​DAQmx​的​定​时​和​同步​特性
  20. android之微信开放平台修改签名

热门文章

  1. linux轻量级进程LWP
  2. mysql在线修改表结构大数据表的风险与解决办法归纳
  3. 实现JavaScript匿名透明递归
  4. 迅雷(XUNLEI)的工作原理揭密(续)---为何遭封杀及如何应对?
  5. decide how to invest 15 million pound in the development cost?
  6. 龙的建模竟然能建成这个样子:向大佬低头
  7. pdf expert for Mac分享 支持m1
  8. 【转】Unity Scene场景自定义坐标轴
  9. centos 7安装
  10. jQuery 基础总结