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

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

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

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

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

 

 

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

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

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

登陆修改

第三步分析登陆变量

 

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

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

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

 

 在上图中咱们发现,编译没法执行,缘由是缺乏运行依赖,咱们添加其依赖后编译保存便可破解登陆功能spa

 

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

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

 

 

 上图所选阴影十六进制字符则对应其修改区域的同行代码,因为十六进制代码实则为二进制机器码,且程序编译平台为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小时的破解探索过程也算是告一段落

 

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

相关文章
相关标签/搜索