目录

一点铺垫:基础知识

1.汇编语言

2.NAG窗口

3.SEH

4.断点类型

一、MessageBox.exe修改程序标题内容——修改函数传入值

二、TraceMe.exe暴力破解程序登陆界面——搜索函数、寻找附近调用取值的地方

三、reverseMe.exe暴力破解/打补丁实现注册——分析文件结构 逆向注册文件

修改跳转条件暴力破解:

注册打补丁:

四、reverseMe.exe去除NAG窗口——修改跳转条件跳过对话框,使得MessageBox失效:父句柄设为空白,修改文件PE结构入口AddressOfEntryPoint

1.修改跳转条件跳过对话框

2.使得MessageBox失效:父句柄设为空白

3.修改文件PE结构入口AddressOfEntryPoint

五、reverseMe.Oops.exe——PE文件头!

六、pixtopianbook破解功能限制——定位至引用弹出NAG窗口的地址、搜索字符串改变值

1.定位NAG窗口

2.搜索字符串改变UNREGISTERED VERSION字符串

七、pcsurgeon.exe搜索字符串找到调用

1.搜索字符串改变<>

2.查找地址常量 https://blog.csdn.net/wlswls1711/article/details/97145997


一点铺垫:基础知识

1.汇编语言

EBP:主要是用于栈和栈帧。

ESP:指向当前进程的栈空间地址。

EIP:总是指向下一条要被执行的指令。

2.NAG窗口

nag本意是烦人的意思,nag窗口是软件设计者用来时不时提醒用户购买正版的警告窗口。一般nag在程序启动或退出的时候弹出来,或者在程序运行的某个时刻突然蹦出来吓你一跳。

3.SEH

SEH(Structured Exception Handling),即结构化异常处理。

SEH是Windows操作系统提供的功能,跟开发工具无关。

Windows程序设计中最重要的理念就是消息传递,事件驱动。 当GUI应用程序触发一个消息时,系统将把该消息放入消息队列,然后去查找并调用窗体的消息处理函数(CALLBACK),传递的参数当然就是这个消息。

我们同样可以把异常也当作是一种消息,应用程序发生异常时就触发了该消息并告知系统。

系统接收后同样会找它的“回调函数”,也就是我们的异常处理例程。

当然,如果我们在程序中没有做异常处理的话,系统也不会置之不理,它将弹出我们常见的应用程序错误框,然后结束该程序。 所以,当我们改变思维方式,以CALLBACK 的思想来看待SEH,SEH 将不再神秘。

4.断点类型

软件断点只能断点程序领空,不能断点动态链接库如果需要断点动态链接库,就需要用到硬件断点。


一、MessageBox.exe修改程序标题内容——修改函数传入值

int WINAPI MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType);

1.找到MessageBox的传入值

2.修改传入的lpText值


二、TraceMe.exe暴力破解程序登陆界面——搜索函数、寻找附近调用取值的地方

(1)使用OD加载程序,搜索分别搜索GetDlgItemTextA、GetDlgItemTextW、GetWindowTextA、GetWindowTextW,搜索到的都下断点。

(2)运行程序,在程序弹出对话框时,输入用户名和系列号,然后按F8单步,在消息窗口观察哪条语句有我们刚刚输入的用户名和系列号。如下图:

(3)找到后,就在这条语句的附件会有校验和跳转(那个test就是效验,je就是跳转),我们可以修改效验结果,或者直接NOP掉跳转。(我这里直接NOP掉了跳转)


三、reverseMe.exe暴力破解/打补丁实现注册——分析文件结构 逆向注册文件

首先分析代码结构:

修改跳转条件暴力破解:

直接将弹出还未注册的窗口判断语句(je,jle,jnz等)更改为nop(不希望它执行)或jmp(希望它执行),即可实现。

注册打补丁:

确认程序的逻辑结构。

下了断点的是程序的大致算法模块。


四、reverseMe.exe去除NAG窗口——修改跳转条件跳过对话框,使得MessageBox失效:父句柄设为空白,修改文件PE结构入口AddressOfEntryPoint

定位NAG窗口

1.修改跳转条件跳过对话框

(2)把程序跑一遍之后我们发现程序有两个NAG,一个是在程序界面启动前出现,另一个是在程序关闭后出现的。如图所示(红框里的),运行这两个call后都会弹出NAG窗口,所以我们判断NAG窗口就在这里面。如第三讲,可以把这两个call给NOP掉或者在call前面使je跳转实现,还有在call前面添加一个jmp跳转跳过这NAG窗口的call。

2.使得MessageBox失效:父句柄设为空白

我们看到NAG窗口它的父窗口是0(也就是没有父窗口),那么我们就可以创造一个不存在的父窗口给NAG窗口。比如为NAG窗口添加一个句柄为1的父窗口,本来句柄1的父窗口就不存在(也就是相当于关闭了),那么NAG窗口也就不存在了,那么我们就达到了去除NAG窗口目的。

3.修改文件PE结构入口AddressOfEntryPoint

(1)把程序载入OD,可以看到AddressOfEntryPoint(入口地址)为00401000,但是我们程序的真正内容是在:00401024.前面的是我们要去掉的去除NAG窗口,那么我们如果把程序入口改为:00401024 就完美的去掉了第一个NAG窗口了。

(2)说干就干,点击快捷栏的“m”键,在弹出窗口中双击PE 文件头,我们就来到内存中文件头的位置了。在这个窗口中,第一栏为地址,第二栏为地址上的二进制数据,第三栏为方便人类阅读的代码(因为内存中的二进制数据是高地址放后面,底地址放前面,阅读很不方便),第四栏为注释。

(3)找到真正的PE头的偏移地址(000000C0),如图:

(4)根据偏移地址找到真正的PE头(004000C0,PE头会以ASCII的"PE"开头,也就是50 45),然后就找到程序的入口地址(AddressOfEntryPoint)

(5)根据(4)中得到的程序入口地址在内存中的地址(004000E8),那么我们就可以修改入口地址为00401024啦。在数据窗口按Ctrl+G输入004000E8,修改之:

(6)保存修改程序,重新载入OD发现入口地址成功改为00401024了:

五、reverseMe.Oops.exe——PE文件头!

不知道为什么小甲鱼不能在编译器里运行但我却可以,这里跳过,以后有机会再来看

清理下OD的UDD文件夹,不行的话试试用视频中演示的OD。

你是开了OD后从OD打开程序,我是右键程序直接用OD打开程序的 我这样没你那个提示哦 |

 

六、pixtopianbook破解功能限制——定位至引用弹出NAG窗口的地址、搜索字符串改变值

1.定位NAG窗口

(1)在OD运行弹出的软件界面试图添加第5个人,出现错误提示box,如下图

(2)此时在OD中按下暂停(暂停后OD中的地址跳至动态链接库,即系统领空处),然后按ALT+F9返回到用户,在用户界面点击确定后,OD中就返回到程序接管,地址跳转到下图的位置:

(3)图中的MessageBoxA就应该是刚才的错误提示框了,F8到retn,返回到函数(函数调用之后碰到ret返回),如下图:

注意:ret返回后,在上方又有一个call,说明在此处是间接地调用messagebox。

2.搜索字符串改变UNREGISTERED VERSION字符串

接下来将几处”unregistered version”字符查找并修改:

方法1:查找所有参考文本字串→查找文本“unregistered version”→跟随到代码处,找到在内存中的地址→在数据窗口中修改保存。

方法2:直接点击Memory→Ctrl+B查找→修改后记住字符串在内存中的地址,到OD的数据窗口保存。【建议用这种方法】

注意:修改时记得【保持大小】,不然会出错。

七、VisualSite Designer——定位、硬件断点

1.次数耗尽之前——定位修改跳转条件

一路F8,遇到弹窗就在此处F2下断,然后重新载入,F9运行到断点处,消除断点,继续执行。

F8,出现弹窗,计数减一完成,点击进入程序发现程序执行下一条语句

所以该函数的作用是显示欢迎界面,计数器减一并返回eax==1,

此时我们修改该指令

保存修改,运行,发现已经没有次数限制

2.次数耗尽之后——标志找不同

我们用OD载入观察所有的条件跳转语句,并标志出跳转结果,等到次数耗尽之后观察跳转结果与是否发生改变,找到关键跳转点nop。

八、pcsurgeon.exe——搜索字符串找到调用

1.搜索字符串改变<UNREGISTER

我们要从红笔圈出的地方入手。将软件载入OllyDBG,在代码界面右键——查找——所有参考文本字串,在第一行右键——查找文本,查找一部分比如“<unregistered”,

找到后双击进入代码的位置,可以看到代码的上方有两个jnz跳转,未注册过的源代码是不会跳转的,将这个jnz改为jmp,右键——复制到可执行文件——右键——保存文件为pcsurgeon1.exe,这样NAG窗口就去掉了

2.查找地址常量 https://blog.csdn.net/wlswls1711/article/details/97145997

来到代码处。鼠标向上滑几行,可以看到这样的代码:

mov eax,dword ptr [60ebe8]
cmp byte ptr [eax],0
jnz 005cc935

显然,将地址60ebe8的值送到eax里,然后将eax的值作为地址,将这个地址中的值和0比较(其实是两数相减),结果不为零就跳转,但是ds:[0060eb8c]=00610c4a
右键点击mov eax,dword ptr [60ebe8]这一行——查找参考——地址常量,将所有的都设置断点。

重新运行程序,来到第一个断点处,有这样的代码:

mov edx,dword ptr [60ebe8]
mov byte ptr [edx],al

在上面我们知道ds:[0060eb8c]=00610c4a,所以:
这两段代码执行后,ds:[00610c4a]的值就是al的值,不幸的是,我们从OD右边的寄存器中看到al=0,所以
ds:[00610c4a]=00,所以cmp byte ptr [eax],0的结果就是0,所以jnz 005cc935就不能跳转,所以。
我们直接将mov byte ptr [edx],al 改为mov byte ptr [edx],1,复制到可执行文件,保存文件就破解成功了,但是这样改会出现这样的问题:

这个软件这样改是没有问题,但比较大的软件这样改,就可能会影响程序,因为要重定位的东西很多,所以也可以这样改:
将 cmp byte ptr [eax],0改为 mov byte ptr [eax],1
将 jnz short 005c2c15 改为  jmp short 005c2c15

九、MrBills.exe——不断进入找到判断注册的地方

1.使用搜尋字串找關鍵字。

You have entered an invalid email address or license number.Please try again.

2.尝试跳过。

  • 斷點在004299B9 | 75 36 | jne mrbills.4299F1 |跳轉未實現

  • jne跳轉未實現為ZF=1,我們將其修改為ZF=0

  • F9執行程式

  • 彈出視窗顯示Thank you for registering! (感謝你註冊!)

  • 按下確定

  • 發現程式並沒有真正被註冊

  • 在此可以確認單存跳過只是修改顯示的彈出訊息內容3.

3.

  • 斷點在0040714C | 55 | push ebp |

  • F8一步一步過,並持續觀察eax的變化

    0040714C | 55                    | push ebp                                 |
    0040714D | 8BEC                  | mov ebp,esp                              |
    0040714F | FF75 0C               | push dword ptr ss:[ebp+C]                |
    00407152 | FF75 08               | push dword ptr ss:[ebp+8]                |
    00407155 | E8 77FEFFFF           | call mrbills.406FD1                      |
    0040715A | 84C0                  | test al,al                               |
    0040715C | 59                    | pop ecx                                  |
    0040715D | 59                    | pop ecx                                  |
    0040715E | A2 A0765000           | mov byte ptr ds:[5076A0],al              |
    00407163 | 75 1B                 | jne mrbills.407180                       |
    00407165 | FF75 0C               | push dword ptr ss:[ebp+C]                |
    00407168 | FF75 08               | push dword ptr ss:[ebp+8]                |
    0040716B | E8 ADFEFFFF           | call mrbills.40701D                      |
    00407170 | 84C0                  | test al,al                               |
    00407172 | 59                    | pop ecx                                  |
    00407173 | 59                    | pop ecx                                  |
    00407174 | A2 A0765000           | mov byte ptr ds:[5076A0],al              |
    00407179 | A2 A2765000           | mov byte ptr ds:[5076A2],al              |
    0040717E | 74 0D                 | je mrbills.40718D                        |
    
  • 004071550040716Bcall回傳eax的值,故這兩個需要在F7步入觀察

  • 004071550040716B設定中斷點

  • 移除其他中斷點

4.继续分析。

直接将00406FC5 | mov al,bl 改为 mov al,1 即可变为永久注册!

十、pc2am2p.exe VB语言编写的程序的特点

十一、查看调用——追根溯源

十二、Delphi程序编写的特点

PUSH XXX

RETN

达到 CALL XXX的效果

面向事件的编程语言,很多CALL指令

-号返回CALL处

十三/十四、搜索关键函数

1.查找-》所有模块间的调用

2.Alt+N 搜索

小甲鱼解密系列调试篇——OD使用教程笔记(持续更新中)相关推荐

  1. Python学习小甲鱼视频做的笔记(持续更新中)

    Python BIF :Built-in functions(内建函数) Python与大多数其他计算机语言的做法稍有不同,他并不是把值存储在变量中,而更像是把名字贴在值的上边. 在使用变量之前,必须 ...

  2. 小余学调度:调度禁忌操作讲解(持续更新中ing)

    小余学调度系列文章,记录小余同学入职电力调度员一路的学习记录,由于工作性质,在这个系列,只写能公开的知识点,不涉及机密.图中所有数据和图要么是网图,要么做了脱敏处理.不涉及机密. 专栏解锁后,可以看这 ...

  3. 渗透学习-文件上传篇-基础知识部分(持续更新中)

    提示:仅供进行学习使用,请勿做出非法的行为.如若由任何违法行为,将依据法律法规进行严惩!!! 文章目录 前言 一.文件上传漏洞简要阐述 文件上传是什么? 为什么会产生文件上传漏洞?及其可能一哪些危害? ...

  4. 前端面试题(五)(Element-ui篇)建议收藏,持续更新中...

    ElementUi是怎么做表单验证的?在循环里对每个input验证怎么做呢? model 绑定表单数据,通过prop取表单数值,通过编写ref进行后台API验证 ,根据rules进行表单内容验证 你有 ...

  5. 前端面试题(三)(CSS篇)建议收藏,持续更新中...

    CSS content属性特殊字符有哪些? 今天在做开发的时候,需要用到CSS的content属性,加入一些特殊字符来实现网页效果.但是特殊字符那么多,怎么可能记得住,所以谷歌百度搜索之后找到了一个比 ...

  6. 前端面试题(二)(CSS篇)建议收藏,持续更新中...

    如何给段落首行缩进? 一看题目居然没想起text-indent

  7. unity ui框架_[教程汇总+持续更新]Unity从入门到入坟——收藏这一篇就够了

    ----------------塔防(更新中),作者重写了基础篇(下方目录为:1.1(新) 基础)目前还在持续连载了5篇,因为不多我们更新完就能追到原作者的进度了------------------- ...

  8. 【第十三届蓝桥杯备战】C/C++解题时的一些个人小技巧和注意事项(持续更新中)

    [第十三届蓝桥杯备战]C/C++解题时的一些个人小技巧和注意事项(持续更新中) 输入输出 数组 数据结构 1. 线段树 调试 References 先说一些废话:我最近觉得写算法题就像是打格斗游戏一样 ...

  9. iOS系列教程 目录 (持续更新...)

      前言: 听说搞iOS的都是高富帅,身边妹子无数.咱也来玩玩.哈哈. 本篇所有内容使用的是XCode工具.Swift语言进行开发. 我现在也是学习阶段,每一篇内容都是经过自己实际编写完一遍之后,发现 ...

  10. 《Autosar从入门到精通-实战篇》总目录_培训教程持续更新中...

    目录 一.Autosar入门篇: 1.1 DBC专题(共9篇) 1.2 ARXML专题(共35篇) 1.2.1 CAN Matrix Arxml(共28篇) 1.2.2 ASWC Arxml(共7篇) ...

最新文章

  1. java this$0_java中this$0的含义及用法
  2. 机器学习算法机器人足球_购买足球队:一种机器学习方法
  3. 洛谷 P2463 [SDOI2008]Sandy的卡片 解题报告
  4. c语言 空格_C语言100题集合-ex003
  5. discuz的ajax,discuz分页函数改成基于jqueryd的ajax分页函数
  6. python网盘系统_python做系统
  7. 反编译插件jadclipse和jad.exe的组合使用
  8. [Python] L1-003. 个位数统计-PAT团体程序设计天梯赛GPLT
  9. java重构三部曲,建构·解构·重构——漫谈批注式阅读三部曲
  10. CAD安装失败Failed Installation aborted, Result=1603
  11. inode服务器与响应,inode客户端服务器下线请求和
  12. OCR电子发票批量自动合成软件
  13. 小程序列表左滑效果在IOS呈上下滑动影响样式
  14. 测试数据生成工具datafaker
  15. 【计及DG和相关性的纯交流三点估计随机潮流计算方法】
  16. c语言系统垃圾清理软件,c语言中加入“一键清理系统垃圾”的代码怎么实现?...
  17. android markdown 笔记,安卓-纯纯写作 | 快速笔记 Markdown
  18. Mac系统开机启动项如何设置
  19. 远程医疗中使用AR眼镜,内窥镜,视频远程诊疗方案
  20. Hadoop HA (一) --------- HA 概述 与 HDFS-HA 集群搭建

热门文章

  1. Blender:雕刻笔刷动态图解(一)
  2. edius隐藏快捷键_超级实用的edius常用快捷键
  3. 解决Docker容器中无法使用vim命令
  4. 活久见!大四学生发明文言文编程语言,脑洞新奇
  5. 《爱的博弈》(让婚姻持久保鲜的人际关系圣经)主要内容及大纲 免费下载
  6. 企业信息化基础设施建设分析
  7. 方舟生存进化秘籍大全
  8. 最值得收藏的 考研线性代数 全部知识点思维导图整理(张宇, 汤家凤), 附带惯用思维/做题技巧/易错点整理
  9. 四叶草启动引导配置工具 !Clover Configurator中文版下载!
  10. hamcrest的jar包_重新设计Hamcrest