❶ 怎么对android app实现逆向分析
首先,逆向分析是一门技术,也是一门艺术。
其次,安卓逆向同样可细分为应用层APK逆向、安卓设备框架、内核驱动等逆向、基于安卓的硬件产品逆向等。此处假定楼主说的是第一种逆向。
应用层的逆向分析根据需求的不同,又可细分成APK流程逆向与功能逆向。
流程逆向通常是指简单的对APK运行流程进行分析,此类分析通常可以使用将APK置于沙盒环境中运行捕捉并查看运行结果。这种逆向需求通常不是很多,典型的工种有杀软厂商的病毒分析工程师。
功能逆向相比流程逆向则困难得多。但需求比较普遍。实际逆向分析过程中对功能实现的理解,在很大程度上取决于逆向人员相关的软件开发知识。比如,分析Android程序的JAVA代码就需要掌握基本的Android软件开发的知识。分析so库的代码就需要了解C/C++相关的so库开发的知识。除了基本开发相关的能力外,逆向分析人员还需要具备以下知识:
ARM/X86/MIPS汇编语言-分析so库时可能需要阅读大量的反汇编代码。
常见逆向分析工具的使用-JDGUI/IDA PRO/APKTOOL/JEB/DEX2JAR
常用的安卓程序调试与反调试手段-调试器检测与反检测/脱壳/反混淆
常用的加密与解密算法-好的逆向分析人员需要有快速识别常见加密解密算法的能力
最后,就是多动手,多动手练习是掌握逆向分析技术最好的方法。
❷ 如何看到一个APP应用的源代码
一、安卓APP
用android-killer可以反编译apk,比较方便,不过只能看到smail文件,学习一点smail,你可以看明白他的源代码的意思,如果有壳的话,先改apk后缀后为zip,找到加壳的so文件,一般如名字中带xxxprotect.so 用网络,360,腾讯厂商加固的话,也都有对应特点,然后把这个so文件用IDA pro打开,找到它的关键加密算法。找到后,一版是不让进加密算法,直接return。就可去壳,去了壳之后,再进行重打包签名,测试下。
二、ios上的app一般走如下流程
1、 拿个越狱机-下好工具
2、 去越狱平台下个想分析的应用(或者去app store下,用解密工具解密一下)
3、 导入reveal分析页面,得到想要的知道的具体视图类或者大致范围
4、 分析class-mp中,找到想要的类和函数
5、 在IDA或者Hopper中找到具体函数,查看汇编逻辑
6、 修改相应的逻辑,达到篡改目的,重新打包
❸ 开发一个App软件成本是怎么计算的
开发一个App软件成本是怎么计算的呢?
一航接触过很多想通过APP作为产品去进行创业的创业者,在找到软件团队简单的阐述完自己的需求后,紧接着就是问价“我想开发的这款APP大约要多少钱”,更有甚者连需求都不说“我想做一个类似XXX的APP要多少钱”。
互联网是个神奇的大网,大数据开发和软件定制也是一种模式,这里提供最详细的报价,如果你真的想做,可以来这里,这个手机的开始数字是一伍扒中间的是壹壹三三最后的是泗柒泗泗,按照顺序组合起来就可以找到,我想说的是,除非你想做或者了解这方面的内容,如果只是凑热闹的话,就不要来了。
上面对话中8万的报价可能包含了3万元的需求不确定性,商务经理或产品经理只能凭借自己的行业经验进行粗略的评估。当然绝对不可能有10万元工作量,即便如此也会在正式签订合同时再进行追加。赔钱做是不可能的了,如果客户不同意追加费用,那宁可不接这一单,哪有对待陌生客户还赔钱做生意的道理。
做为创业者资金紧张或是想节省成本,这个是可以理解的。但是不能一味的找报低价的软件团队,项目的报价跟很多因素有关,如果现在毕辩有朋友问我的话,我可能会说几万到几十万不等,在没有给出明确的需求之前,所有的报价都是大概或是一个区间。软件公司准确的报价都是建立在详细需求梳理的基础上。
聪明一点的软件公司会给你报一个很低的价格,来跟你促成下一步的商谈,然后再在商谈的过程中慢慢给你普及这方面的知识,让你认识做一个APP没有你想的那么简单,不可能几千块、几万块就能搞定。
那下面一航来帮你分析影响报价的因素有哪些:
第一:开发模式开发模式包含模板化开发、定制化开发两个方向。(1)模板化开发。模板化开发答手基本就是开发团队已经将某个行业的应用已经做好了(例如:本地化的团购),然后直接给你部署源码或是开通账号,然后基于这个基础进行修改部分的样式等等。
如果是开通账号的应用,那么费用是相对比较低的,可能几千块左右就能搞定了,因为软件公司的成本也低,软件已经开发好了来客户只开通账号就可以了,增加的无非是服务器的成本,签一个就赚一个。这样的应用你只能修改程序的一些样式、文字等等,是不可能对业务流程进行调整和修改的
如果是部署源码的应用,大部分是支持二次开发的,同时我们需要自行购买服务器,然后让公司按照自己的要求对程序进行修改,这个方式还是比较建议的,我们可以节省很多的成本。但二次开发是基于原有的业务或是开发与之相关的业务,比如在页面增加某些字段、新增某些数据的统计导出、增加分享功能、完善某个业务流程等等。如果对原来的程序进行大面积的调整的话还是建议走定制,因为在软件开发中新开发功能比修改功能要快很多,业内人士肯定都懂的。
(2)定制开发。定制开发是按照客户的要求量身定做,根据你的需求从0开发一款APP。这种方式成本是比较大的。根据开发方式的不同,对应的报价也会不同。APP的开发也分为原生开发和混合开发,混合开发成本相对原生开发来说成本要低一些,因为混合开发投入的人要少一些。简单来说混合开发是通过结合原生和H5开发技术进行APP开发,一个人可以开发android、ios两个客户端。如果是原生开发的话需要android开发一名和ios开发一名,测试人员也需要针对两个终端进行测试。成本高自然报价也高,关于混合开发和原生开发的差异就不在这里展开讲了,后续可以专门写一篇文章给大家介绍两者的具体区别。
第二:需求复杂度
在确认了开发模式后就大概知道要投入的技术人员,然后再根据产品经理给出的业务思维导图、需求文档等项目资料来准确的评估项目研发的周期,需求的复杂度决定了项目周期的长短,项目周期也就决定了最终的报价。客户跟产品之间的沟通是非常的重要,决定着项目后续项目的走向。客户的特点是了解行业和业务,产品特点是了解互联网产品的价值,如何可用,可行。需要双方紧密结合清数嫌来完成项目的研发。
那么在沟通完后产品需要产出以下资料:
(1)产品功能思维导图。思维导图是一种将思维形象化的方法,是表达发生那思维有效的工具。它可以将你脑海中的功能按照相互隶属的层级画出来,通过图形更清晰的表达你的需求。
(2)核心业务流程图。通过思维导图知道了项目大致的模块和功能点,但是不知道整个产品的运转逻辑,参与进来的角色有哪些,信息数据是怎么传递的。这个时候就需要核心业务流程图来表达。
(3)功能清单。功能清单是将思维导图的细化,对导图中的要做的功能进行细致的描述。让项目经理或开发团队能够认识到功能大概的样子。
(4)原型图。原型图是将需求转化成产品的一个过程示意图,是需求的外在逻辑,它可以更直观的让我们看到需求的样子。原型图要分为前端原型和后端原型,通过原型可以清楚地看到业务的说明、功能的分类、业务逻辑、页面跳转和细节说明等。
在这些资料的基础上再进行报价,得到的价格是相对于准确的。软件公司会根据具体的功能点进行计算,得到要投入的人数和天数,然后再按照公司的标准进行报价。其实报价的构成无非是:人数
* 天数 * 单价=项目总价。
假设拿一款社区团购类的APP来计算,软件公司了解完具体要做的功能后,能知道项目上需要投入的人数、时间,再根据自己的收费标准进行报价,计算出来是19万多一些。
软件外包公司的盈利模式很简单,
就是把低廉的员工时间高价卖给客户,从中赚取差价,同一个员工的时间在某个阶段只能卖给一个客户。举例:小张在某软件公司工作,薪资是10000元,那公司在给客户报价时,可能会按照28000元一个人月来报价,这样公司可以赚取18000元的差价,再扣除小张身上的各种其他支出(五险一金、公司房租、水电、各种福利等),那么剩余的就是公司的利润。
还有一个问题就是这些文档自己是整理不出来的,另外软件公司在签合同之前也不会把这些资料做的这么详细,这个也是目前软件外包行业的很大的问题。想开始之前整理好这些项目资料,只能自己去其他渠道找相关的产品经理,当然也可以联系一航。这些将会帮我们节省很多不必要的开发成本。
那么知道这些后,你自己可以想下“我要做一个类似XX的APP多少钱”这样的问题得到的结果只能是个大概的价格区间。如果在没有弄清楚具体的需求之前,草草的签了合同,那么基本上都是合同金额要大于项目实际金额的。
除了开发的费用外,其他方面的费用还有服务器、域名、第三方平台(短信、语音通知)等费用,这些就相对于少些了,服务器会占大部分,前期用户少可以先购买低配的服务器,后面再根据用户量和项目情况等再做配置升级。
最后,总结下如果想得到项目准确的报价,首先我们要确定项目的开发方式、项目形态(APP、小程序、公众)、项目详细的需求(功能思维导图、核心业务流程图、功能清单、原型图),有了这些后我们就非常清楚要做什么,做出来是什么样子,这样我们项目的风险会大大降低。
❹ 某社交App cs签名算法解析(一) SSL双向认证
奋飞: 老板,咱们得招几个妹子呀,咱们公司男女比例太失衡了。
李老板: 你去这个App上晃晃,据说上面妹子很多。
我去,包都抓不到,耍个毛纤带线呀。
TIP: 新鲜热乎的 v3.83.0
问了下谷歌,有不少同道都遇到了返回值是 400 No required SSL certificate was sent 这种情况。
他们一致认为,是遇到了SSL双向认证。
不过谷歌传来的消息是,搞SSL双向认证很简单,把客户端证书,搞出来,然后再导入到 Charles ,就大功告成了。
在Apk包里面轻松找到 /assets/client.p12, 下一步就是找对应的证书密码,so easy嘛。
Jadx上,搜索字符串 "client.p12" 或者 "client.cer", 字符串倒是都找到了,不过问题是,困团找不到这些字符串被调用的地方。
看来被同道们搞了好几轮,新版本的App做了修改了。
只要客户端有证书,那就一定会在使用中导入,我们在他导入的时候Dump出来,这样应该可以通杀了。
运行之前先允许这个App有读写存储卡的权限,因为最后我们是把证书写到sd卡里面汪竖橘了,否则会提示:
跑一下,程序崩溃了。
这也难不倒我们,估计大概率是被检测到了, 那么换frida端口,然后把fridaServer换成hluda-server。
再来,还是崩溃。奇怪,还有啥呢? Xposed。 把Xposed Status关掉。 再来。
完美,证书出来了,咱们赶紧拷出来。
Proxy -> SSL Porxy Settings
然后输入证书监控的host , * .sxxapp.cn ,端口是 443
迫不及待了,跑一把试试。
完美收工。
frida的spawn模式启动这个App的时候会崩掉,我认为是Xposed的原因,把Xposed关掉就好了。当然也许是我的手机环境有问题。
大家都在进步,所以要多掌握几种方法,东边不亮西边亮。
Dump证书的方法,参考 https://github.com/CreditTone/hooker 中的 keystore_mp.js 感谢大佬们提供的神奇工具。
当别人都很老实的时候,你就耍点儿小聪明;当别人都耍小聪明的时候,你就老实做人。当别人既会耍小聪明又会做老实人的时候,你就干点别的。
❺ APP 排名算法
当前常见的一些排行榜类型:
1、(累计)排行榜
如果笼统的说排行榜,一般指累计排行榜,一段时间内累计下载或安装的应用排行。这个榜单能够很好的反映出用户的历史行为数据,但你可以想象,排行榜内容几乎是不变的,微信QQ支付宝长期占据头条,因此用户查看的频率会比较低。
2、飙升榜(新锐榜)
飙升榜是基于每日新增下载app的榜单,便于用户及时发现新凸显的app。飙升帮的特点是每天每时都在变动,吸引用户高频度的查看。
3、个性榜
个性榜本质上属于内容推荐,根据用户的下载/安装过的内容进行的相关推荐。特点是榜单内容定制化,各个用户看到的内容不相同,更具针对性。
4、好友榜
基于好友下载内容的推荐,和个性版类似,但是需要用户账号体系支撑。
综上,目前常见的榜单主要分3类,基于下载量、新增下载量和个人历史推荐。其中,基于下载量、新增下载量又可以按照app类型(游戏/社交/音乐···)、用户地域和性别纬度来细分。
算法
最早我以为既然目标清晰了,那么直接用下载量、新增量排序的结果就是榜单。那么会存在问题,例如:
新app每日下载量10到1000的下载量,新增100倍,微信从40000到43000,新增比例不到10%。如果仅以增量作为飙升榜单的依据,可能出现的情况是榜单被知名度很高的app占领,那这样榜单就没有意义。所以对飙升榜来说,一定要通过某种算法,削弱高下载量app比重。
同时,榜单中一般会插入广告,如果不是在固定位置插入广告的话,需要通过算法尽可能将广告app的位置排前,毕竟广告收入是应用分发渠道商的主要收入来源。
算法模型
假设有X、Y、Z3个纬度,跟别代表app搜索量、app打开率和是否广告,那么算法公式f=aX+bY+cZ,其中abc表示各个纬度的系数,且a+b+c=1。通过不断的优化abc的值,就有可能得到收益最明显的热搜排行榜数据
❻ app请求数据解密(AES)一
接下去两篇文章我们主要介绍安全分析过程中burp抓包完解密 经过加密的请求数据 ,并在新建的消息编辑器中打印输出。这篇文章主要先介绍测试app中加晌老解密算宴圆升法的分析与还原。
一、分析请求数据的加密算法
结果如下所示
二、还原加密算法并测试
在下一篇文章中,将介绍app请求数据解密腔李插件的编写。该篇文章分析中用到frida脚本与还原后的算法,如果有需要,可以在公众号回复" AES Decrypt1 "获取。
❼ 02 如何衡量APP的盈利能力、广告的投资回报率
与成本相对应,则是收入、利润和投资回报率。而分析衡量收入、利润、投资回报率的角度多、指标名词多。通常情况下,新手在计算产品回收情况时,会被这些数据指标感到迷惑。
衡量一款APP的盈利能力,一般除了看流水收入Revenue,还需要看投资回报率ROI、ROAS和用户价值LTV、ARPU等指标。
分析用户价值的角度来看,则一般看LTV、ARPU等;
广告投放角度看,更多则是看流量渠道/广告平台/广告campaign带来的ROI、ROAS。
LTV(Life Time Value) ,指用户生命周期价值有时候也被称作CLV(Customer Lifetime Value);指的是在消费者作为产品用户的时,从注册到卸载的整个生命周期中,可以在消费者身上赚取多少收入。
计算产品LTV的最基本目的就是:用户会使用你的产品多少个月;平均每个月你能从用户身上赚多少钱。
不同产品计算LTV的公式不同,一般来说有以下几个角度:
用户生命周期价值(LTV)
=每个付费用户平均收入 (ARPU)×用户生命周期(LT)
=顾客终身购买次数×客单价×毛利率
=某个客户每个月的购买频次×客单价×毛利率 ×(1/月流失率)
用户生命周期:是流失率的倒数(1/流失率),如果APP的流失率是20%,那么APP用户的生命周期是5个月伍滚(一个用户留在你APP上的平均月份)。“1/月流失率”是得出平均每个客户在该平台能碰橘谈够留存的总时长是多少月。
ARPU(Average Revenue Per Pay User) :每个付费用户平均收入。
计算公式:ARPPU =总收入 / 付费用户数量
ARPU注重的是一个时间段内从每个用户所得到的收入。很明显,高端的用户越多,ARPU越高,用户的留存期越长ARPU越高。一般来说,发达国家地区的ARPU比发展中国家地区的ARPU高。IOS设备的ARPU比Android设备的ARPU高。
但需要注意的是,ARPU值高未必说明利润高,因为利润还需要考虑成本,如果每用户的成本也很高,那么即使ARPU值很高,利润也未必高。
ROI(Return On Investment) ,指投资回报率。
计算公式:ROI=利润/成本×100%=(收入-成本)/成本×100%
对于一些APP来说,LTV计算的周期比较长,而用ROI观测广告的投资回报率更为直接方便。因此,ROI广告投放最为常用的盈利指标之一。
一般来笑碰说,ROI,也会细分看新用户的ROI和总ROI。而新用户ROI,还会按时间维度,细分看3日ROI、7日ROI、14日ROI等。
ROAS(Return On Ad Spend) ,指目标广告支出回报率,即每刀的广告花费能带来多少收入。
计算公式:ROAS=总收入/广告支出 x 100%
举例:这个广告花了我1000刀,给我带来了5000刀的收入,则ROAS=5,意思是你在FB上花1刀就能带来5刀的收入。
这个指标主要是测量广告花费的,算是战术层级。而ROI不仅包含广告费,还考虑了其他方面的因素,属于战略层级。
❽ 常见APP数据统计算法
【基本数据】
日/月PV:竖闷当日浏览量;
日/月UV:当日浏览人数;
日/月活跃用户(DAU/MAU):在所选时间内,用户主观神租打开过至少一次app,即算活跃用户;
【用户黏性】
人均单日启动次数:是指在所选时间段内,app或行业平均每天被每个用户打开的次数。计算公式:sum{周期内第一游纤兆天 ~最后一天的(日度启动次数/日度活跃人数)}/周期内天数(日度平均算法)。
人均单日使用时长:是指在所选时间短内,app或行业平均每天被每个用户使用的时长。计算公式:sum{周期内第一天~最后一天的(日度使用时长/日度活跃人数)}/周期内天数(日度平均算法)。
单次使用时长:是指用户在选定时间段内人均每次使用app的时间;
【潜力算法】
活跃增幅:是指在选定时间段内启动过的用户数量(拍重之后即多日启动的活跃用户仅算1次)。
次月留存率增幅:是指统计周期内,新安装用户在次月依然使用app的用户比。计算公式:上月新安装在当月仍然活跃的人数/上月新安装的人数。
行业渗透率增幅:是指所选时间短内,app的活跃用户占该app所属行业活跃用户的比例。计算公式:app的活跃人数/app所属行业的活跃人数;