花墨 发表于 2015-1-12 11:10:41

某GPS软件Java层去功能限制分析

本帖最后由 花墨 于 2015-1-12 14:42 编辑

【APP名称】MapGGgugeban【分析工具】Android Killer【工具下载】http://www.pd521.com/thread-136-1-1.html【APP下载地址】链接:http://pan.baidu.com/s/1hqw1OJq密码:kw5i
APP来自论坛一哥们,原文地址:http://www.pd521.com/thread-181-1-1.html。打开软件后,首先映入眼帘的是这个(如果软件无法安装,请先安装Google相关服务):

然后就看注册页面:

软件通过注册码的形式来限制功能,最简单的就是通过爆破来解除限制,当点击确定后无任何提示,包括其他功能也是,点击后无任何反应,这就不能通过搜索关键词的方式来,AK有一个很方便的功能:查看APK中的所有字符串,将APK拖入AndroidKiller中,点击代码框右上角的小眼睛,像这样:
从这里可以查看当前APK所有(Java层)的字符串,看看能有什么发现:

于是,我们像哥伦布发现新大陆般看到了希望,双击字符串定位到所在位置,代码如下:
:pswitch_15
    iget-boolean v0, p0, Lmapgg/pack/MapggActivity;->af:Z

    if-eqz v0, :cond_7

    const-string v0, "\u60a8\u5df2\u6ce8\u518c,\u8c22\u8c22!"#您已注册,谢谢!

    invoke-static {p0, v0, v6}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;

    move-result-object v0

    invoke-virtual {v0}, Landroid/widget/Toast;->show()V

goto/16 :goto_0

目前我们觉得这里是关键跳转:“if-eqz v0, :cond_7”,如果v0等于0的话就跳转,
如果不让它跳转会怎样? 把eqz改成nez,像这样:

你没看错,是代码提示,是不是很IDE?
运行下试试:

看着弹出的这个提示是不是很开森?当我们满怀希望去试试那些没解锁的功能的时候发现竟然还是没任何反应,并且上方“辅助信息”那里还是在提示注册,我们再看看有什么不对的地方。跳转处有一句“iget-booleanv0, p0, Lmapgg/pack/MapggActivity;->af:Z”,v0=af,af是个布尔型变量,现在可以猜测af存储着你是否已经注册,在AK中搜索af,发现MapggActivity.smali、r.smali、s.smali三个文件中都有af变量,现在我们可以这么想:作者是不是在每个功能触发前都会验证下是否已经注册(验证af是否为true)?那我们就先把入口文件的af的初始化值设为true,再将其他处的值也设为true,运行后会发现点击注册后竟然又提示输入注册码,再来仔细看下代码:
片段一:iput-boolean v11, p0, Lmapgg/pack/MapggActivity;->af:Z

iput-boolean v11, p0, Lmapgg/pack/MapggActivity;->al:Z

片段二:iput-boolean v5, p0, Lmapgg/pack/MapggActivity;->af:Z

    iput-boolean v5, p0, Lmapgg/pack/MapggActivity;->al:Z

片段三:iput-boolean v4, p0, Lmapgg/pack/MapggActivity;->al:Z

    iput-boolean v5, p0, Lmapgg/pack/MapggActivity;->af:Z

查看所有af的代码后我们会发现,每个af的附近都会有一个al变量,并且al的值也是布尔型,这时候我们可以这么想:作者意识到直接判断会很容易被破解,于是可爱的作者就用了两个变量来判断是否已经注册。那就将al的值也都改为true试试(改坏了又不花钱( ╯□╰ )),注意,不要搜索al,只改af附近的al即可,运行后,会发现这个:

画面太美,我不敢看!
再来试试功能有没有限制:

点击菜单中的功能后终于有了反应。
直接点击地图也会直接定位坐标,像这样:

到此也就结束了,不过当你点击注册的时候还会弹出注册框,不过那已经不重要了。

结语:破解还是靠些许运气,当然,你技术够牛也就不需要什么运气,本篇文章是新手教程,记录了我在破解过程中的想法及思路,不喜勿喷,老鸟飞过,如有雷同,不胜荣幸,转载还请注明出处,谢谢各位看到这里。

野驴~ 发表于 2015-1-12 12:01:21

画面太美,不敢看。org请收下我的膝盖

野驴~ 发表于 2015-1-12 12:25:56

你的可议设置中央经线么?我怎么设置都是0

花墨 发表于 2015-1-12 13:39:20

野驴~ 发表于 2015-1-12 12:25
你的可议设置中央经线么?我怎么设置都是0

麻烦你把你的设置截图下看看

myoldid 发表于 2015-1-12 14:19:55


这里该是附近吧?
我开始是把显示让激活和显示经纬度信息那里的跳转改了,只能实现显示经纬度信息。然后想到的思路是把读取到的“每小时最后5分钟”那里给锁定,但我实现不了:'(

花墨 发表于 2015-1-12 14:46:10

myoldid 发表于 2015-1-12 14:19
这里该是附近吧?
我开始是把显示让激活和显示经纬度信息那里的跳转改了,只能实现显示经纬度信息。然后想 ...

已改,谢谢,请问下“每小时最后5分钟”是什么?

kimel 发表于 2015-1-12 15:43:31

我是直接在MainActivity里把af和al变量在vx寄存器里的值给改了,和ak的值一样。
另外发现在修改前boolean af (al)= false; 而修改编译后,这个属性值就变成了true~~
PS:大神,那个代码提示是咋搞的呀?

花墨 发表于 2015-1-12 16:05:40

kimel 发表于 2015-1-12 15:43
我是直接在MainActivity里把af和al变量在vx寄存器里的值给改了,和ak的值一样。
另外发现在修改前boolean a ...

这样也很nice。

在代码编辑区直接输入就会有代码提示

kimel 发表于 2015-1-12 16:13:30

花墨 发表于 2015-1-12 16:05
这样也很nice。

在代码编辑区直接输入就会有代码提示

我试了啊,没有提示呀!!设置面板里也没有相关的设置耶~~

kimel 发表于 2015-1-12 16:15:26

花墨 发表于 2015-1-12 16:05
这样也很nice。

在代码编辑区直接输入就会有代码提示

我这个AK的版本是1.1.0.0的
页: [1] 2 3
查看完整版本: 某GPS软件Java层去功能限制分析