本帖最后由 书香 于 2024-2-10 12:45 编辑
在002课中【S01E02】Shark恒 零基础逆向教程之图文版【获得注册码】中,shark恒站长为我们演示了一个获取注册码的功能
关于这一课,shark恒老师的文章很多人可能还没有领会到精髓甚至有点懵,看一下就划走了,shark恒老师的这一课实际上是对几乎所有本地验证+网络验证进行逆向操作的一个基础框架设计
这个教程实际上是shark恒老师少讲了一个操作步骤,应该是怕大家听不懂,毕竟很多人不懂开发,引入这个参数很多人可能直接就蒙了,但是大家已经跟我学过编程了,所以接下来我来为大家还原这种类型程序的全部操作流程
大家可以看到的就是name(用户名)和code(作者给你的授权码)这2个输入框,实际上少了一个参数,那就是机器码,这个软件全是英文的有些朋友可能看不懂,书香给大家写了一个
使用方法:
①:首先点击获取机器码,然后把用户名(随便写的)和机器码发给程序作者
机器码的意思是机器特征码,这个是自定义的,就是提取设备的硬件信息(cpu序列号、内存条序列号、硬盘序列号等等)进行混合运算后得出的结果,下面是我的取机器码的算法
变量名 | 类 型 | 静态 | 数组 | 备 注 | cpu序列号 | 文本型 | | | 机器码 | 文本型 | | |
cpu序列号 = 系统_取CPU序列号 ()机器码 = 文本_加密 (cpu序列号, “key”) 返回 (机器码 )
②:程序作者写了一个注册机,可以将用户名和机器码进行混合运算,得出的结果叫授权码(code),下面是我的取授权码的算法
注册机源码下载:
注册机.rar
(265.85 KB, 下载次数: 0)
精易模块下载:
精易模块[v11.1.5].rar
(780.28 KB, 下载次数: 0)
(这个模块大家应该很熟悉了)
这是我写的一个自定义混合运算,文本_加密是精易模块的命令
③:作者会把授权码发给你,你填写到软件上(授权码、code),然后点击登录
④:软件里也会有一个计算授权码的功能,算法和注册机一致
测试程序源码下载:
002课件.rar
(231.12 KB, 下载次数: 1)
变量名 | 类 型 | 静态 | 数组 | 备 注 | 计算出的授权码 | 文本型 | | | 输入的授权码 | 文本型 | | | 机器码 | 文本型 | | |
机器码 = 获取机器码 ()计算出的授权码 = 计算授权码 (机器码, 编辑框_用户名.内容 )返回值 = 文本_加密 (机器码, 用户名 )返回 (返回值 )
⑤:将计算得到的授权码和作者发给你的授权码去对比,如果一致这说明验证成功
这便是本地验证系列使用的全部过程
————————————————————————————
接下来我讲解一下shark恒老师的思路,大家有没有用过那种修改器的,比如玩个单机小游戏,我们可以去修改自己攻击、防御等,说的专业点就是内存操作
这个变量的数据是存储在内存的,shark恒老师相当于直接通过内存访问,读了这个变量存储在内存中的数据(授权码结果存储在里面),是不是突然有种充满智慧豁然开朗的感觉?
拓展难点:
这也是很多人在逆向中最常用的手段之一,我先等你计算完了,然后下个断点,然后内存修改计算的地方,然后下一句判断代码调用的就是修改后的数据了,这种手法就叫(叫什么呢,我也忘了,哈哈哈哈哈,我主要搞开发框架的,现在也不知道当前流行的行话叫什么,打补丁还是什么,我就叫他内存修改吧.......不要在意这些细节),所以我为什么说大家没理解shark恒老师这一课图文的精髓之处,别管什么数据加密,反正你最终要解密,我在你最终解密的地方下断点,然后内存写入我修改的数据(数据和你后台一样的,一般通过抓包等方式拦截获取的),这方法几乎可以通杀大多数程序,还是继续讲理论吧
——————————————————————————————
问题1:什么是CALL
CALL就是子程序,易语言里面带括号的,红色的代码,什么是关键CALL,这是人为命名的,你觉得他关键他就关键
问题2:为什么还要搜索“验证成功”等字符?
实际上就是为了找到判断的地方
问题3:判断(跳转,汇编代码叫je,其实je只是其中一个)上方找CALL的含义
对于本地验证而言,一般情况判断上面肯定是计算授权码的子程序功能
问题4:找到call以后呢
我知道肯定有人要怎么问的,其实文章上面有答案了,找到以后就下断点,od会帮我们读取内存数据
————————————————————————————
本系列上一级链接: 【易语言od联动学习系列简介】
|