逆向反编译之十六进制编辑器修改汇编指令破解软件登录和积分功能

作为一个计算机学者,在使用某些软件时常常需要用户登录,有时还会受到积分限制的困扰,令人烦恼,一生气就想把他破解了,

以下是我使用十六进制编辑器进行软件破解的原理思路和技巧,本文仅供技术交流,切莫进行恶意活动!!!

第一步使用工具进行简单脱壳处理

多数软件(尤其是利用高级语言JAVA之类的语言开发的应用),易于进行反汇编分析都由工具进行过加壳和代码混淆处理,将待破解主程序添加到分析工具中,利用工具进行简单的脱壳处理得到反编译源码进行分析

 

 

 第二部寻找程序运行入口及相关两变量

破解软件主要手段就是修改其程序判断条件,判断条件决定着程序的各类需求功能,因此寻找相关变量是非常必要的,而其相关变量主要集中在程序入口部分,而且阅读程序入口有助于理解整个程序框架

 在上图中我们看到,已经找到了程序入口和相关变量,文件路径,登录变量,版本,用户积分变量,接下来就要对登录变量和用户积分变量进行下手

登录修改

第三步分析登录变量

 

  找到变量定义和被赋值的地方,首先我们查看登录变量定义的地方,登录变量被赋值为false,我们将其永久更改为true,就可以逃过登录功能,当然也可以找到登录函数进行修改和删除,但是操作太过繁琐,更改控制变量相对比较简单,何乐而不为呢

  方法一首先尝试传统比较简单的修改方式

选择需要修改的类或成员,右键选择编辑类,直接将登录变量false改为true后进行编译

 

 在上图中我们发现,编译无法执行,原因是缺少运行依赖,我们添加其依赖后编译保存即可破解登录功能

 

方法二接下来我们介绍使用十六进制编辑器进行软件破解

由于十六进制看着眼花,建议选择要修改的为之后在进入十六进制编辑器

 

 

 上图所选阴影十六进制字符则对应其修改区域的同行代码,由于十六进制代码实则为二进制机器码,且程序编译平台为X86,所以箭头所指十六进制数16则为要给变量所附的值

我们将其改为17,十六进制数17对应其true编译种别码,不要问我为什么,下图是我的分析

 

我们将其改为17后进行保存,然后重新加载程序后查看修改位置,我们可以看到登录变量已经被修改为true

 之后还需要对其后登录变量赋值代码进行修改或删除

 修改完登录变量后,我们再来修改用户积分限制

积分修改

在使用十六进制编译器修改积分变量时存在内存偏移和内存越界问题,原因在于对于变量申请空间的限制,自己计算内粗便宜太麻烦,所以采用修改IF指令(MSIL汇编格式)来对积分变量赋值

 

 分析汇编指令

第24指令:将4字节整型(-128~127)数0送入堆栈(Evaluation Stack)中

第25指令:从堆栈中弹出值0并赋给jifenNum

所以我们修改第24条指令为 ldc.i4 0X12C ,将300赋值给积分变量后确定保存

 之后将后序对积分变量赋值代码段删除,确保积分值永远不变

 上图所选阴影十六进制字符则对应其修改区域的同行代码段,将其删除即可

 

 结束

到此为止,我们就通过十六进制编辑器编辑十六进制(二进制机器码)和通过修改汇编格式IL指令实现,跳过登陆限制和积分的各种限制

为期3小时的破解探索过程也算是告一段落

 

最后本文仅供技术交流,切莫进行恶意活动!!!

 

posted @ 2020-02-27 22:52  王义强  阅读(2542)  评论(0编辑  收藏  举报