• 新时代幸福美丽新边疆 2019-09-15
  • 华强方特从“熊出没”走向内容产业化 2019-09-12
  • 暴瘦50斤,70岁的她爱穿比基尼,活得比少女还滋润! 2019-09-12
  • 科大讯飞拟募资金约36亿 加码人工智能 2019-09-05
  • 【人民映像】霍庆有:匠心神韵 杨柳青青 2019-09-05
  • 用责任制拧紧安全阀(快评) 2019-08-30
  • 和亲戚一起学习传统文化 2019-08-25
  • 美国对华加征关税相关新闻 2019-08-16
  • 乌苏市:“扶贫鸡”助力精准脱贫 2019-08-14
  • 一二线城市土地出让冰火两重天 2019-08-14
  • 西安高科工程技术学校——陕西省政府直属中等职业院校西安高科工程技术学校2018招生简章-陕西教育新闻 2019-08-07
  • Angelababy高扎马尾坐雪地大笑显俏皮 双手浸冰水被邓超赞“猛女” 2019-08-06
  • 游戏主播GodV韦神即兴演唱 这一声假音听的人都酥了 2019-08-01
  • 运城市在长三角招商引资149.9亿元 2019-07-29
  • AI识别图像技术相关新闻 2019-07-29
  • 吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|北京快三走势图一定牛 www.88pwc.com

     找回密码
     注册[Register]

    QQ登录

    只需一步,快速开始

    搜索
    查看: 3678|回复: 13
    上一主题 下一主题

    北京摇号申请网站入口: [Android 原创] 反编译竞品借鉴其功能

      [复制链接]
    跳转到指定楼层
    楼主
    hjw45611 发表于 2019-6-3 16:11 回帖奖励
    很长时间没发文章,一个是工作忙,另一个是写了几篇文章后感觉虎头蛇尾的,不想献丑。所以磨蹭到现在分享个平时经验出来。

    本文分享的是我在做项目的时候,经?;嵊玫降姆椒?,因为app嘛,大多数都是你抄我,我抄你,产品设计上很大程度上也是借鉴竞品的功能,有时候产品经理描述不清,直接让他把竞品发过来就OK了,所以在功能上,因为有些功能自己实现也能实现,但找轮子、调样式等一系列过程下来,还不如直接拿到竞品来借鉴一下。
    严重声明
    本文的意图只有一个就是通过分析app学习更多的逆向技术,如果有人利用本文知识和技术进行非法操作进行牟利,带来的任何法律责任都将由操作者本人承担,和本文作者无任何关系,最终还是希望大家能够秉着学习的心态阅读此文。


    本文竞品是一款数据分析的app,BDP个人版,主要是把网站上建立的数据图表模型在手机app上展示出来,app上主要功能就是图表,我的目标是把它里面的图表功能??楹褪质泼苈牍δ苣贸隼唇杓幌?。
    1.反编译apk

    使用apktool.jar反编译得到相关资源文件

    使用jadx -d out反编译得到所有java文件

    使用jadx-gui查看源代码,结构如下:

    可以看到主要功能为图表库,其他都是开源可用的组件,至于为什么它要自己实现图表功能,而不使用开源最为广泛的hellocharts-androidMPAndroidChart,可能主要是开源图表框架并不满足需求吧,bdp部分图表如下:

    开源图表框架并不能实现需求,所以我们直接拿来主义吧
    2.编译mcchart

    自己新建一个项目,然后选择File->New->New Module->Android Library,命名也为mcchart
    复制java文件
    直接复制反编译mcchart文件夹中的所有文件到mcchart Library中,点开一个文件, 就可以看到java文件中import的都报错了,然后根据反编译mcchart中的java文件的包名修改这个库的java包名。
    引入资源文件与第三方支持
    还是有不少报错,有的是缺少第三方支持库,有的缺少R.drawable等资源文件,缺少的一一引入即可,例如:

    可见是缺少nineoldandroids这个开源动画库,直接在 GitHub 下载jar包引入即可。

    第三方支持库主要有百度地图和nineoldandroids的jar包,SVGMapView的library。
    修改代码错误
    在代码中还是有不少错误的,毕竟是从反编译成java代码的,错误中主要有父类错误、for循环错误、JADX WARNING这大致三种。
    父类错误
    这类错误是反编译后发现程序中应该声明的变量类型是父类,导致不能使用子类的某些属性和方法,比如Object i=0;switch(i){case 0:break}就会报错。

    例如:

    这种错误很常见,直接把父类修改为子类即可

    for循环错误

    反编译得到的java代码中是没有for循环的,因为for循环在Smali中是类似while循环,满足条件后break,所以反编译成java后得到的是while循环,所以循环语句都是又臭又长,还有可能有多个break出错,所以应该根据语义重写。

    JADX WARNING

    这个是反编译中很常见的错误,是jadx在把Smali转化为java的过程中方法内语句错误,方法就会变成这样:

    解决方法是把jadx-gui中文件->设置->显示不一致的代码 勾选后保存,然后就可以看到jadx-gui中代码变成这样:

    这样处理后的代码是伪代码,可能会有错误,所以还是需要对该方法的功能有整体的了解,并阅读Smali后进行适当修改。

    经过上述修改后,mcchart基本可用了。当然,图表的使用方法就有待摸索了,如果用过hellocharts-android或MPAndroidChart,图表的使用上还是很容易上手的。
    3.手势密码功能
    开启
    验证
    关闭


    可以看到这三个页面实现了手势密码的开启、验证与关闭。所以很容易拿到这三个页面的相关代码实现。

    先新建Library,选择File->New->New Module->Android Library,命名为gestures

    复制java文件

    jadx搜索SetupLockActivity,根据包名路径修改Library,在对应位置新建class  SetupLockActivity,复制jadx中的java代码,注意这次是和mcchart步骤不同的,是复制的jadx-gui中的java代码,并不是直接复制文件到Library中,因为mcchart中并不会混淆其中的类名、变量名以及方法名,而手势密码功能只是几个activity,所以其中大量类都是被混淆的,使用中有大量同名变量和类,非常不方便,但jadx-gui中开启了反混淆,例如:public class b 会变成public class C1712b,在使用中减少很多报错。


    例如在方法中有一个临时int变量b,在调用另一个类b中方法时,会认为b是这个临时int变量b,所以报错。


    在 jadx-gui中开启了反混淆后不会出现该问题:


    开启方法如下:


    引入资源文件和相关类

    看界面就知道手势密码功能引入了自定义的View,所以需要根据activity中的报错,引入layout、drawable、string、color等资源文件和自定义view类。

    解决报错

    错误解决除了在图表??橛龅降奈侍馔獯笾禄褂姓饬礁霰ù?/div>

    主要功能外的报错

    有不少人看到没有引入文件报错了就开始找文件并引入,这并没有错,但在反编译他人项目的时候并不妥当,我们要从功能出发,不能只会Control +C/V,与功能无关的直接先注释掉。


    类似继承的BaseActivity相关的方法代码,成功或者失败后要保存的数据或者跳转都是无关的代码,应该根据运行结果再理清方法代表含义

    匿名内部类报错

    我们平时写的匿名内部类,在编译后其实会生成一个类。所以new Runnable或者new OnClickListener等匿名内部类会报错,例如:


    该类其实就是new Runnable实现的:


    直接修改即可:



    经过修改后,SetupLockActivity页面就可以运行了。根据相应步骤可以实现其它页面的功能。


    SetupLockActivity页面效果如下:



    本文没什么技术难点,只是讲讲自己的项目心得。当然如果想要以此方法来做项目功能,前提是你要对功能有一个整体的把握,能大致知道它用到了什么技术点,才能化繁为简,从中找到关键点。希望大家一起学习进步。

    免费评分

    参与人数 4威望 +2 吾爱币 +15 热心值 +4 收起 理由
    qtfreet00 + 2 + 12 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
    qaz003 + 1 + 1 666
    jingyangpc + 1 + 1 谢谢@Thanks!
    独行风云 + 1 + 1 谢谢@Thanks!

    查看全部评分

    发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

    推荐
     楼主| hjw45611 发表于 2019-6-5 09:42 <
    rickw 发表于 2019-6-4 20:10
    这个“”借鉴“”会有法律风险吧。

    你可能不知道国内某些手机大厂都有类似的逆向人员,其他厂商新品手机有什么新功能都会借鉴研究一下,不然你以为为什么升降式摄像头说来都来了,要是自己研发,估计黄花菜都凉了。至于法律风险,论文查重了解一下,拿到源码后自己改的自己都不认识了,谁说你是“借鉴”的??
    推荐
    stars-one 发表于 2019-6-3 21:59
    让我不爱你 发表于 2019-6-3 18:50
    上次折腾过一次类似的功能,好在自定义View的代码是不会完全混淆的

    是嘛,准备折腾一下一加天气的动态图,贼好看!
    沙发
    让我不爱你 发表于 2019-6-3 18:50
    上次折腾过一次类似的功能,好在自定义View的代码是不会完全混淆的
    4#
    hkdg009 发表于 2019-6-4 12:57
    支持看看??!
    5#
    cdevil 发表于 2019-6-4 13:24
    666,楼主分享的知识太棒了
    6#
    Codexu 发表于 2019-6-4 13:51
    &#128002;&#127866;牛批牛批
    7#
    dokuro 发表于 2019-6-4 15:31
    路过,学习了
    8#
    rickw 发表于 2019-6-4 20:10
    这个“”借鉴“”会有法律风险吧。
    9#
    thornfish 发表于 2019-6-5 08:35
    有软著的话有风险
    您需要登录后才可以回帖 登录 | 注册[Register]

    本版积分规则 警告:禁止回复与主题无关内容,违者重罚!

    快速回复 收藏帖子 返回列表 搜索

    RSS订阅|小黑屋|联系我们|北京快三走势图一定牛 ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

    GMT+8, 2019-9-17 10:09

    Powered by Discuz!

    © 2001-2017 Comsenz Inc.

    快速回复 北京快三走势图一定牛 返回列表
  • 新时代幸福美丽新边疆 2019-09-15
  • 华强方特从“熊出没”走向内容产业化 2019-09-12
  • 暴瘦50斤,70岁的她爱穿比基尼,活得比少女还滋润! 2019-09-12
  • 科大讯飞拟募资金约36亿 加码人工智能 2019-09-05
  • 【人民映像】霍庆有:匠心神韵 杨柳青青 2019-09-05
  • 用责任制拧紧安全阀(快评) 2019-08-30
  • 和亲戚一起学习传统文化 2019-08-25
  • 美国对华加征关税相关新闻 2019-08-16
  • 乌苏市:“扶贫鸡”助力精准脱贫 2019-08-14
  • 一二线城市土地出让冰火两重天 2019-08-14
  • 西安高科工程技术学校——陕西省政府直属中等职业院校西安高科工程技术学校2018招生简章-陕西教育新闻 2019-08-07
  • Angelababy高扎马尾坐雪地大笑显俏皮 双手浸冰水被邓超赞“猛女” 2019-08-06
  • 游戏主播GodV韦神即兴演唱 这一声假音听的人都酥了 2019-08-01
  • 运城市在长三角招商引资149.9亿元 2019-07-29
  • AI识别图像技术相关新闻 2019-07-29
  • 广东快乐10分一定牛 幸运农场平台 请问今晚3d试机号多少 2013曾道人点特玄机图 体彩山西十一选五开奖结果 摇钱树平特心水论坛 内蒙古时时彩趋势图 意甲小旋风主题曲 福彩快乐12 广东11选5杀码网 可以赌钱的糖果游戏叫什么 18选7开奖 3d3o期走势图 湖北体彩11选5中奖结果 幸运农场期开奖结果查询