好友
阅读权限 100
听众
最后登录 1970-1-1
本帖最后由 世事繁华皆成空 于 2015-5-11 19:00 编辑
原创:世事繁华皆成空
工具:ApkIDE,apk逆向助手,Notepad++原程序下载地址:http://apk.r1.market.hiapk.com/d ... ojectgps_051308.apk
软件介绍:GPS Pro 包括西安80、北京54等坐标系的时时转换显示,支持3参数的设置,支持显示当前坡度、坡向、海拔、中央经线、带号、一万图幅号、五万图幅号等信息,支持手持GPS的记录航点航迹和计算面积周长功能,支持数据交流和地图加载功能。
先看一下软件,任何破解 不可能上来就反编译,大家应该先使用一下,找到一些可能有用的关键点,去广告亦是如此
搜索关键词,“注册码错误”
来到java代码下,看到变量只有相等时才不会跳转失败,这地方我们不考虑算法,直接爆破,修改一下跳转
将eqz改成nez,这样就不会跳转到失败函数下了,我们回编译试试,因为我之前修改的时候一直回编译失败,所以采用提取dex文件反编译后用Notepad++修改,做教程时直接回编译成功了,这里就直接使用ApkIDE修改了
我们任意输入一个注册码,我输入了“1”,提示注册成功,很开心:)
不过我们再次开启软件后,提示“试用已到期”
看来软件有启动验证,我们再搜索关键词“试用已到期”
[Java] 纯文本查看 复制代码
iget v5, p0, Lcom/pksqs/projectgps/DisplayActivity;->isPro:I
if-eqz v5, :cond_1
iget v5, p0, Lcom/pksqs/projectgps/DisplayActivity;->isPro:I
if-ne v5, v8, :cond_2
:cond_1
iget v5, p0, Lcom/pksqs/projectgps/DisplayActivity;->isReg:I
if-eq v5, v8, :cond_2
.line 1725
const-string v5, "\u8bd5\u7528\u5df2\u5230\u671f\uff0c\u8bf7\u6ce8\u518c\uff1a"
invoke-direct {p0, v5}, Lcom/pksqs/projectgps/DisplayActivity;->sign(Ljava/lang/String;)V
这里有两个对软件版本的验证,如果是isPro,则不跳转,如果不是,则跳转到“试用已到期”,我们直接删除判断if-eqz v5, :cond_1这行,并将下面两个跳转强制跳转到:cond2
我们回编译试试
再次安装,唉,不提示软件过期了
不过当我们来到“关于”下,唉,好像有什么不对
看来我们并没有成功,让我们再看一下代码,我们发现刚刚有一行代码我们并没有重视
iget v5, p0, Lcom/pksqs/projectgps/DisplayActivity;->isReg:I
那我们搜索isReg,字眼也能看得出是判断是否已经注册,
第一个是定义变量,不用理会,我们看第二个,并来到方法的开始处
我们看到是constructor<init>,这是软件默认会加载的方法,看来我们之所以破解失败就是这个地方引起的,那我们再看到isReg处
iput v4, p0, Lcom/pksqs/projectgps/DisplayActivity;->isReg:I
我们看到这个地方调用了v4变量,我们找到v4的定义
看到此处的v4定义的-0x1,也就是-1(-1就是未注册,有的时候会用0来表示未注册),那我们修改为0x1,回编译
over,教程结束
免费评分
查看全部评分
发帖前要善用【论坛搜索 】 功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。