逆向实战 2#去除程序注册、正版校验,绕过联网校验

文章目录

  • 逆向实战 2#去除程序注册、正版校验,绕过联网校验
    • 环境 & 工具
    • 去除注册
      • 行为分析
      • 过程分析
      • 效果检验
    • 去除联网校验
      • 行为分析
      • 过程分析
      • 效果检验
    • 去除完整性(正版)校验
      • 行为分析
      • 过程分析
      • 效果分析

慢慢难起来了,直接猛男落泪

在国家包吃包住的路上又艰难迈进一小步【doge】

省流助手:啰嗦至极菜鸡学习笔记,多图警告

环境 & 工具

  • win xp 32位
  • 吾爱破解版ollydbg

去除注册

行为分析

首先拖进PEiD查壳,发现未加壳

点击注册,出现“未注册版本”。

可以输入注册码,随便输入一串字符然后点击确认,软件退出,没有特殊提示。

随后自动再次打开,仍为未注册版本

过程分析

既然目前为“未注册版本”,那么自然有“已注册版本”或者“注册版”,所以,而且这个提示应该是在软件已经确认注册码有效之后才会出现,所以不妨从已确认的结果向前反推认证的过程,所以首先在OD中搜索“注册”字符串,找到程序判断注册是否成功的位置

双击跳转到相关代码,发现在将“已注册版本”压入寄存器中操作前,存在着一个跳转,直接跳过了赋值语句

那么显而易见地,想要使得程序成功注册,我们就需要让上述跳转不执行,而关键的判断就是变量ds:0x579F24的值是否为0,所以这里我们搜索与这个地址有关的赋值和判断语句(右键->查找->所有常量)

在Reference窗口中可以看见相关的搜索结果,保险起见,我们把相关的语句全部下一个断点,然后重载并运行函数

第一个在0x541650处的断点被触发,观察代码,发现该语句给目标地址赋值为1,而我们的目的是让目标地址不被赋值为0,与目标相符。

再仔细查看赋值语句是否有前后文跳转关系,结果发现了一个跳转,使得mov dl, 0x1的语句被跳过,所以为了目标地址被顺利赋值为1,需要使上文的无条件跳转不实现,此时观察该语句

想要使得该语句不执行,则需要在前面的两个je跳转语句成功跳转,所以此时为了到0x54164E语句的跳转顺利执行,可以把0x541648处的跳转改为无条件跳转jmp。处理完毕后,删除断点,重载并执行程序

程序执行到了0x54169E——直接跳过了对al的赋值,执行目标地址值的判断,观察到eax寄存器值为0,故此时目标地址将被赋0。观察前文跳转,可以看见0x541698处将eax寄存器置零,随即直接跳转至当前地址。

为了使该跳转不实现,将无条件跳转指令填充为NOP指令,随后取消相关断点,重载并重新运行程序

这次程序停在了 cmp byte ptr ds:[0x579F24],0x0 处,该语句的前一条语句是将目标地址赋值为零,但是该语句并未执行,输入command d 0x579F24 在数据窗口中查看当前目标地址的值,发现目标地址对应值已经为0,于是查看上下文,发现并没有跳转语句能使该语句与前一条赋值语句不被执行,所以认为此处的跳转与目标不冲突,继续执行程序

此时程序直接开始运行,于是点击程序中的注册按钮,程序重新暂停,暂停位置为已注册版本前方的目标地址值表语句,此时在数据窗口中观察目标地址的值为0,故此处需要阻止下方的je跳转,于是使用NOP填充

至此,注册去除完毕

效果检验

去除联网校验

虽然已经成功注册,但是程序还有第二道验证——联网验证

行为分析

尝试连接服务器结合机器码判别注册有效性,如果未联网,则弹窗

过程分析

由于程序在联网前的功能已经正常,所以此处直接把联网相关代码段绕过即可

搜索**“正在验证”**的字样,查看相关代码段

下文中还有验证失败等字样,故判断当前函数即为联网验证函数,所以尝试把函数段首语句改为retn,保存查看是否还有联网验证

效果检验

成功绕过,但这个联网验证属实有点。。。emmmmmm,只能说聊胜于无,而且这个绕过多少有点运气成分,因为不知道那个联网验证中是否还有其他的暗桩,到时可以仔细看看有没有别的方式绕过,尽量少地改动源程序

去除完整性(正版)校验

行为分析

patch后的程序在插入随机数字或者随机字母的时候会出现乱码

过程分析

这个可以说是这个程序最难绕过的校验了,首先触发时不会有任何提示,其次不知道触发原因。但52破解的大佬之前破解这个程序时,发现了当使用补丁进行破解时,这个暗桩不会被触发,但是如果直接在源程序的基础上patch,那就会触发乱码暗桩,所以这里不难推测,这个程序应该是进行了完整性或者正版的校验

所以我们把程序拖到IDA里,使用find crypt插件查看是否有加密或者校验算法,结果确实在程序中发现了CRC和MD5算法

目前,我们已知的为数不多的信息是:

  • 在点击插入随机字符按钮时,暗桩会被触发

  • 在查壳的时候,我们知道了这个程序是用Delphi写的

  • 执行MD5或者CRC算法时会执行文件读的操作

所以,我们尝试在程序所有的按钮事件上下断点,然后把校验的区间缩短到点击按钮到输出字符这个范围内

这里选择使用ollydbg脚本进行按钮事件的断点布置

然后让程序运行起来,并尝试插入随机字符,从程序停下来的位置开始调试

首先单击**“插入其他”**按钮,程序中断,删除当前断点,继续运行程序

然后点击**“插入随机字母”**按钮,程序中断,随后可以从当前位置开始搜寻程序校验点

但是要在密密麻麻的call语句中搜寻无异于海底捞针,所以计划进行关键函数的定位以进一步减小搜寻范围

首先在IDA里看看程序用到了哪些API,先筛选一下其中嫌疑比较大的,这时,读文件的API ReadFile就映入眼帘

在按钮事件断点被触发后,激活该断点,继续运行函数,程序果然停下来了

(题外话,这个代码写的也太恶心了,每次插入随机元素的时候都要读一次文件做一次校验,感觉没有任何意义呀,总不能说我破解个程序一边运行MD5值还会一直变吧,读文件的开销那么大,属于是初见雏形的shit山代码了)

此时运行到readfile函数结束,跳出到父函数,没有发现有用信息,继续跳出,持续此过程

一直到这个位置找到了MD5的计算结果,而下方的循环就是将原版程序的MD5与当前程序的做对比,要是想要通过当前校验,需要将local.6(ebp-0x18)中的当前MD5改为原版程序的MD5

所以此处需要使用mov指令将原版MD5移到指定位置,但这样的语句自然是不可以在当前代码的基础上patch,因为长度不相符,所以需要将当前代码在程序的其他位置进行重写,然后使用jmp指令进行无条件跳转执行

一直到这一步其实要是我自己做的话肯定找不到,这部分的MD5校验属于是知道了答案找题目

找到一块代码段的空地址,将判断段代码搬过去,并且用MD5原值提前将现MD5值覆盖(保险起见,可以做一下栈平衡)

注意0x56B0D8处循环跳转地址需要改成新代码段的地址

在原代码段加上到新代码段的跳转

这波啊,这波是狸猫换太子

效果分析

复现样本、工具下载

本博文仅以学习交流为目的,侵删

逆向实战 2#去除程序注册、正版校验,绕过联网校验相关推荐

  1. 小程序高级电商前端第1周走进Web全栈工程师一----小程序注册、开发工具推荐、《风袖》首页布局详尽分析、Webstorm开发小程序必配配置、mock数据...

    接下来开启一门全新的课程的学习,其实这是去年6月份所记录的,只是木有公开,然后到目前为止已经间隔了快1年没管了,基本上是已经快放弃的节奏,但是呢它又是我一直特别想学习的,所以决定公开,鞭策自己得继续前 ...

  2. 实战课【1】jQuery实现表单校验及布局

    实战课[1]jQuery实现表单校验及布局 在学习完html,css,js,mysql,jdbc,Servlet,filter,ajax,maven等web基础知识后,开始进行项目实战.此文就会记录在 ...

  3. IDA Pro逆向实战之Crackme(简单篇)

    IDA Pro逆向实战之Crackme(简单篇) 今天手闲的很,没事就拿出了以前没解决的逆向题来做一下,具体的源程序在附件里,废话少说,直接上菜: 0.   源程序运行效果(输入不对的,直接退出): ...

  4. 微信小程序注册/登录接口开发

    文章目录 后端有关说明 前端有关说明 接口设计 小程序注册/登录接口 APP 注册/登录接口 PC Web 端的注册/登录接口 小程序注册/登录序列图 校验 token 后端有关说明 登录和注册的逻辑 ...

  5. 【Python 爬虫简单的JavaScript逆向实战】抓取中国电影票房的数据

    开篇闲聊 最近也是看完了崔庆才爬虫52讲里面JavaScript逆向部分,里面介绍了从简单到复杂整个JavaScript逆向的方法,里面也有一些实战案例(可以练习的),跟着视频练习之后,虽然也成功了, ...

  6. 实战CRC校验 | 固件如何校验自身完整性?

    来源:公众号[鱼鹰谈单片机] 作者:鱼鹰Osprey 在一些比较严格的行业里面,不是说你的程序能完成必要功能就可以,还需要添加一些额外的功能,比如最常见的看门狗功能,它可以在程序死机时完成重启,但也仅 ...

  7. 爬虫-Webpack逆向实战 有习题

    爬虫-Webpack逆向实战 我只要喝点果粒橙关注IP属地: 青海 0.1052022.04.30 19:21:46字数 4,875阅读 5,142 全文目录 webpack打包是前端js模块化压缩打 ...

  8. 通过jsl工具将java程序注册为windows服务

    通过jsl工具将java程序注册为windows服务 首先下载jsl工具包,主要有jsl.exe可执行文件和jsl.ini配置信息文件 jsl 下载地址 在应用目录下新建以下几个路径 lib目录内容如 ...

  9. Zabbix实战之客户端自动注册

    Zabbix实战之客户端自动注册 一.自动注册与自动发现定义 二.修改客户端zabbix-agent2配置文件 三.检查配置文件修改内容 四.重启服务与验证通信 1.客户端重启服务 2.服务端验证和客 ...

  10. 万能门店小程序_超市门店微信小程序注册流程

    现在超市门店商家利用小程序卖货已经非常普遍,小程序可以便捷地连接线上线下通道,让商家不再局限于门店周围的流量,能够从微信获取更多客户,从而提升销量和店铺知名度.超市要想有自己的线上电商小程序,就得先注 ...

最新文章

  1. shell 获取字符串/文件的MD5值
  2. js目标时间与当前时间差转换年月日天数
  3. leetcode345——Reverse Vowels of a String(C++)
  4. 近世代数--内直积--内直积是什么?充要条件?
  5. 【算法基础】十大经典排序算法(动图)
  6. python中swap函数_python swap
  7. MTK 驱动开发(3)---GPIO口的使用方法汇总
  8. 寻访x86处理器“实模式”和“保护模式”的前世今生
  9. 笨方法学习python
  10. excel向下填充公式快捷键
  11. 使用vue中遇到的一些问题以及解决方案
  12. 自动注册gmail邮箱构想
  13. Python调用腾讯API实现人脸检测
  14. Windows UI 测试
  15. 【kafka】二、kafka安装
  16. 先验分布,后验分布,共轭分布的关系
  17. 中小团队落地配置中心详解
  18. ENFI下载器地址——百度网盘不限速下载工具
  19. 随笔-vue项目引入axios
  20. 《番茄工作法》让你的一天变成26小时

热门文章

  1. Vagrant启动报错
  2. PyTorch笔记 - Dropout: A Simple Way to Prevent Neural Networks from Overfitting
  3. idea新建sourceFolder
  4. ANDROID_MARS学习笔记_S01原始版_009_下载文件
  5. 81章 老子1章到_三曜道长解读道德经: 信言不美 第81章
  6. 国产计算机系统哪个好,5大国产手机操作系统分析评测,你更中意谁?
  7. php 缩略图黑图,一睡万年_119 黑图(上) - 小说者
  8. 使用VLC搭建视频直播服务器
  9. U盘格式化后容量变小恢复方法
  10. 兜兜转转躲不命运轮回---Java基础学习笔记2