软件破解逆向工程实战(一)

一、写在前面

本系列教程无需任何基础,直接学习即可,对于没有c/c++基础的同学来说也没有什么坎,多看,多做就能掌握,同时说一下,我们的QQ群:689696631,因为本系列教程,并不是以视频的方式录制,所以如果中间有不懂的地方也欢迎加群询问

二、重点通用思路学习(基础破解方法)

程序破解:汇编指令->脱壳->修复程序->破解(算法)

汇编指令暂时不用说,后面教学的时候会讲,说一下什么叫脱壳。现在的很多软件,除了本体的核心以外,还都有一层保护壳,防止别人去破解,所以我们要去掉这个保护壳,一开始我们会学习自己手动脱壳,等到后期我们可以自己写脱壳程序或者直接用别人的脱壳软件来脱壳,但是脱完壳之后,很多程序可能是有损坏的,所以我们需要学习如何修复程序

2.1 学会找资源

为什么把这单独拿出来讲,因为很多人连找资源都不会,同时也不能怪你们,毕竟现在的搜索引擎都太坑了,举个例子,我360搜索“破解工具包”,显示结果如下

图2-1 360搜索

我并不是黑360,但大家也能砍价了,明显的摆在这里,最上面全是广告,这怎么能帮助我们找到真正想要的资源呢?通过谷歌搜索,如果你没有办法科学上网,那你按照我说的办法做,搜索“谷歌镜像站”,或者直接打开链接https://chenjx.cn/google-mirrors/,这里面有镜像站,然后我们在谷歌里面搜索“破解工具包”,显示结果如下

图2-2 谷歌搜索

不仅仅是搜索需要的软件可以谷歌,包括学完以后,自己破解软件的时候,也可以谷歌搜索某些壳怎么脱,总之谷歌搜索非常方便

2.2 所需工具

1.vs2017

学过编程的都知道vs是用来写程序的编译器,而且vs很多程序都能写,比方说vb,c/c++很多都可以通过vs来写,这里给出下载链接https://dl.iplaysoft.com/files/4012.html

图2-3 下载vs2017

图2-4 安装vs2017

安装时间比较长,我们同时可以下载另一个软件OD

2.Ollydbg

下载地址:http://down.52pojie.cn/Tools/Debuggers/吾爱破解专用版Ollydbg.rar

图2-5 Ollydbg

2.3 使用OD查找main函数

Main函数,又称主函数,是程序执行的起点

EP(EntryPoint,入口点),EP是windows可执行文件(EXE、DLL、SYS等)的代码入口,是执行应用程序时最先执行的代码的起始位置,它依赖于cpu

我提前写好了一个小程序,下面我们就要OD查找这个程序的main函数

图2-6 hello.exe

这个程序的下载链接我附一下:http://t.cn/RQ6GWm3

然后我们将它拖到OD打开,拖进去之后,她就会产生这样的界面

图2-7 OD

然后我们可以看到最左边一栏地址是004011A1,就是我们的EP,就是程序的入口点

图2-8 EP

我们注意到在这个EP里,有一个“call”,这个call就是调用子程序,这个子程序的地址,就是后面写的004022DF

所以接下来要做什么都这应该也猜到了,就是去找这个地址,手动翻往下找这个地址当然可以,但是在这里我们讲几个快捷键

F7 下一步并且跟进

F8 下一步不跟进

Ctrl + F9 跳到子程序尾部

现在我们摁F7

图2-9 跟进call

现在,这个地址值就是call后面对应的地址值,表明我们跟进来了,我们现在看最右边的注释,好像没有任何跟我们main函数有关的,我们的main函数附近,至少应该有messagebox上的一些关键字,比方说“csdn.net”或者是“Hello World!”(见图2-6)

遇到瓶颈了?我们现在试试调到程序的尾部,看看是什么,摁Ctrl + F9

图2-10 程序尾部

我们看到程序的尾部有一个“retn”,这其实是个缩写,学过编程语言的都知道“return”是返回的意思,所以我们现在要看看他返回了什么?摁F7跟进

图2-11 F8跟进retn

现在我们看到的是一个醒目的关键字“jmp”,可以把它理解为“jump跳”的意思,那么他跳到哪呢?左边有一条红色的线,他其实就是跳到这跟线的另一端,所以我们摁一下F7跟进

图2-12 跟进jmp

跟进了以后其实还是没有我们想看到的与main函数有关的东西,所以我们只能继续F8下一步

图2-13 F8下一步

又遇到一个call,所以我们还是跟进看一下里面有没有我们想要的东西,摁F7跟进

图2-14 F7跟进

跟进以后,右边注释还是没有我们想要的跟main函数有关的,但是下面有个retn,所以我们摁ctrl + F9跳到retn,然后再F7跟进一下看retn出来是什么

图2-15 再一次retn出来

还是什么都没有,所以我们继续上述操作跟进下面的call,当然还是什么都没有,所以我们继续跳到retn,然后跟进retn,然后继续下一步,这时候我们会下一步到一个“je”

图2-16 遇到je

这里稍微解释一下“je”是什么,后面会详细讲,“je”的含义是条件跳转,我们在这里就把他理解为跳转就行了,所以我们摁F7跳转,跳转以后继续下一步F8,遇到jmp或者call继续跟进,跟进以后如果什么都没有就直接ctrl + F9跳转到retn然后F7跳转出来

步骤确实很繁琐而且漫长,并且中间不能出错,如果出错,就只能摁ctrl + F2重新开始。到最后我们肯定会找到下图所示的样子

图2-17 messagebox

终于找到了,我们main函数的地址是00401000,这里我还暂时不会给大家讲其他的操作,我们本章主要讲的就是如何查找main函数

2.4 字符串检索法

刚才不停跳转的方法确实也能查找到main函数但实在是太坑爹了,这里讲一种简单方法——字符串检索法

图2-18 智能搜索

点击“智能搜索”以后,我们看到下面的图

图2-19 智能搜索(续)

“csdn.net”和”Hello World!”不正是我们想要找的关键字吗,我们双击进去看看

图2-20 再次找到main函数

我们又一次找到main函数了,这种方法方便多了!

2.5 API检索法

我们讲过了很复杂的方法,讲了个很简单的方法,现在要讲一个很巧妙的方法——API检索法

API检索法主要用在你知道这个程序调用了什么函数,比方说我们一开始的那个程序,我们一看就知道肯定是调用了messagebox这个函数,所以我们可以直接找到调用函数的位置,下面我们就讲讲如何使用API检索

图2-21 api检索

打开之后是下图所示的界面,因为我们猜测这个程序使用了messagebox函数,所以我们直接搜索messagebos,不用摁任何会计俄舰,直接在下图的界面打“messagebox”即可

图2-22 所有模块间按的调用

然后就会看到下图所示的界面

图2-23 查找messagebox

然后我们发现定位到了messagebox这一行,我们直接双击进去

图2-24 api检索成功

现在我们就检索到了,这种方法更快,但是要注意两点:

1.不支持win10环境,建议虚拟机安装个win7(不会不要紧,我会在后期写一篇如何安装虚拟机以及在虚拟机内装win7系统的教程)

2.有一定编程经验,看到程序能猜测出使用了什么函数

如果满足上面两个条件,建议使用api函数检索法

2.6 API模块检索+设置断点

图2-25 查找模块名称1

查找模块名称,然后结果如下图所示

图2-26 查找模块名称2

在这个界面,我们敲键盘字母,messagebox,一个一个敲出来,就会自己跳到相应的地址,如下图所示

图2-27 查找messagebox

因为messagebox这个函数是从user32.dll中实现的,所以我们双击进去看看

图2-28 进入模块

现在我们进入模块了,我们在头部加个断点,摁F2,然后运行程序,摁F9,这时程序就会停在断点处,这时看下图的右下角,我们能清楚看到里面的地址和内容

图2-29 设置断点并运行

然后我们摁下ctrl+G,跟随这个地址

图2-30 跟随地址

跟随这个地址以后,我们看到反汇编的窗口就又跳转到了我们的main函数

图2-31 又又又找到了main函数

本篇文章暂时讲这么多,下一篇文章会教大家如何修改值,也就相当于破解软件吧,修改成你想要的任何参数

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏debugeeker的专栏

《coredump问题原理探究》Linux x86版4.1节函数的逆向之序言

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

13320
来自专栏沈唁志

写给PHP开发者的五个建议

18140
来自专栏Zchannel

基于 Python 实现的用于命令行的速查工具:cheat.sh

13150
来自专栏博客园迁移

工作中的一些经验小结

控制层   返回值统一 AOP 也方便前台 AOP 统计执行时间记录日志   参数不要出现Request, Response   返回码定义 不...

7420
来自专栏有趣的Python和你

Flask学习笔记之模板(三)

我们都知道html模板中,很多内容都是有重复的,譬如前面的head和后面的footer部分,这里的部分都是重复的,我们可以通过今天的学习的技术,减少代码的使用量...

8320
来自专栏Python专栏

Python | 使用进程池统计指定范围内素数的个数

(1)了解使用Python标准库multiprocessing编写多进程程序的方法。

24020
来自专栏xiaoheike

es suggest did you mean资料

term suggester 根据提供的文档提供搜索关键词的建议,也就是关键词自动纠错。该链接介绍如何使用 term suggester 语法。term sug...

27530
来自专栏编程

Python教学——第七天

如果你前面都跟着文章做了,相信你已经自己在私下也了解了很多知识 如果你之前全都没有跟着做,也没有关系,至少你可以了解一个概念,对将来动手的时候会有一定的帮助 如...

25550
来自专栏Android干货

Android项目实战(四十六):Usb转串口通讯(CH34xUARTDriver)

38760
来自专栏编程坑太多

python3爬新浪新闻

18870

扫码关注云+社区

领取腾讯云代金券